diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/.classpath b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/.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.sqltools.schemaobjecteditor.ui.pages/.project b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/.project
new file mode 100644
index 0000000..e9fb6e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages</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.sqltools.schemaobjecteditor.ui.pages/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bdeb57e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages;singleton:=true
+Bundle-Version: 1.1.0.qualifier
+Bundle-Activator: org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.draw2d;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.cheatsheets;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.help;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.help.base;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.datatools.help;bundle-version="[0.9.0,2.0.0)",
+ org.eclipse.datatools.sqltools.common.ui;bundle-version="[0.9.0,1.5.0)",
+ org.eclipse.datatools.sqltools.sqleditor;bundle-version="[0.9.0,1.5.0)",
+ org.eclipse.datatools.sqltools.editor.core;bundle-version="[0.9.0,1.5.0)",
+ org.eclipse.datatools.sqltools.schemaobjecteditor.ui;bundle-version="[0.9.0,1.5.0)",
+ org.eclipse.datatools.sqltools.schemaobjecteditor;bundle-version="[0.9.0,1.5.0)"
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages,
+ org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl,
+ org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/build.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/build.properties
new file mode 100644
index 0000000..fb392b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/build.properties
@@ -0,0 +1,13 @@
+bin.includes = plugin.xml,\
+               .,\
+               plugin.properties,\
+               META-INF/MANIFEST.MF,\
+               icons/,\
+               schema/introductionPage.exsd
+plugin.version = 1.1.0.qualifier
+qualifier=200810071
+jars.compile.order = .
+source.. = src/
+output.. = bin/              
+javacTarget=1.5
+javacSource=1.5
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/cheatSheet.gif b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/cheatSheet.gif
new file mode 100644
index 0000000..322c8cc
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/cheatSheet.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/help.gif b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/help.gif
new file mode 100644
index 0000000..03f656f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/help.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/main.gif b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/main.gif
new file mode 100644
index 0000000..3ba659c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/main.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_edit.gif b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_edit.gif
new file mode 100644
index 0000000..466bfb1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_edit.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_wiz.png b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_wiz.png
new file mode 100644
index 0000000..4923d03
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/saveas_wiz.png
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/start.gif b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/start.gif
new file mode 100644
index 0000000..5777119
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/icons/start.gif
Binary files differ
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.properties
new file mode 100644
index 0000000..a1d7183
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.properties
@@ -0,0 +1,5 @@
+Introduction_page_name=Introduction
+DDL_page_name=DDL
+
+plugin.name=Sybase WorkSpace Shcema Object Editor Page
+providerName=Sybase, Inc.
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.xml b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.xml
new file mode 100644
index 0000000..a789608
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension-point id="introductionPage" name="Introduction Page" schema="schema/introductionPage.exsd"/>
+   <extension
+         point="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.schemaObjectEditor">
+      <EditorPage
+            Class="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage.IntroductionPage"
+            PageId="org.eclipse.datatools.sqltools.schemaobjecteditor.pages.introduction.page"
+            PageName="%Introduction_page_name"
+            Required="false"
+            VisibleByDefault="true"/>
+      <EditorPage
+            Class="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl.DDLPage"
+            PageId="org.eclipse.datatools.sqltools.schemaobjecteditor.pages.ddl"
+            PageName="%DDL_page_name"
+            Required="false"
+            VisibleByDefault="true"/>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/schema/introductionPage.exsd b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/schema/introductionPage.exsd
new file mode 100644
index 0000000..2d9bbf1
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/schema/introductionPage.exsd
@@ -0,0 +1,152 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.datatools.sqltools.schemaobjecteditor" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.datatools.sqltools.schemaobjecteditor" id="introductionPage" name="Introduction Page"/>
+      </appinfo>
+      <documentation>
+         The introduction is the first page of all schema object editor.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="introPage"/>
+         </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="introPage">
+      <annotation>
+         <appinfo>
+            <meta.element labelAttribute="name"/>
+         </appinfo>
+         <documentation>
+            An introduction page is always put as the first page of one schema object editor to give the user a simple introduction of the editor.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="introElement"/>
+         </sequence>
+         <attribute name="Name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Name of this page
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="ContextHelpId" type="string">
+            <annotation>
+               <documentation>
+                  Description of the page
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="introElement">
+      <annotation>
+         <documentation>
+            An introduction page is consists of multiple introduction pages. Each introduction element occupies one row in the introduction page.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  The icon should be 72x72 and will appear to the left of the headers, hyperlinks and text
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="resource"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="heading" type="string">
+            <annotation>
+               <documentation>
+                  Heading of the element
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="text" type="string">
+            <annotation>
+               <documentation>
+                  The text to describe the element.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="hyperlink" type="string">
+            <annotation>
+               <documentation>
+                  A hyperlinke associated with the element. The hyperlink would normally execute the hyperlinkaction action.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="hyperlinkaction" type="string">
+            <annotation>
+               <documentation>
+                  The action will be executed when the hyperlink is selected
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage.IntroHyperAction:org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage.IIntroHyperAction"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+
+
+
+
+
+</schema>
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/LogMessages.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/LogMessages.properties
new file mode 100644
index 0000000..0002c64
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/LogMessages.properties
@@ -0,0 +1,2 @@
+IntroductionSection_create_intro_action=Error occurs when creating actions on introduction page
+IntroductionSection_error_read_image=Error occurs when reading images file on introduction page
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/SOEUIPagePlugin.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/SOEUIPagePlugin.java
new file mode 100644
index 0000000..863fa03
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/SOEUIPagePlugin.java
@@ -0,0 +1,163 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages;
+
+import java.util.ResourceBundle;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.ColorProvider;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.ILogger;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.StatusLogger;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class SOEUIPagePlugin extends AbstractUIPlugin
+{
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages";
+
+    // The shared instance
+    private static SOEUIPagePlugin   plugin;
+
+    private ColorProvider      _colorProvider;
+
+    private ResourceBundle     _bundle   = ResourceBundle
+                                                 .getBundle("org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.LogMessages");
+
+    /**
+     * The constructor
+     */
+    public SOEUIPagePlugin()
+    {
+        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
+    {
+        // release those Color objects
+        if (_colorProvider != null)
+        {
+            _colorProvider.dispose();
+            _colorProvider = null;
+        }
+        plugin = null;
+        super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static SOEUIPagePlugin getDefault()
+    {
+        return plugin;
+    }
+
+    public ColorProvider getColorProvider()
+    {
+        if (_colorProvider == null)
+        {
+            _colorProvider = new ColorProvider();
+        }
+        return _colorProvider;
+    }
+
+    /**
+     * Returns a logger.
+     * 
+     * @param bundle the bundle used in logger
+     * @return a logger
+     */
+    public static ILogger getLogger(ResourceBundle bundle)
+    {
+        return new StatusLogger(getDefault().getLog(), PLUGIN_ID, bundle == null ? getDefault()._bundle : bundle);
+    }
+
+    /**
+     * Get active workbench page.
+     * <p>
+     * This method acts as a convenience for plug-in implementors.
+     * </P>
+     * 
+     * @return IWorkbenchPage the workbench page for this plug-in
+     */
+    public static IWorkbenchPage getActiveWorkbenchPage()
+    {
+        IWorkbenchPage workbenchPage = getActiveWorkbenchWindow().getActivePage();
+        if (workbenchPage != null)
+        {
+            return workbenchPage;
+        }
+        IWorkbenchPage[] workbenchPages = getActiveWorkbenchWindow().getPages();
+        if (workbenchPages.length > 0)
+        {
+            return workbenchPages[0];
+        }
+        return null;
+    }
+
+    /**
+     * Get active workbench window.
+     * <p>
+     * This method exists as a convenience for plug-in implementors.
+     * </p>
+     * 
+     * @return IWorkbenchWindow the workbench for this plug-in
+     */
+    public static IWorkbenchWindow getActiveWorkbenchWindow()
+    {
+        IWorkbenchWindow window = getDefault().getWorkbench().getActiveWorkbenchWindow();
+        if (window != null)
+        {
+            return window;
+        }
+        IWorkbenchWindow[] windows = getDefault().getWorkbench().getWorkbenchWindows();
+        if (windows.length > 0)
+        {
+            return windows[0];
+        }
+        return null;
+    }
+
+    /**
+     * @return
+     */
+    public static Shell getActiveWorkbenchShell()
+    {
+        IWorkbenchWindow window = getActiveWorkbenchWindow();
+        if (window != null)
+        {
+            return window.getShell();
+        }
+        IWorkbenchWindow[] windows = getDefault().getWorkbench().getWorkbenchWindows();
+        if (windows.length > 0)
+            return windows[0].getShell();
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/DDLPage.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/DDLPage.java
new file mode 100644
index 0000000..f7780e8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/DDLPage.java
@@ -0,0 +1,277 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.datatools.sqltools.common.ui.sqlstatementarea.SQLStatementArea;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ddl.IDDLProvider;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditor;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorInput;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorPage;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core.SchemaObjectEditorPage;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.ui.SQLSourceViewerService;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.utils.Images;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.Util;
+import org.eclipse.jface.action.Action;
+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.action.Separator;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+import org.eclipse.ui.texteditor.IUpdate;
+
+/**
+ * The DDL page
+ * 
+ * @author Idull
+ */
+public class DDLPage extends SchemaObjectEditorPage implements ISchemaObjectEditorPage
+{
+    private SQLStatementArea _sta;
+    private Map              _actions = new HashMap();
+    private IDDLProvider     _provider;
+    private Color            _bgColor;
+
+    public DDLPage()
+    {
+
+    }
+
+    public DDLPage(FormEditor editor, String id, String title)
+    {
+        super(editor, id, title);
+    }
+
+    public DDLPage(String id, String title)
+    {
+        super(id, title);
+    }
+
+    protected void createFormContent(IManagedForm managedForm)
+    {
+        super.createFormContent(managedForm);
+
+        // set the ddl provider
+        initDDLProvider();
+
+        Composite comp = managedForm.getForm().getBody();
+        GridLayout layout = new GridLayout();
+        layout.marginHeight = 0;
+        layout.marginWidth = 0;
+        comp.setLayout(layout);
+
+        createSQLArea(comp);
+    }
+
+    private void initDDLProvider()
+    {
+        ISchemaObjectEditor editor = (ISchemaObjectEditor) getEditor();
+        IEditorPart part = (IEditorPart) editor;
+        ISchemaObjectEditorInput input = (ISchemaObjectEditorInput) part.getEditorInput();
+        if (input.getEditModelObject().getAdapter(IDDLProvider.class) != null)
+        {
+            _provider = (IDDLProvider) input.getEditModelObject().getAdapter(IDDLProvider.class);
+        }
+    }
+
+    private void initializeActions()
+    {
+        CommonAction action = new CommonAction(_sta.getViewer().getTextOperationTarget(), ITextOperationTarget.COPY,
+                Messages.DDLPage_copy);
+        action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+                ISharedImages.IMG_TOOL_COPY));
+        _actions.put(ITextEditorActionConstants.COPY, action);
+
+        action = new CommonAction(_sta.getViewer().getTextOperationTarget(), ITextOperationTarget.SELECT_ALL,
+                Messages.DDLPage_selectall);
+        _actions.put(ITextEditorActionConstants.SELECT_ALL, action);
+    }
+
+    private void createSQLArea(Composite comp)
+    {
+        ISchemaObjectEditor editor = (ISchemaObjectEditor) getEditor();
+        String dbType = editor.getEditorDescriptor().getVendorName() + "_" + editor.getEditorDescriptor().getVersion(); //$NON-NLS-1$
+        _sta = new SQLStatementArea(comp, SWT.NONE, new SQLSourceViewerService(), true);
+        String ddlContent = "";
+        if (_provider != null)
+        {
+            ddlContent = _provider.getDDL();
+        }
+        _sta.setInput(ddlContent, dbType);
+        _sta.setEditable(false);
+        _sta.setEnabled(true);
+        _sta.configureViewer(new SQLSourceViewerConfiguration(dbType));
+        _sta.setLayoutData(new GridData(GridData.FILL_BOTH));
+        _bgColor = Util.getBackGroundColor(_sta.getViewer().getControl().getDisplay());
+        if (_bgColor != null)
+        {
+            _sta.getViewer().getTextWidget().setBackground(_bgColor);
+        }
+
+        initializeActions();
+        createContextMenu();
+    }
+
+    private void createContextMenu()
+    {
+        final MenuManager menuMgr = new MenuManager();
+        menuMgr.setRemoveAllWhenShown(true);
+        menuMgr.addMenuListener(new IMenuListener()
+        {
+            public void menuAboutToShow(IMenuManager manager)
+            {
+                // update items' status
+                Iterator iter = _actions.values().iterator();
+                while (iter.hasNext())
+                {
+                    Object obj = iter.next();
+                    if (obj instanceof IUpdate)
+                    {
+                        IUpdate action = (IUpdate) obj;
+                        action.update();
+                    }
+                }
+                menuMgr.add((IAction) _actions.get(ITextEditorActionConstants.COPY));
+                menuMgr.add((IAction) _actions.get(ITextEditorActionConstants.SELECT_ALL));
+                menuMgr.add(new Separator());
+                String ddlContent = "";
+                if (_provider != null)
+                {
+                    ddlContent = _provider.getDDL();
+                }
+
+                SaveAsAction saveAs = new SaveAsAction(ddlContent, (ISchemaObjectEditor) getEditor(),
+                        getDatabaseIdentifier());
+                saveAs.setText(Messages.DDLPage_saveas);
+                saveAs.setImageDescriptor(Images.DESC_SAVEAS_ACTION);
+                saveAs.setEnabled(ddlContent != null && !ddlContent.trim().equals(""));
+                menuMgr.add(saveAs);
+            }
+        });
+        Menu menu = menuMgr.createContextMenu(_sta.getViewer().getTextWidget());
+        _sta.getViewer().getTextWidget().setMenu(menu);
+        _sta.getViewer().getTextWidget().addKeyListener(new KeyAdapter()
+        {
+            public void keyPressed(KeyEvent event)
+            {
+                if (event.keyCode == 'a' && (event.stateMask & SWT.CTRL) != 0)
+                {
+                    CommonAction action = (CommonAction) _actions.get(ITextEditorActionConstants.SELECT_ALL);
+                    if (action != null)
+                    {
+                        action.run();
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * Refresh to display to new DDL
+     */
+    public void refresh()
+    {
+        super.refresh();
+        if (!isPageOpened())
+        {
+            return;
+        }
+        initDDLProvider();
+        updateDDL();
+    }
+
+    private void updateDDL()
+    {
+        String ddlContent = "";
+        if (_provider != null)
+        {
+            ddlContent = _provider.getDDL();
+        }
+        ISchemaObjectEditor editor = (ISchemaObjectEditor) getEditor();
+        String dbType = editor.getEditorDescriptor().getVendorName() + "_" + editor.getEditorDescriptor().getVersion(); //$NON-NLS-1$
+        // The SQL statement area may not be created
+        if (_sta != null)
+        {
+            _sta.setInput(ddlContent, dbType);
+        }
+    }
+
+    public void setActive(boolean active)
+    {
+        super.setActive(active);
+        if (active)
+        {
+            updateDDL();
+        }
+    }
+
+    public void dispose()
+    {
+        super.dispose();
+        if (_bgColor != null && !_bgColor.isDisposed())
+        {
+            _bgColor.dispose();
+        }
+    }
+}
+
+class CommonAction extends Action implements IUpdate
+{
+    private int                  _operationCode;
+    private ITextOperationTarget _target;
+
+    /**
+     * 
+     */
+    public CommonAction(ITextOperationTarget target, int operationCode, String itemName)
+    {
+        super();
+        _operationCode = operationCode;
+        _target = target;
+        this.setText(itemName);
+    }
+
+    /**
+     * delegate the call to ITextOperationTarget instance
+     */
+    public void run()
+    {
+        _target.doOperation(_operationCode);
+    }
+
+    public void update()
+    {
+        boolean wasEnabled = isEnabled();
+        boolean isEnabled = (_target != null && _target.canDoOperation(_operationCode));
+        setEnabled(isEnabled);
+
+        if (wasEnabled != isEnabled)
+        {
+            firePropertyChange(ENABLED, wasEnabled ? Boolean.TRUE : Boolean.FALSE, isEnabled ? Boolean.TRUE
+                    : Boolean.FALSE);
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/Messages.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/Messages.java
new file mode 100644
index 0000000..b9bdffa
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/Messages.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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = Messages.class.getPackage().getName() + ".messages"; //$NON-NLS-1$
+    public static String        DDLPage_copy;
+    public static String        DDLPage_selectall;
+    public static String        DDLPage_saveas;
+
+    static
+    {
+        // initialize resource bundle
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+
+    private Messages()
+    {
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLCommentScanner.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLCommentScanner.java
new file mode 100644
index 0000000..4adf51c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLCommentScanner.java
@@ -0,0 +1,63 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.ColorProvider;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.AbstractSQLScanner;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.ISQLPartitions;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.rules.Token;
+
+/**
+ * 
+ * @author Li Huang
+ */
+public class SQLCommentScanner extends AbstractSQLScanner
+{
+
+    ColorProvider _provider = SOEUIPagePlugin.getDefault().getColorProvider();
+    String        _commentKey;
+
+    public SQLCommentScanner(String commentKey)
+    {
+        _commentKey = commentKey;
+        initialize();
+    }
+
+    protected Token getToken()
+    {
+
+        Token token = new Token(null);
+        if (_commentKey.equals(ISQLPartitions.SQL_COMMENT))
+        {
+            token = new Token(new TextAttribute(_provider.getColor(ColorProvider.SINGLE_LINE_COMMENT)));
+        }
+        else if (_commentKey.equals(ISQLPartitions.SQL_MULTILINE_COMMENT))
+        {
+            token = new Token(new TextAttribute(_provider.getColor(ColorProvider.MULTI_LINE_COMMENT)));
+        }
+        return token;
+    }
+
+    /*
+     * @see AbstractSQLScanner#createRules()
+     */
+    protected List createRules()
+    {
+        List list = new ArrayList();
+        Token defaultToken = getToken();
+        setDefaultReturnToken(defaultToken);
+
+        return list;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLSourceViewerConfiguration.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLSourceViewerConfiguration.java
new file mode 100644
index 0000000..3208dc9
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SQLSourceViewerConfiguration.java
@@ -0,0 +1,128 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
+import org.eclipse.datatools.sqltools.sqleditor.internal.SQLEditorPlugin;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.ISQLPartitions;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.SQLCodeScanner;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.SQLDoubleClickStrategy;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.SQLPartitionScanner;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextDoubleClickStrategy;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
+import org.eclipse.jface.text.rules.ITokenScanner;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+
+/**
+ * This is a common implementation of <code>SourceViewerConfiguration </code> for DMP. This configuraion is used for SQL
+ * Statements preview which supports: <li>Syntax high lighting <li>Double click strategy
+ * <p>
+ * If user wants to support content assistant and autoEditStrategy, user needs to subclass this class with overridding
+ * some motheds or subclass <code>SourceViewerConfiguration </code> directly.
+ * 
+ * @author Shifeng Yu
+ * 
+ */
+public class SQLSourceViewerConfiguration extends SourceViewerConfiguration
+{
+    private ITokenScanner _SQLCodeScanner;
+    private ITokenScanner _SQLStringScanner;
+    private ITokenScanner _multilineCommentScanner;
+    private ITokenScanner _singlelineCommentScanner;
+
+    /**
+     * The SQL identifier which is enclosed in double quotes scanner.
+     */
+    private ITokenScanner _SQLDoubleQuotesIdentifierScanner;
+
+    private String        _dbType = null;
+
+    /**
+     * Instantiates a new SQLSourceViewerConfiguration with the parameter:database type.
+     * 
+     * @param dbType
+     */
+    public SQLSourceViewerConfiguration(String dbType)
+    {
+        this._dbType = dbType;
+        initializeScanners();
+    }
+
+    /**
+     * Initializes the scanners.
+     * 
+     */
+    private void initializeScanners()
+    {
+        _SQLCodeScanner = new SQLCodeScanner(SQLEditorPlugin.getDefault().getSQLColorProvider());
+        ((SQLCodeScanner) _SQLCodeScanner).setSQLSyntax(SQLToolsFacade.getSQLSyntax(this._dbType));
+        _multilineCommentScanner = new SQLCommentScanner(ISQLPartitions.SQL_MULTILINE_COMMENT);
+        _singlelineCommentScanner = new SQLCommentScanner(ISQLPartitions.SQL_COMMENT);
+        _SQLDoubleQuotesIdentifierScanner = new SingleTokenSQLScanner(ISQLPartitions.SQL_DOUBLE_QUOTES_IDENTIFIER);
+        _SQLStringScanner = new SingleTokenSQLScanner(ISQLPartitions.SQL_STRING);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.jface.text.source.SourceViewerConfiguration#getPresentationReconciler(org.eclipse.jface.text.source
+     * .ISourceViewer)
+     */
+    public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer)
+    {
+        PresentationReconciler reconciler = new PresentationReconciler();
+        reconciler.setDocumentPartitioning(ISQLPartitions.SQL_PARTITIONING);
+
+        // rule for default text
+        DefaultDamagerRepairer dr = new DefaultDamagerRepairer(this._SQLCodeScanner);
+        reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
+        reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
+
+        // rule for multiline comments
+        dr = new DefaultDamagerRepairer(this._multilineCommentScanner);
+        reconciler.setDamager(dr, ISQLPartitions.SQL_MULTILINE_COMMENT);
+        reconciler.setRepairer(dr, ISQLPartitions.SQL_MULTILINE_COMMENT);
+
+        // rule for singleline comments
+        dr = new DefaultDamagerRepairer(this._singlelineCommentScanner);
+        reconciler.setDamager(dr, ISQLPartitions.SQL_COMMENT);
+        reconciler.setRepairer(dr, ISQLPartitions.SQL_COMMENT);
+
+        // rule for SQL Strings
+        dr = new DefaultDamagerRepairer(this._SQLStringScanner);
+        reconciler.setDamager(dr, ISQLPartitions.SQL_STRING);
+        reconciler.setRepairer(dr, ISQLPartitions.SQL_STRING);
+
+        // rule for double quoted identifiers
+        dr = new DefaultDamagerRepairer(this._SQLDoubleQuotesIdentifierScanner);
+        reconciler.setDamager(dr, ISQLPartitions.SQL_DOUBLE_QUOTES_IDENTIFIER);
+        reconciler.setRepairer(dr, ISQLPartitions.SQL_DOUBLE_QUOTES_IDENTIFIER);
+
+        dr = new DefaultDamagerRepairer(this._SQLCodeScanner);
+        reconciler.setDamager(dr, SQLPartitionScanner.SQL_CODE);
+        reconciler.setRepairer(dr, SQLPartitionScanner.SQL_CODE);
+        return reconciler;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.jface.text.source.SourceViewerConfiguration#getDoubleClickStrategy(org.eclipse.jface.text.source.
+     * ISourceViewer, java.lang.String)
+     */
+    public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType)
+    {
+        return new SQLDoubleClickStrategy();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SaveAsAction.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SaveAsAction.java
new file mode 100644
index 0000000..b4abeea
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SaveAsAction.java
@@ -0,0 +1,64 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import org.eclipse.datatools.sqltools.common.ui.dialog.SaveAsDialog;
+import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
+import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
+import org.eclipse.datatools.sqltools.editor.core.connection.ISQLEditorConnectionInfo;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditor;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorHandler;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core.DefaultSchemaObjectEditorHandler;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin;
+import org.eclipse.datatools.sqltools.sqleditor.SQLEditor;
+import org.eclipse.datatools.sqltools.sqleditor.SQLEditorConnectionInfo;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * Save as action in DDL page
+ * 
+ * @author Idull
+ */
+public class SaveAsAction extends Action
+{
+    private ISchemaObjectEditor _editor;
+    private String              _content;
+    private DatabaseIdentifier  _databaseIdentifier;
+
+    public SaveAsAction(String content, ISchemaObjectEditor editor, DatabaseIdentifier databaseIdentifier)
+    {
+        super();
+        _content = content;
+        _editor = editor;
+        _databaseIdentifier = databaseIdentifier;
+    }
+
+    public void run()
+    {
+        SaveAsDialog dlg = new SaveAsDialog(SOEUIPagePlugin.getActiveWorkbenchShell(), _content);
+        dlg.setOriginalName(_editor.getDisplayName() + "_ddl.sql");
+
+        ISchemaObjectEditorHandler handler = _editor.getEditorHandler();
+        if (handler instanceof DefaultSchemaObjectEditorHandler)
+        {
+            boolean isOpen = ((DefaultSchemaObjectEditorHandler) handler).getOpenFileAfterSaveasOption();
+            dlg.setOpenMode(isOpen);
+        }
+        dlg.open();
+        IEditorPart editor = dlg.getEditor();
+        if (editor != null && (editor instanceof SQLEditor))
+        {
+            ISQLEditorConnectionInfo connInfo = new SQLEditorConnectionInfo(SQLToolsFacade
+                    .getConfigurationByProfileName(_databaseIdentifier.getProfileName())
+                    .getDatabaseVendorDefinitionId(), _databaseIdentifier.getProfileName(), _databaseIdentifier
+                    .getDBname(), _databaseIdentifier.getDBname());
+            ((SQLEditor) editor).setConnectionInfo(connInfo);
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SingleTokenSQLScanner.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SingleTokenSQLScanner.java
new file mode 100644
index 0000000..da0e06c
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/SingleTokenSQLScanner.java
@@ -0,0 +1,63 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.ddl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.ColorProvider;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.AbstractSQLScanner;
+import org.eclipse.datatools.sqltools.sqleditor.internal.sql.ISQLPartitions;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.rules.Token;
+
+/**
+ * @author Li Huang
+ * 
+ */
+public class SingleTokenSQLScanner extends AbstractSQLScanner
+{
+
+    ColorProvider _provider = SOEUIPagePlugin.getDefault().getColorProvider();
+    String        _tokenKey;
+
+    public SingleTokenSQLScanner(String tokenKey)
+    {
+        _tokenKey = tokenKey;
+        initialize();
+    }
+
+    protected Token getToken()
+    {
+
+        Token token = new Token(null);
+        if (_tokenKey.equals(ISQLPartitions.SQL_STRING))
+        {
+            token = new Token(new TextAttribute(_provider.getColor(ColorProvider.STRING)));
+        }
+        else if (_tokenKey.equals(ISQLPartitions.SQL_DOUBLE_QUOTES_IDENTIFIER))
+        {
+            token = new Token(new TextAttribute(_provider.getColor(ColorProvider.STRING)));
+        }
+        return token;
+    }
+
+    /*
+     * @see AbstractSQLScanner#createRules()
+     */
+    protected List createRules()
+    {
+        List list = new ArrayList();
+        Token defaultToken = getToken();
+        setDefaultReturnToken(defaultToken);
+
+        return list;
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/messages.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/messages.properties
new file mode 100644
index 0000000..c961698
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/ddl/messages.properties
@@ -0,0 +1,3 @@
+DDLPage_copy=&Copy
+DDLPage_selectall=Select &All
+DDLPage_saveas=&Save As...
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/DisplayHelpAction.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/DisplayHelpAction.java
new file mode 100644
index 0000000..b9ae0fd
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/DisplayHelpAction.java
@@ -0,0 +1,90 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorPage;
+import org.eclipse.help.HelpSystem;
+import org.eclipse.help.IContext;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * 
+ * @author Hui Cao
+ * 
+ */
+public class DisplayHelpAction extends Action implements IIntroHyperAction
+{
+    String _contextHelpId = null;
+    String _pluginId      = null;
+
+    public DisplayHelpAction()
+    {
+
+    }
+
+    public DisplayHelpAction(String text)
+    {
+        super(text);
+
+    }
+
+    public DisplayHelpAction(String text, String contextHelpId)
+    {
+        super(text);
+        _contextHelpId = contextHelpId;
+    }
+
+    private void displayHelp()
+    {
+        String contextId = null;
+        if (_contextHelpId != null && _pluginId != null)
+        {
+            contextId = HelpUtil.getContextId(_contextHelpId, _pluginId);
+        }
+
+        if ((contextId != null) && (contextId.length() > 0))
+        {
+            IContext context = HelpSystem.getContext(contextId);
+
+            if (context == null || (context.getRelatedTopics().length == 0)
+                    || (context.getRelatedTopics()[0].getHref() == null))
+            {
+                PlatformUI.getWorkbench().getHelpSystem().displayHelp();
+            }
+            else if (context.getRelatedTopics().length > 1)
+            {
+                PlatformUI.getWorkbench().getHelpSystem().displayHelp(contextId);
+            }
+            else
+            {
+                PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(context.getRelatedTopics()[0].getHref());
+            }
+        }
+        else
+        {
+            PlatformUI.getWorkbench().getHelpSystem().displayHelp();
+        }
+
+    }
+
+    public void run()
+    {
+        displayHelp();
+    }
+
+    public void setPage(ISchemaObjectEditorPage page)
+    {
+        if (_contextHelpId == null && page instanceof IntroductionPage)
+        {
+            _contextHelpId = ((IntroductionPage) page).getContextHelpId();
+            _pluginId = page.getEditorDescriptor().getPluginId();
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IIntroHyperAction.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IIntroHyperAction.java
new file mode 100644
index 0000000..388cc70
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IIntroHyperAction.java
@@ -0,0 +1,26 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorPage;
+import org.eclipse.jface.action.IAction;
+
+/**
+ * Will be called to set the page
+ * 
+ * @author Idull
+ */
+public interface IIntroHyperAction extends IAction
+{
+    /**
+     * Sets the page's reference
+     * 
+     * @param page
+     */
+    public void setPage(ISchemaObjectEditorPage page);
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/ImageContainer.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/ImageContainer.java
new file mode 100644
index 0000000..302d7ce
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/ImageContainer.java
@@ -0,0 +1,86 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * A composite containing an image
+ * 
+ * @author Idull
+ */
+public class ImageContainer extends Composite
+{
+
+    private Image _image;
+
+    public ImageContainer(Composite parent)
+    {
+        super(parent, SWT.NONE);
+        setBackground(ColorConstants.white);
+
+        addPaintListener(new PaintListener()
+        {
+
+            public void paintControl(PaintEvent e)
+            {
+                if (_image != null)
+                {
+                    e.gc.drawImage(_image, 0, 0);
+                }
+            }
+        });
+
+        addControlListener(new ControlListener()
+        {
+
+            public void controlMoved(ControlEvent e)
+            {
+
+            }
+
+            public void controlResized(ControlEvent e)
+            {
+                if (_image != null)
+                {
+                    setSize(_image.getBounds().width, _image.getBounds().height);
+                }
+            }
+        });
+
+        addDisposeListener(new DisposeListener()
+        {
+
+            public void widgetDisposed(DisposeEvent e)
+            {
+                if (_image != null && !_image.isDisposed())
+                {
+                    _image.dispose();
+                }
+            }
+        });
+    }
+
+    public void setImage(Image image)
+    {
+        _image = image;
+        if (_image != null)
+        {
+            setSize(_image.getBounds().width, _image.getBounds().height);
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroConstants.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroConstants.java
new file mode 100644
index 0000000..8695407
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroConstants.java
@@ -0,0 +1,35 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+/**
+ * Constants for introduction page
+ * 
+ * @author Idull
+ */
+public class IntroConstants
+{
+    public static final String EXTENSION_POINT_NAME_INTRO_PAGE                = "introductionPage";
+    public static final String EXTENSION_POINT_INTRO_PAGE                     = "introPage";
+    public static final String EXTENSION_POINT_INTRO_PAGE_NAME                = "Name";
+    public static final String EXTENSION_POINT_INTRO_PAGE_HELPID              = "ContextHelpId";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT                  = "introElement";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_ICON             = "icon";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_HEADING          = "heading";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_TEXT             = "text";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_ID               = "id";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_HYPERLINK        = "hyperlink";
+    public static final String EXTENSION_POINT_INTRO_ELEMENT_HYPERLINK_ACTION = "hyperlinkaction";
+    public static final String INTRODUCTION_PAGE_ID                           = "org.eclipse.datatools.sqltools.schemaobjecteditor.pages.introduction.page";
+
+    // default element ids
+    public static final String HELP_ELEMENT_ID                                = "help";
+    public static final String CHEAT_SHEET_ELEMENT_ID                         = "cheatsheet";
+    public static final String START_ELEMENT_ID                               = "start";
+    public static final String DESCRIPTION_ELEMENT_ID                         = "description";
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroHyperAction.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroHyperAction.java
new file mode 100644
index 0000000..18c26e2
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroHyperAction.java
@@ -0,0 +1,25 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorPage;
+import org.eclipse.jface.action.Action;
+
+/**
+ * 
+ * @author Idull
+ */
+public class IntroHyperAction extends Action implements IIntroHyperAction
+{
+    protected ISchemaObjectEditorPage _introPage;
+
+    public void setPage(ISchemaObjectEditorPage page)
+    {
+        _introPage = page;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionPage.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionPage.java
new file mode 100644
index 0000000..041fb4f
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionPage.java
@@ -0,0 +1,68 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.datatools.help.HelpUtil;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core.SchemaObjectEditorPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+/**
+ * The introduction page
+ * 
+ * @author Idull
+ */
+public class IntroductionPage extends SchemaObjectEditorPage
+{
+    private String _contextHelpId = null;
+
+    protected void createFormContent(IManagedForm managedForm)
+    {
+
+        super.createFormContent(managedForm);
+        Composite comp = managedForm.getForm().getBody();
+        managedForm.getForm().setText(Messages.IntroductionPage_page_title); //$NON-NLS-1$
+        TableWrapLayout layout = new TableWrapLayout();
+        comp.setLayout(layout);
+
+        Composite container = managedForm.getToolkit().createComposite(comp);
+        layout = new TableWrapLayout();
+        container.setLayout(layout);
+        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);
+        container.setLayoutData(td);
+
+        String pageExtensionId = getPageDescriptor().getPageExtensionId();
+
+        IntroductionSection introSection = new IntroductionSection(pageExtensionId, getEditor().getToolkit(),
+                Messages.IntroductionPage_section_title, container.getDisplay(), SWT.NONE); //$NON-NLS-1$
+        _contextHelpId = introSection.getContextHelpId();
+        introSection.setPage(this);
+        introSection.createControl(container, 1, _contextHelpId);
+        introSection.setPluginId(getEditorDescriptor().getPluginId());
+        if (introSection.getPageName() != null && introSection.getPageName().trim().length() != 0)
+        {
+            managedForm.getForm().setText(introSection.getPageName());
+        }
+    }
+
+    public void createPartControl(Composite parent)
+    {
+        super.createPartControl(parent);
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+                HelpUtil.getContextId(_contextHelpId, getEditorDescriptor().getPluginId()));
+    }
+
+    public String getContextHelpId()
+    {
+        return _contextHelpId;
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionSection.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionSection.java
new file mode 100644
index 0000000..fc96900
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/IntroductionSection.java
@@ -0,0 +1,261 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.ISchemaObjectEditorPage;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.common.CollapseableSection;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin;
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.ILogger;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormText;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.framework.Bundle;
+
+/**
+ * The introduction section
+ * 
+ * @author Idull
+ */
+public class IntroductionSection extends CollapseableSection
+{
+    private String                  _pageExtensionId;
+    private String                  _pageName;
+    private ISchemaObjectEditorPage _page;
+    private ILogger                 _log = SOEUIPagePlugin.getLogger(null);
+    private List                    _images;
+
+    public IntroductionSection(String pageExtensionId, FormToolkit toolkit, String title, Display display, int estyle)
+    {
+        super(toolkit, title, display, estyle);
+        this._pageExtensionId = pageExtensionId;
+        IConfigurationElement element = getExtension();
+        if (element != null)
+        {
+            _helpContextId = element.getAttribute(IntroConstants.EXTENSION_POINT_INTRO_PAGE_HELPID);
+        }
+        _images = new ArrayList();
+    }
+
+    public void createSectionContent(Composite parent)
+    {
+        // Set layout and layout data for section
+        getSection().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));
+        getSection().setLayout(new TableWrapLayout());
+        parent.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));
+
+        TableWrapLayout layout = new TableWrapLayout();
+        layout.numColumns = 2;
+        layout.makeColumnsEqualWidth = false;
+        layout.horizontalSpacing = 20;
+        layout.verticalSpacing = 20;
+        parent.setLayout(layout);
+
+        IConfigurationElement element = getExtension();
+        if (element != null)
+        {
+            _helpContextId = element.getAttribute(IntroConstants.EXTENSION_POINT_INTRO_PAGE_HELPID);
+            _pageName = element.getAttribute(IntroConstants.EXTENSION_POINT_INTRO_PAGE_NAME);
+
+            IConfigurationElement[] introElements = element.getChildren(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT);
+            for (int i = 0; i < introElements.length; i++)
+            {
+                String icon = introElements[i].getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_ICON);
+                String id = introElements[i].getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_ID);
+                String heading = introElements[i].getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_HEADING);
+                String text = introElements[i].getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_TEXT);
+                String hyperlink = introElements[i]
+                        .getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_HYPERLINK);
+                String hyperlinkaction = introElements[i]
+                        .getAttribute(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_HYPERLINK_ACTION);
+                IIntroHyperAction hyperAction = null;
+
+                String pluginNS = introElements[i].getDeclaringExtension().getNamespaceIdentifier();
+                Bundle bundle = Platform.getBundle(pluginNS);
+                Image image = readImage(bundle, icon);
+
+                if (id != null)
+                {
+                    PredefinedIntroSection defSec = (PredefinedIntroSection) PredefinedIntroSection.SECTIONS.get(id);
+                    if (defSec != null)
+                    {
+                        if (image == null && icon == null)
+                        {
+                            image = defSec.getIcon().createImage();
+                        }
+                        if (heading == null)
+                        {
+                            heading = defSec.getHeading();
+                        }
+                        if (text == null)
+                        {
+                            text = defSec.getText();
+                        }
+                        if (hyperlink == null)
+                        {
+                            hyperlink = defSec.getHyperlink();
+                        }
+                        if (hyperlinkaction == null)
+                        {
+                            hyperAction = defSec.getHyperlinkAction();
+                        }
+                    }
+                }
+
+                if (image != null)
+                {
+                    ImageContainer ic = new ImageContainer(parent);
+                    ic.setImage(image);
+                    TableWrapData td = new TableWrapData();
+                    td.rowspan = 2;
+                    ic.setLayoutData(td);
+                    _images.add(image);
+                }
+                else
+                {
+                    // occupy the position
+                    Composite comp = new Composite(parent, SWT.NONE);
+                    TableWrapData td = new TableWrapData();
+                    td.rowspan = 2;
+                    comp.setLayoutData(td);
+                }
+
+                // if heading is specified, we won't display the hyperlink
+                if (heading != null && heading.trim().length() != 0)
+                {
+                    Label head = _toolkit.createLabel(parent, heading);
+                    head.setFont(JFaceResources.getHeaderFont());
+                }
+                else if (hyperlink != null && hyperlink.trim().length() != 0)
+                {
+                    Hyperlink hl = _toolkit.createHyperlink(parent, hyperlink, SWT.NONE);
+
+                    if (hyperAction == null && hyperlinkaction != null)
+                    {
+                        try
+                        {
+                            hyperAction = (IIntroHyperAction) introElements[i]
+                                    .createExecutableExtension(IntroConstants.EXTENSION_POINT_INTRO_ELEMENT_HYPERLINK_ACTION);
+                        }
+                        catch (Exception e)
+                        {
+                            _log.error("IntroductionSection_create_intro_action", e);
+                        }
+                    }
+
+                    if (hyperAction != null)
+                    {
+                        hyperAction.setPage(_page);
+                    }
+                    final IIntroHyperAction hAction = hyperAction;
+                    hl.addHyperlinkListener(new HyperlinkAdapter()
+                    {
+
+                        public void linkActivated(HyperlinkEvent e)
+                        {
+                            if (hAction != null)
+                            {
+                                hAction.run();
+                            }
+                        }
+                    });
+
+                }
+                else
+                {
+                    // occupy the position
+                    _toolkit.createLabel(parent, "");
+                }
+
+                FormText txt = _toolkit.createFormText(parent, false);
+                txt.setText(text == null ? "" : text, false, false);
+            }
+        }
+    }
+
+    private IConfigurationElement getExtension()
+    {
+        if (_pageExtensionId == null || _pageExtensionId.trim().length() == 0)
+        {
+            return null;
+        }
+
+        // Can not fail editor due to introduction page's error
+        IExtension extension = Platform.getExtensionRegistry().getExtension(SOEUIPagePlugin.PLUGIN_ID,
+                IntroConstants.EXTENSION_POINT_NAME_INTRO_PAGE, _pageExtensionId);
+        if (extension == null)
+        {
+            return null;
+        }
+        IConfigurationElement[] elements = extension.getConfigurationElements();
+
+        // There should not be more than one page
+        return elements[0];
+    }
+
+    private Image readImage(Bundle bundle, String iconLoc)
+    {
+        if (bundle == null || iconLoc == null || bundle.getEntry(iconLoc) == null)
+        {
+            return null;
+        }
+        try
+        {
+            ImageDescriptor desp = ImageDescriptor.createFromURL(bundle.getEntry(iconLoc));
+            return desp.createImage();
+        }
+        catch (Exception ex)
+        {
+            _log.error("IntroductionSection_error_read_image", ex);
+            return null;
+        }
+    }
+
+    public String getContextHelpId()
+    {
+        return _helpContextId;
+    }
+
+    public String getPageName()
+    {
+        return _pageName;
+    }
+
+    public void setPage(ISchemaObjectEditorPage _page)
+    {
+        this._page = _page;
+    }
+
+    public void dispose()
+    {
+        super.dispose();
+        Iterator iter = _images.iterator();
+        while (iter.hasNext())
+        {
+            Image i = (Image) iter.next();
+            i.dispose();
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/Messages.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/Messages.java
new file mode 100644
index 0000000..1cae4b8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/Messages.java
@@ -0,0 +1,53 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String         BUNDLE_NAME     = Messages.class.getPackage().getName() + ".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 + '!';
+        }
+    }
+
+    public static String IntroductionPage_page_title;
+    public static String IntroductionPage_section_title;
+    public static String start;
+    public static String start_desc;
+    public static String cheatsheet;
+    public static String cheatsheet_desc;
+    public static String help;
+    public static String help_desc;
+    public static String default_heading;
+    public static String properites_loading_exception;
+
+    static
+    {
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/PredefinedIntroSection.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/PredefinedIntroSection.java
new file mode 100644
index 0000000..1e40699
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/PredefinedIntroSection.java
@@ -0,0 +1,132 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import java.util.HashMap;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.utils.Images;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ * 
+ * @author Hui Cao
+ * 
+ */
+public class PredefinedIntroSection
+{
+    private String            id              = null;
+    private String            heading         = null;
+    private String            hyperlink       = null;
+    private IIntroHyperAction hyperlinkAction = null;
+    private String            text            = null;
+    private ImageDescriptor   icon            = null;
+
+    public PredefinedIntroSection(String id, String heading, String hyperlink, String text, ImageDescriptor icon,
+            IIntroHyperAction hyperlinkAction)
+    {
+        super();
+        this.id = id;
+        this.heading = heading;
+        this.hyperlink = hyperlink;
+        this.text = text;
+        this.icon = icon;
+        this.hyperlinkAction = hyperlinkAction;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getHeading()
+    {
+        return heading;
+    }
+
+    public void setHeading(String heading)
+    {
+        this.heading = heading;
+    }
+
+    public String getHyperlink()
+    {
+        return hyperlink;
+    }
+
+    public void setHyperlink(String hyperlink)
+    {
+        this.hyperlink = hyperlink;
+    }
+
+    public String getText()
+    {
+        return text;
+    }
+
+    public void setText(String text)
+    {
+        this.text = text;
+    }
+
+    public ImageDescriptor getIcon()
+    {
+        return icon;
+    }
+
+    public void setIcon(ImageDescriptor icon)
+    {
+        this.icon = icon;
+    }
+
+    public IIntroHyperAction getHyperlinkAction()
+    {
+        if (id.equals(IntroConstants.START_ELEMENT_ID))
+        {
+            hyperlinkAction = new StartEditAction();
+        }
+        else if (id.equals(IntroConstants.HELP_ELEMENT_ID))
+        {
+            hyperlinkAction = new DisplayHelpAction();
+        }
+        return hyperlinkAction;
+    }
+
+    public void setHyperlinkAction(IIntroHyperAction hyperlinkAction)
+    {
+        this.hyperlinkAction = hyperlinkAction;
+    }
+
+    public static final PredefinedIntroSection DESCRIPTION = new PredefinedIntroSection(
+                                                                   IntroConstants.DESCRIPTION_ELEMENT_ID,
+                                                                   Messages.default_heading, null, null,
+                                                                   Images.DESC_MAIN, null);
+
+    public static final PredefinedIntroSection START       = new PredefinedIntroSection(
+                                                                   IntroConstants.START_ELEMENT_ID, null,
+                                                                   Messages.start, Messages.start_desc,
+                                                                   Images.DESC_START, new StartEditAction());
+
+    public static final PredefinedIntroSection HELP        = new PredefinedIntroSection(IntroConstants.HELP_ELEMENT_ID,
+                                                                   null, Messages.help, Messages.help_desc,
+                                                                   Images.DESC_HELP, new DisplayHelpAction());
+
+    public static HashMap                      SECTIONS    = new HashMap();
+
+    static
+    {
+        SECTIONS.put(IntroConstants.DESCRIPTION_ELEMENT_ID, DESCRIPTION);
+        SECTIONS.put(IntroConstants.START_ELEMENT_ID, START);
+        SECTIONS.put(IntroConstants.HELP_ELEMENT_ID, HELP);
+    }
+
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/StartEditAction.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/StartEditAction.java
new file mode 100644
index 0000000..c55e70a
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/StartEditAction.java
@@ -0,0 +1,41 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.intropage;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core.SchemaObjectEditor;
+
+/**
+ * 
+ * @author Hui Cao
+ * 
+ */
+public class StartEditAction extends IntroHyperAction implements IIntroHyperAction
+{
+    public StartEditAction()
+    {
+
+    }
+
+    public void run()
+    {
+        if (_introPage != null && _introPage.getEditor() != null)
+        {
+            SchemaObjectEditor editor = (SchemaObjectEditor) _introPage.getEditor();
+            int currentInd = editor.getCurrentPageIndex();
+            if (currentInd == 0)
+            {
+                editor.setActivePage(1);
+            }
+            else
+            {
+                editor.setActivePage(0);
+            }
+        }
+        super.run();
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/messages.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/messages.properties
new file mode 100644
index 0000000..1d70e58
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/intropage/messages.properties
@@ -0,0 +1,12 @@
+IntroductionPage_page_title=Introduction Page
+IntroductionPage_section_title=Introduction
+
+start=Start
+start_desc=Start to use...
+cheatsheet=Cheat sheet
+cheatsheet_desc=Launch the cheat sheet
+help=Help
+help_desc=Start the help system
+default_heading=This editor allows you to edit the SQL object's definition
+
+properites_loading_exception=Initial properties error
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Images.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Images.java
new file mode 100644
index 0000000..f2b678e
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Images.java
@@ -0,0 +1,117 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.utils;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.SOEUIPagePlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Utility class to load images
+ * 
+ * @author Idull
+ */
+public class Images
+{
+    private static final String         NAME_PREFIX        = "org.eclipse.datatools.sqltools.schemaobjecteditor.pages";
+    private static final int            NAME_PREFIX_LENGTH = NAME_PREFIX.length();
+    private static URL                  _baseURL           = null;
+    // The plugin image registry
+    private static ImageRegistry        fgImageRegistry    = null;
+    private static HashMap              fgAvoidSWTErrorMap = new HashMap();
+    static
+    {
+        String pathSuffix = "icons/";
+        _baseURL = SOEUIPagePlugin.getDefault().getBundle().getEntry(pathSuffix);
+    }
+
+    // Save as wizard
+    public static final String          IMG_SAVEAS         = NAME_PREFIX + "saveas_wiz.png";
+    public static final ImageDescriptor DESC_SAVEAS        = createManaged(IMG_SAVEAS);
+
+    // Save as icon
+    public static final String          IMG_SAVEAS_ACTION  = NAME_PREFIX + "saveas_edit.gif";
+    public static final ImageDescriptor DESC_SAVEAS_ACTION = createManaged(IMG_SAVEAS_ACTION);
+
+    // main icon
+    public static final String          IMG_MAIN           = NAME_PREFIX + "main.gif";
+    public static final ImageDescriptor DESC_MAIN          = createManaged(IMG_MAIN);
+
+    // start icon
+    public static final String          IMG_START          = NAME_PREFIX + "start.gif";
+    public static final ImageDescriptor DESC_START         = createManaged(IMG_START);
+
+    // cheatsheet icon
+    public static final String          IMG_CHEATSHEET     = NAME_PREFIX + "cheatSheet.gif";
+    public static final ImageDescriptor DESC_CHEATSHEET    = createManaged(IMG_CHEATSHEET);
+
+    // help icon
+    public static final String          IMG_HELP           = NAME_PREFIX + "help.gif";
+    public static final ImageDescriptor DESC_HELP          = createManaged(IMG_HELP);
+
+    /**
+     * Returns the image managed under the given key in this registry.
+     * 
+     * @param key the image's key
+     * @return the image managed under the given key
+     */
+    public static Image get(String key)
+    {
+        return getImageRegistry().get(key);
+    }
+
+    /**
+     * Helper method to convert HashMap to ImageRegistry
+     * 
+     * @return the image registry
+     */
+    static ImageRegistry getImageRegistry()
+    {
+        if (fgImageRegistry == null)
+        {
+            fgImageRegistry = new ImageRegistry();
+            for (Iterator iter = fgAvoidSWTErrorMap.keySet().iterator(); iter.hasNext();)
+            {
+                String key = (String) iter.next();
+                fgImageRegistry.put(key, (ImageDescriptor) fgAvoidSWTErrorMap.get(key));
+            }
+            fgAvoidSWTErrorMap = null;
+        }
+        return fgImageRegistry;
+    }
+
+    private static ImageDescriptor createManaged(String name)
+    {
+        try
+        {
+            ImageDescriptor result = ImageDescriptor.createFromURL(makeIconFileURL(name.substring(NAME_PREFIX_LENGTH)));
+            fgAvoidSWTErrorMap.put(name, result);
+            return result;
+        }
+        catch (MalformedURLException e)
+        {
+            return ImageDescriptor.getMissingImageDescriptor();
+        }
+
+    }
+
+    private static URL makeIconFileURL(String name) throws MalformedURLException
+    {
+        if (_baseURL == null)
+            throw new MalformedURLException();
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(name);
+        return new URL(_baseURL, buffer.toString());
+    }
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Messages.java b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Messages.java
new file mode 100644
index 0000000..00120ef
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/Messages.java
@@ -0,0 +1,22 @@
+/***********************************************************************************************************************
+ * 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: Sybase, Inc. - initial API and implementation
+ **********************************************************************************************************************/
+package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages.utils;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+    private static final String BUNDLE_NAME = Messages.class.getPackage().getName() + ".messages";
+    static
+    {
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+
+    public static String        StatusLogger_no_bundle;
+    public static String        StatusLogger_possible_args;
+}
diff --git a/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/messages.properties b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/messages.properties
new file mode 100644
index 0000000..cc1cce6
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.schemaobjecteditor.ui.pages/src/org/eclipse/datatools/sqltools/schemaobjecteditor/ui/pages/utils/messages.properties
@@ -0,0 +1,2 @@
+StatusLogger_no_bundle=No resource bundle has been set for the Logger
+StatusLogger_possible_args=\ possible args: {0}, {1}, {2}, {3}
\ No newline at end of file
