[242160]  Need support for new filter types and fix predicate storage
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java
index 947bec2..6981424 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/filter/ConnectionFilterPropertyPage.java
@@ -14,7 +14,6 @@
 import org.eclipse.datatools.connectivity.IConnectionProfile;
 import org.eclipse.datatools.connectivity.sqm.core.internal.ui.explorer.helpers.FilterHelper;
 import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.ResourceLoader;
-import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
 import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
 import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilterImpl;
 import org.eclipse.jface.viewers.ISelection;
@@ -58,6 +57,8 @@
 	
 	private boolean isMultiplePredicatesMode = false;
 	
+	private ConnectionFilter connFilter;
+	
 	public ConnectionFilterPropertyPage() {
 		super();
 		setTitle(getDefaultPageTitle());
@@ -101,7 +102,7 @@
 			filterComposite.initializeValues();
 		}
 		else {
-			ConnectionFilter connFilter = getConnectionFilter();
+			connFilter = getConnectionFilter();
 			
 			if(connFilter == null)
 				connFilter = new ConnectionFilterImpl();
@@ -182,6 +183,7 @@
 	protected abstract String getConnectionFilterType();
 	
 	public boolean performOk() {
+		
 		String filterType = getConnectionFilterType();
 		if (filterType != null) {
 					
@@ -197,7 +199,7 @@
 			}
 			setConnectionFilter(predicate);
 		}			
-
+		
 		return true;
 	}
 	
@@ -240,6 +242,24 @@
         setValid(true);
     }    
     
+    protected void performApply(){
+		String filterType = getConnectionFilterType();
+		if (filterType != null) {
+					
+			String predicate = null;
+			
+			if(!isMultiplePredicatesMode)
+			{
+				predicate = getPredicate();
+			}
+			else
+			{
+				predicate = getPredicates();
+			}
+			connFilter.setPredicate(predicate);
+		}
+    }
+    
     public void setDefaultPageTitle ( String title ) {
     	defaultTitleText = title;
     }
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java
index e018f4b..d66d9c1 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/helpers/FilterHelper.java
@@ -20,8 +20,10 @@
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.datatools.connectivity.IConnectionProfile;
 import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
 import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.virtual.IVirtualNode;
+import org.eclipse.ui.internal.dialogs.AdaptableForwarder;
 
 public class FilterHelper
 {
@@ -52,16 +54,33 @@
 					Boolean temp = new Boolean(configElements[j].getAttribute("supportsMultiplePredicates")); //$NON-NLS-1$
 					boolean supportsMultiplePredicates = temp.booleanValue();
 					
-					if(supportsMultiplePredicates)
-						dbCollection.put(vendor + " " + version, objectType);
+					if(supportsMultiplePredicates){
+						
+						if(dbCollection.containsKey(vendor + " " + version)){
+							Object obj = dbCollection.get(vendor + " " + version);
+							Vector type = (Vector)obj;
+							
+							for(int m = 0; m < objectType.size(); m++)
+								type.add(objectType.get(m));
+							
+							dbCollection.put(vendor + " " + version, type);
+						}
+						else
+							dbCollection.put(vendor + " " + version, objectType);
+					}
 				}
 			}
 		}
     }
 
     public boolean supportsMultiplePredicatesMode(IAdaptable element){
-    	if (element instanceof IVirtualNode) {
-			IVirtualNode virtualNode = (IVirtualNode) element;
+    	
+		IVirtualNode virtualNodeAdapter = (IVirtualNode) element
+				.getAdapter(IVirtualNode.class);
+		
+    	if (virtualNodeAdapter != null) {
+    		
+			IVirtualNode virtualNode = (IVirtualNode) virtualNodeAdapter;
 			ConnectionInfo connectionInfo = virtualNode.getParentConnection();
 			String vendor = connectionInfo.getDatabaseDefinition().getProduct();
 			String version = connectionInfo.getDatabaseDefinition()
@@ -77,6 +96,7 @@
 						return true;
 				}
 			}
+
 		}
 		return false;
     }
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java
index 19f1cac..00d403c 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/StoredProcedureNode.java
@@ -37,6 +37,6 @@
     }
 
     public String getFilterName() {
-    	return getFilterName(ConnectionFilter.STORED_PROCEDURE_FILTER);
+    	return ((Schema)getParent()).getName() + IFilterNode.SEPARATOR + ConnectionFilter.STORED_PROCEDURE_FILTER;
 	}
 }
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java
index 4505e81..993b8a8 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/explorer/providers/content/virtual/UDFNode.java
@@ -15,6 +15,7 @@
 import org.eclipse.datatools.connectivity.sqm.core.ui.explorer.providers.content.virtual.VirtualNode;
 import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionFilter;
 import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
+import org.eclipse.datatools.modelbase.sql.schema.Schema;
 
 /**
  * @author ljulien
@@ -37,6 +38,6 @@
     }
 
     public String getFilterName() {
-		return getFilterName(ConnectionFilter.STORED_PROCEDURE_FILTER);
+		return ((Schema)getParent()).getName() + IFilterNode.SEPARATOR + ConnectionFilter.USER_DEFINED_FUNCTION_FILTER;
 	}
 }
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java
index f40a1bc..c22153f 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/core/connection/ConnectionFilter.java
@@ -103,5 +103,7 @@
 	public static final String DISCOVERED_SERVER_FILTER = "DatatoolsDiscoveredServerFilterPredicate"; //$NON-NLS-1$
 	public static final String XSR_OBJECTS_FILTER = "DatatoolsXMLSchemasFilterPredicate"; //$NON-NLS-1$
 	public static final String XML_SCHEMA_DOC_FILTER = "DatatoolsXMLSchemaDocsFilterPredicate"; //$NON-NLS-1$
-
+	public static final String REMOTE_STORED_PROCEDURE_FILTER = "DatatoolsRemoteStoredProcedureFilterPredicate"; //$NON-NLS-1$
+	public static final String TABLESPACE_FILTER = "DatatoolsTablespaceFilterPredicate"; //$NON-NLS-1$
+	public static final String DATABASE_FILTER = "DatatoolsDatabaseFilterPredicate"; //$NON-NLS-1$
 }