refactor IDBFactory to SQLDevToolsConfiguration, integrate SQL model
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.sqltools.routineeditor/META-INF/MANIFEST.MF
index beac71d..dc6101f 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: DTP SQL Tools Routine Editor Plug-in
 Bundle-SymbolicName: org.eclipse.datatools.sqltools.routineeditor;singleton:=true
-Bundle-Version: 0.7.0.200602241
+Bundle-Version: 0.7.0.200602242
 Bundle-Activator: org.eclipse.datatools.sqltools.routineeditor.internal.RoutineEditorActivator
 Bundle-Vendor: Eclipse.org
 Bundle-Localization: plugin
@@ -18,10 +18,13 @@
  org.eclipse.core.resources,
  org.eclipse.debug.core,
  org.eclipse.debug.ui,
- org.eclipse.datatools.sqltools.common.ui
+ org.eclipse.datatools.sqltools.common.ui,
+ org.eclipse.ui.ide
 Eclipse-AutoStart: true
 Eclipse-AutoStop: true
 Export-Package: org.eclipse.datatools.sqltools.routineeditor,
  org.eclipse.datatools.sqltools.routineeditor.launching;x-friends:="org.eclipse.datatools.sqltools.debugger.core",
- org.eclipse.datatools.sqltools.routineeditor.result
+ org.eclipse.datatools.sqltools.routineeditor.result,
+ org.eclipse.datatools.sqltools.routineeditor.ui.launching;x-internal:=true,
+ org.eclipse.datatools.sqltools.routineeditor.util;x-internal:=true
 Bundle-ClassPath: routineeditor.jar
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/build.properties b/plugins/org.eclipse.datatools.sqltools.routineeditor/build.properties
index 452e0e1..a04ccee 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/build.properties
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/build.properties
@@ -8,7 +8,7 @@
                schema/
 jars.extra.classpath =
 src.dir =		src/
-plugin.version =	0.7.0.200602241
+plugin.version =	0.7.0.200602242
 javadoc.dir =		doc/api/
 download.dir =		./download/
 javac.source =		1.4
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.properties b/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.properties
new file mode 100644
index 0000000..dd76d9b
--- /dev/null
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.properties
@@ -0,0 +1,3 @@
+Routineeditor.edit= &Edit...
+
+Routineeditor.name=Routine Editor
\ No newline at end of file
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.xml b/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.xml
index 7636c76..5b01ba2 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.xml
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/plugin.xml
@@ -74,4 +74,60 @@
           
    </extension>
 
+   <extension
+         point="org.eclipse.ui.popupMenus">
+         <objectContribution 
+             id="org.eclipse.datatools.sqltools.routineeditor.objectContribution1"
+            objectClass="org.eclipse.datatools.modelbase.sql.tables.Trigger">
+	         <action
+	               label="%Routineeditor.edit"
+	               class="org.eclipse.datatools.sqltools.routineeditor.ui.actions.EditRoutineAction"
+	               menubarPath="slot1"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.sqltools.routineeditor.ui.actions.EditRoutineAction">
+	               <enablement>
+	               <or>
+				      	<objectClass name = "org.eclipse.datatools.modelbase.sql.tables.Trigger"/>
+			       </or>
+	            </enablement>
+	         </action>
+	         <visibility>
+			    	<or>
+				      	<objectClass name = "org.eclipse.datatools.modelbase.sql.tables.Trigger"/>
+			      	</or>
+	         </visibility>
+		 </objectContribution>
+         <objectContribution 
+             id="org.eclipse.datatools.sqltools.routineeditor.objectContribution2"
+            objectClass="org.eclipse.datatools.modelbase.sql.routines.Routine">
+	         <action
+	               label="%Routineeditor.edit"
+	               class="org.eclipse.datatools.sqltools.routineeditor.ui.actions.EditRoutineAction"
+	               menubarPath="slot1"
+	               enablesFor="1"
+	               id="org.eclipse.datatools.sqltools.routineeditor.ui.actions.EditRoutineAction">
+	               <enablement>
+	               <or>
+				      	<objectClass name = "org.eclipse.datatools.modelbase.sql.routines.Routine"/>
+			       </or>
+	            </enablement>
+	         </action>
+	         <visibility>
+			    	<or>
+				      	<objectClass name = "org.eclipse.datatools.modelbase.sql.routines.Routine"/>
+			      	</or>
+	         </visibility>
+		 </objectContribution>
+   </extension>
+   
+      <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            class="org.eclipse.datatools.sqltools.routineeditor.internal.RoutineEditor"
+            contributorClass="org.eclipse.datatools.sqltools.sqleditor.internal.SQLEditorActionContributor"
+            default="true"
+            icon="images/qrydoc.gif"
+            id="org.eclipse.datatools.sqltools.routineeditor.internal.RoutineEditor"
+            name="%RoutineEditor.name"/>
+   </extension>
 </plugin>
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/launching/LaunchHelper.java b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/launching/LaunchHelper.java
index 4ea0d86..64700f1 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/launching/LaunchHelper.java
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/launching/LaunchHelper.java
@@ -22,12 +22,12 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
-import org.eclipse.datatools.sqltools.core.IDBFactory;
-import org.eclipse.datatools.sqltools.core.IDatabaseConfiguration;
+import org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration;
+import org.eclipse.datatools.sqltools.core.IDatabaseSetting;
 import org.eclipse.datatools.sqltools.core.ProcIdentifier;
 import org.eclipse.datatools.sqltools.core.ProcIdentifierImpl;
 import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
-import org.eclipse.datatools.sqltools.core.IDatabaseConfiguration.NotSupportedConfigurationException;
+import org.eclipse.datatools.sqltools.core.IDatabaseSetting.NotSupportedSettingException;
 import org.eclipse.datatools.sqltools.core.dbitem.ParameterDescriptor;
 import org.eclipse.datatools.sqltools.core.profile.NoSuchProfileException;
 import org.eclipse.datatools.sqltools.routineeditor.internal.RoutineEditorActivator;
@@ -402,21 +402,21 @@
      * @param configuration
      * @param proc
      */
-    private static boolean readQuotedIDConfig(ILaunchConfiguration configuration, ProcIdentifier proc)
+    public static boolean readQuotedIDConfig(ILaunchConfiguration configuration, ProcIdentifier proc)
     {
-        boolean quoted_id = true;
-        IDBFactory factory = SQLToolsFacade.getDBFactory(proc.getDatabaseIdentifier(), null);
-        IDatabaseConfiguration config = factory.getDatabaseConfiguration(proc.getDatabaseIdentifier());
+        boolean quoted_id = false;
+        SQLDevToolsConfiguration factory = SQLToolsFacade.getConfiguration(proc.getDatabaseIdentifier(), null);
+        IDatabaseSetting config = factory.getDatabaseSetting(proc.getDatabaseIdentifier());
         if (config != null)
         {
             try
             {
-                Boolean value = (Boolean)config.getLaunchConfigProperty(configuration, IDatabaseConfiguration.C_QUOTED_IDENTIFIER);
+                Boolean value = (Boolean)config.getLaunchConfigProperty(configuration, IDatabaseSetting.C_QUOTED_IDENTIFIER);
                 quoted_id = value.booleanValue();
             }
-            catch (NotSupportedConfigurationException e)
+            catch (NotSupportedSettingException e)
             {
-                RoutineEditorActivator.getDefault().log(Messages.getString("NotSupportedConfigurationException.cause", IDatabaseConfiguration.C_QUOTED_IDENTIFIER));
+                RoutineEditorActivator.getDefault().log(Messages.getString("NotSupportedSettingException.cause", IDatabaseSetting.C_QUOTED_IDENTIFIER));
             }
         }
         return quoted_id;
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/result/CallableSQLResultRunnable.java b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/result/CallableSQLResultRunnable.java
index 20ad6c2..a38f17e 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/result/CallableSQLResultRunnable.java
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/result/CallableSQLResultRunnable.java
@@ -13,20 +13,21 @@
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
-import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.sqltools.core.DBHelper;
 import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
-import org.eclipse.datatools.sqltools.core.IDBHelper;
 import org.eclipse.datatools.sqltools.core.ISqlDataValidator;
 import org.eclipse.datatools.sqltools.core.ProcIdentifier;
 import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
 import org.eclipse.datatools.sqltools.core.dbitem.ParameterDescriptor;
 import org.eclipse.datatools.sqltools.core.profile.NoSuchProfileException;
+import org.eclipse.datatools.sqltools.core.profile.ProfileUtil;
 import org.eclipse.datatools.sqltools.editor.core.connection.IConnectionTracker;
 import org.eclipse.datatools.sqltools.result.OperationCommand;
 import org.eclipse.datatools.sqltools.result.Parameter;
@@ -48,15 +49,15 @@
 public class CallableSQLResultRunnable extends ResultSupportRunnable
 {
 
-    Connection              _connection;
-    String                  _sql;
-    String                  _detailSql;
-    boolean                 _closeCon;
-    IConnectionTracker      _tracker;
-    ILaunchConfiguration    _configuration;
-    ParameterInOutWrapper[] _pws;
-    String                  _procName;
-	private OperationCommand operationCommand;
+    protected Connection              _connection;
+    protected String                  _sql;
+    protected String                  _detailSql;
+    protected boolean                 _closeCon;
+    protected IConnectionTracker      _tracker;
+    protected ILaunchConfiguration    _configuration;
+    protected ParameterInOutWrapper[] _pws;
+    protected String                  _procName;
+    protected OperationCommand _operationCommand;
 
     /**
      * 
@@ -95,11 +96,11 @@
      */
     protected OperationCommand getOperationCommand()
     {
-    	if (operationCommand == null)
+    	if (_operationCommand == null)
     	{
-    		operationCommand = new OperationCommand(OperationCommand.ACTION_EXECUTE, _detailSql, "Routine Editor", _databaseIdentifier.getProfileName(), _databaseIdentifier.getDBname());
+    		_operationCommand = new OperationCommand(OperationCommand.ACTION_EXECUTE, _detailSql, "Routine Editor", _databaseIdentifier.getProfileName(), _databaseIdentifier.getDBname());
     	}
-		return operationCommand;
+		return _operationCommand;
     }
 
     /**
@@ -121,14 +122,11 @@
             int sqlType = pws[i].getParameterDescriptor().getSqlDataType();
             int paramType = pws[i].getParameterDescriptor().getParmType();
             String name = pws[i].getParameterDescriptor().getName();
-            if (paramType == DatabaseMetaData.procedureColumnIn)
+            if (paramType == ParameterMode.IN)
             {
                 j++;
             }
-            else if (paramType == DatabaseMetaData.procedureColumnUnknown //FIXME treat UNKNOWN type as OUT type
-            || paramType == DatabaseMetaData.procedureColumnReturn
-                || paramType == DatabaseMetaData.procedureColumnOut
-                || paramType == DatabaseMetaData.procedureColumnInOut)
+            else if (paramType == ParameterMode.OUT || paramType == ParameterMode.INOUT)
             {
 
                 if (name.equals(_procName))
@@ -191,14 +189,11 @@
             int paramType = pws[i].getParameterDescriptor().getParmType();
             String paramTypeName = pws[i].getParameterDescriptor().getParamTypeAsString();
             String name = pws[i].getParameterDescriptor().getName();
-            if (paramType == DatabaseMetaData.procedureColumnIn)
+            if (paramType == ParameterMode.IN)
             {
                 j++;
             }
-            else if (paramType == DatabaseMetaData.procedureColumnUnknown //FIXME treat UNKNOWN type as OUT type
-            || paramType == DatabaseMetaData.procedureColumnReturn
-                || paramType == DatabaseMetaData.procedureColumnOut
-                || paramType == DatabaseMetaData.procedureColumnInOut)
+            else if (paramType == ParameterMode.OUT || paramType == ParameterMode.INOUT)
             {
                 if (name.equals(_procName))
                 {
@@ -235,7 +230,7 @@
         {
         	RoutineEditorActivator.getDefault().log(e);
         }
-        IDBHelper helper = SQLToolsFacade.getDBFactory(getDatabaseIdentifier(), null).getDBHelper();
+        DBHelper helper = SQLToolsFacade.getConfiguration(getDatabaseIdentifier(), null).getDBHelper();
         for (int i = 0; i < pws.length; i++)
         {
             int sqlType = pws[i].getParameterDescriptor().getSqlDataType();
@@ -247,12 +242,12 @@
             String paramTypeName = pws[i].getParameterDescriptor().getParamTypeAsString();
             String name = pws[i].getParameterDescriptor().getName();
 
-            if (paramType == DatabaseMetaData.procedureColumnOut || paramType == DatabaseMetaData.procedureColumnReturn)
+            if (paramType == ParameterMode.OUT)
             {
                 j++;
             }
-            else if (paramType == DatabaseMetaData.procedureColumnIn
-            || paramType == DatabaseMetaData.procedureColumnInOut)
+            else if (paramType == ParameterMode.IN
+            || paramType == ParameterMode.INOUT)
             {
                 j++;
                 String value = null;
@@ -271,7 +266,7 @@
                     Object v = null;
                     try 
                     {
-                        ISqlDataValidator validator = SQLToolsFacade.getDBFactory(getDatabaseIdentifier(), null).getSQLDataService().getSQLDataValidator(getDatabaseIdentifier());
+                        ISqlDataValidator validator = SQLToolsFacade.getConfiguration(getDatabaseIdentifier(), null).getSQLDataService().getSQLDataValidator(getDatabaseIdentifier());
                         v = validator.convert(pws[i].getParameterDescriptor().getTypeName(), value, getDatabaseIdentifier());
                     }
                     catch (Exception e1) 
@@ -353,7 +348,7 @@
         {
         	resultsViewAPI.showParameters(getOperationCommand(), convert(_pws));
         }
-        return true;
+        return super.handleSuccess(moreResult);
     }
     
     /**
@@ -392,7 +387,7 @@
             {
                 if (_closeCon)
                 {
-                    connection.close();
+                    ProfileUtil.closeConnection(this._databaseIdentifier.getProfileName(), this._databaseIdentifier.getDBname(), connection);
                 }
             }
         }
diff --git a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/util/RoutineUtil.java b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/util/RoutineUtil.java
index 7a99e49..f9944ef 100644
--- a/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/util/RoutineUtil.java
+++ b/plugins/org.eclipse.datatools.sqltools.routineeditor/src/org/eclipse/datatools/sqltools/routineeditor/util/RoutineUtil.java
@@ -11,12 +11,14 @@
  *******************************************************************************/
 package org.eclipse.datatools.sqltools.routineeditor.util;
 
-import java.sql.DatabaseMetaData;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
 import org.eclipse.datatools.sqltools.core.ProcIdentifier;
+import org.eclipse.datatools.sqltools.core.SQLDevToolsConfiguration;
+import org.eclipse.datatools.sqltools.core.SQLToolsFacade;
 import org.eclipse.datatools.sqltools.core.dbitem.ParameterDescriptor;
 import org.eclipse.datatools.sqltools.sql.util.SQLUtil;
 
@@ -29,27 +31,6 @@
     /**
      * @return "exec ", "call ", "TRIGGER EVENT " or "" based on type
      */
-    public static String getCallablePrefix(int type)
-    {
-        String prefix = "";
-        switch (type)
-        {
-            case ProcIdentifier.TYPE_SP:
-                prefix = "exec ";
-                break;
-            case ProcIdentifier.TYPE_UDF:
-                prefix = "select ";
-                break;
-            case ProcIdentifier.TYPE_EVENT:
-                prefix = "TRIGGER EVENT ";
-                break;
-        }
-        return prefix;
-    }
-
-    /**
-     * @return "exec ", "call ", "TRIGGER EVENT " or "" based on type
-     */
     public static String getCallableStatementPrefix(int type)
     {
         String prefix = "";
@@ -82,7 +63,8 @@
         StringBuffer buffer = new StringBuffer(20);
         buffer.append("{?=");
         int type = proc == null ? ProcIdentifier.TYPE_SP : proc.getType();
-        buffer.append(getCallableStatementPrefix(type));
+		SQLDevToolsConfiguration config = SQLToolsFacade.getConfigurationByProfileName(proc.getDatabaseIdentifier().getProfileName());
+        buffer.append(config.getExecutionService().getCallableStatementPrefix(proc.getType()));
         String procName = null;
 
         if (proc != null)
@@ -101,31 +83,29 @@
             {
                 String name = pds[i].getName();
 
-                if (pds[i].getParmType() == DatabaseMetaData.procedureColumnIn
-                || pds[i].getParmType() == DatabaseMetaData.procedureColumnInOut
-                    || pds[i].getParmType() == DatabaseMetaData.procedureColumnOut
-                    || pds[i].getParmType() == DatabaseMetaData.procedureColumnUnknown)
+                if (name.equals(procName))
                 {
-                    if (name.equals(procName))
-                    {
-                        continue;
-                    }
-                    if (j != 0)
-                    {
-                        buffer.append(",?"); //$NON-NLS-1$
-                    }
-                    else
-                    {
-                        buffer.append("?");
-                    }
-                    j++;
+                    continue;
                 }
+                if (j != 0)
+                {
+                    buffer.append(",?"); //$NON-NLS-1$
+                }
+                else
+                {
+                    buffer.append("?");
+                }
+                j++;
             }
             if (type == ProcIdentifier.TYPE_UDF || type == ProcIdentifier.TYPE_SP)
             {
                 buffer.append(")"); //$NON-NLS-1$
             }
         }
+        else
+        {
+        	buffer.append("()");
+        }
         buffer.append("}");
         return buffer.toString();
     }
@@ -142,7 +122,8 @@
     {
         StringBuffer buffer = new StringBuffer(20);
         int type = proc == null ? ProcIdentifier.TYPE_SP : proc.getType();
-        buffer.append(getCallableStatementPrefix(type));
+		SQLDevToolsConfiguration config = SQLToolsFacade.getConfigurationByProfileName(proc.getDatabaseIdentifier().getProfileName());
+        buffer.append(config.getExecutionService().getCallableStatementPrefix(proc.getType()));
         String LINESEPARATOR = System.getProperty("line.separator");
 
         String procName = null;
@@ -165,8 +146,8 @@
                 String name = pds[i].getName();
                 String prefix = "";
 
-                if (pds[i].getParmType() == DatabaseMetaData.procedureColumnIn
-                || pds[i].getParmType() == DatabaseMetaData.procedureColumnInOut)
+                if (pds[i].getParmType() == ParameterMode.IN
+                || pds[i].getParmType() == ParameterMode.INOUT)
                 {
                     String value =null;
                     if (values!=null && values.size()>=(k+1))
@@ -194,8 +175,7 @@
 
                     j++;
                 }
-                if (pds[i].getParmType() == DatabaseMetaData.procedureColumnOut
-                || pds[i].getParmType() == DatabaseMetaData.procedureColumnUnknown)
+                if (pds[i].getParmType() == ParameterMode.OUT)
                 {
                     if (name.equals(procName))
                     {
@@ -238,7 +218,8 @@
     {
         StringBuffer buffer = new StringBuffer(20);
         int type = proc == null ? ProcIdentifier.TYPE_SP : proc.getType();
-        buffer.append(getCallablePrefix(type));
+		SQLDevToolsConfiguration config = SQLToolsFacade.getConfigurationByProfileName(proc.getDatabaseIdentifier().getProfileName());
+        buffer.append(config.getExecutionService().getCallableStatementPrefix(proc.getType()));
 
         if (proc != null)
         buffer.append(proc.getCallableString(quoted_id));