Add support in discovery UI for search providers supporting no
destination categories.
This commit is very huge because of refactoring sets to lists in UI
components input
diff --git a/bundles/org.eclipse.platform.discovery.compatibility/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParser.java b/bundles/org.eclipse.platform.discovery.compatibility/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParser.java
index 83a935d..f11b016 100644
--- a/bundles/org.eclipse.platform.discovery.compatibility/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParser.java
+++ b/bundles/org.eclipse.platform.discovery.compatibility/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParser.java
@@ -10,8 +10,8 @@
  *******************************************************************************/

 package org.eclipse.platform.discovery.compatibility.internal.readers.impl;

 

-import java.util.HashSet;

-import java.util.Set;

+import java.util.ArrayList;

+import java.util.List;

 

 import org.eclipse.core.runtime.IConfigurationElement;

 import org.eclipse.core.runtime.IExtensionRegistry;

@@ -32,8 +32,8 @@
 	}

 	

 	@Override

-	public Set<ISearchPageDescription> readContributions() {

-		Set<ISearchPageDescription> result = new HashSet<ISearchPageDescription>();

+	public List<ISearchPageDescription> readContributions() {

+		final List<ISearchPageDescription> result = new ArrayList<ISearchPageDescription>();

 		for(IConfigurationElement element: getConfigurationElements()) {

 			//note that according to the javadoc of IConfigurationElement, the obtained attributes will be automatically translated

 			String label = element.getAttribute(LABEL);

diff --git a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/SearchConsoleController.java b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/SearchConsoleController.java
index d560e56..29f4a24 100644
--- a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/SearchConsoleController.java
+++ b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/SearchConsoleController.java
@@ -10,36 +10,37 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.core.internal;

 

-import java.util.HashMap;

-import java.util.HashSet;

-import java.util.Map;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.api.ISearchConsoleMasterController;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.core.api.SearchEvent;

-import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;

-import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;

-import org.eclipse.platform.discovery.core.internal.events.handlers.ISearchEventHandler;

-import org.eclipse.platform.discovery.core.internal.plugin.text.DiscoveryCoreMessages;

-import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.api.ISearchParameters;

-import org.eclipse.platform.discovery.runtime.api.ISearchProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchQuery;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.api.SearchCancelledException;

-import org.eclipse.platform.discovery.runtime.api.SearchFailedException;

-import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.impl.DescriptionsUtil;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDescriptionsUtil;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.platform.discovery.util.internal.session.ISessionManager;

+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.platform.discovery.core.api.ISearchConsoleMasterController;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.core.api.SearchEvent;
+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;
+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
+import org.eclipse.platform.discovery.core.internal.events.handlers.ISearchEventHandler;
+import org.eclipse.platform.discovery.core.internal.plugin.text.DiscoveryCoreMessages;
+import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.api.ISearchParameters;
+import org.eclipse.platform.discovery.runtime.api.ISearchProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchQuery;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.api.SearchCancelledException;
+import org.eclipse.platform.discovery.runtime.api.SearchFailedException;
+import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.impl.DescriptionsUtil;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDescriptionsUtil;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.platform.discovery.util.internal.session.ISessionManager;
 

 

 /**

@@ -79,7 +80,7 @@
 	public void objectTypeSelected(final IObjectTypeDescription selectedObject)

 	{

 		if(selectedObject == null) return;

-		final Set<IDestinationCategoryDescription> destinationCategories = searchProviderConfiguration.getAvailableDestinationCategoriesForObjectType(selectedObject);

+		final List<IDestinationCategoryDescription> destinationCategories = searchProviderConfiguration.getAvailableDestinationCategoriesForObjectType(selectedObject);

 		view.showDestinationsCategories(destinationCategories);

 	}

 	

@@ -123,9 +124,9 @@
 		}

 	}

 	

-	private Set<ISearchSubdestination> filterActiveSubdestinations(final Set<ISearchSubdestination> allSubdestinations, final IObjectTypeDescription objectType, final IDestinationCategoryDescription destCategory, ISearchProviderDescription searchProvider)

+	private List<ISearchSubdestination> filterActiveSubdestinations(final List<ISearchSubdestination> allSubdestinations, final IObjectTypeDescription objectType, final IDestinationCategoryDescription destCategory, ISearchProviderDescription searchProvider)

 	{

-		final Set<ISearchSubdestination> result = new HashSet<ISearchSubdestination>();

+		final List<ISearchSubdestination> result = new ArrayList<ISearchSubdestination>();

 		for(ISearchSubdestination subDest : allSubdestinations)

 		{

 			if(searchProviderConfiguration.isSubdestinationActive(subDest, objectType, destCategory, searchProvider))

@@ -145,19 +146,20 @@
 		}

 		else

 		{

-			view.showGroupingHierarchies(new HashSet<GroupingHierarchy>());

+			view.showGroupingHierarchies(new ArrayList<GroupingHierarchy>());

 		}

 	}

 	

-	private Set<GroupingHierarchy> determineGroupingHierarchy(final IObjectTypeDescription objectType, final ISearchDestination destination)

+	private List<GroupingHierarchy> determineGroupingHierarchy(final IObjectTypeDescription objectType, final ISearchDestination destination)

 	{

 		try

 		{

 			final ISearchProviderDescription searchProviderDescr = searchProviderConfiguration.getActiveSearchProvider(objectType, getDestinationCategory(destination));

 			final ISearchProvider providerInstance = searchProviderDescr.createInstance();

-			final Set<ISearchSubdestination> allSubdestintations = searchProviderConfiguration.getAvailableSearchSubdestinations(objectType, getDestinationCategory(destination), searchProviderDescr);

-			final Set<ISearchSubdestination> activeSubdestinations = filterActiveSubdestinations(allSubdestintations, objectType, getDestinationCategory(destination), searchProviderDescr);

-			return providerInstance.getGroupingHierarchies(destination, activeSubdestinations);

+			final List<ISearchSubdestination> allSubdestintations = searchProviderConfiguration.getAvailableSearchSubdestinations(objectType, getDestinationCategory(destination), searchProviderDescr);

+			final List<ISearchSubdestination> activeSubdestinations = filterActiveSubdestinations(allSubdestintations, objectType, getDestinationCategory(destination), searchProviderDescr);
+			
+			return new ArrayList<GroupingHierarchy>(providerInstance.getGroupingHierarchies(destination, new HashSet<ISearchSubdestination>(activeSubdestinations)));

 		}

 		catch(ProviderNotFoundException e)

 		{

@@ -174,7 +176,7 @@
 	{

 		public void handleSearch(final SearchEvent event) throws ProviderNotFoundException, SearchFailedException

 		{

-			final Set<IDestinationCategoryDescription> destCategories = destinationCategories(event.getSearchParameters().getSearchDestination());

+			final List<IDestinationCategoryDescription> destCategories = destinationCategories(event.getSearchParameters().getSearchDestination());

 			final IDestinationCategoryDescription category = destCategories.iterator().next(); 

 			final ISearchQuery searchQuery = createQuery(event.getSearchParameters());

 			final IObjectTypeDescription objectType = descriptionsUtil.objectTypeForId(event.getSearchParameters().getObjectTypeId());

@@ -241,9 +243,9 @@
 			return sc;

 		}

 		

-		private Set<IDestinationCategoryDescription> destinationCategories(final ISearchDestination destination)

+		private List<IDestinationCategoryDescription> destinationCategories(final ISearchDestination destination)

 		{

-			final Set<IDestinationCategoryDescription> destCategories;

+			final List<IDestinationCategoryDescription> destCategories;

 			try

 			{

 				destCategories = searchProviderConfiguration.getDestinationCategoriesForDestination(destination);

diff --git a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/console/ISearchConsoleControllerOutputView.java b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/console/ISearchConsoleControllerOutputView.java
index 54df6a3..f9a4aa6 100644
--- a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/console/ISearchConsoleControllerOutputView.java
+++ b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/console/ISearchConsoleControllerOutputView.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.core.internal.console;
 
-import java.util.Set;
+import java.util.List;
 
 import org.eclipse.platform.discovery.core.api.ISearchContext;
 import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;
@@ -29,7 +29,7 @@
 	 * @param objectTypes
 	 *            a set of object types to be shown by the view
 	 */
-	public void showObjectTypes(final Set<IObjectTypeDescription> objectTypes);
+	public void showObjectTypes(final List<IObjectTypeDescription> objectTypes);
 
 	/**
 	 * Show the destination categories specified
@@ -37,7 +37,7 @@
 	 * @param destinations
 	 *            a set of destinations to be displayed by the view
 	 */
-	public void showDestinationsCategories(final Set<IDestinationCategoryDescription> destinationCategories);
+	public void showDestinationsCategories(final List<IDestinationCategoryDescription> destinationCategories);
 
 	/**
 	 * Show the result of the search query
@@ -56,7 +56,7 @@
 	 * Shows the grouping hierarchies specified
 	 * @param groupingHierarchies a set of hierarchies. never null; 
 	 */
-	public void showGroupingHierarchies(final Set<GroupingHierarchy> groupingHierarchies);
+	public void showGroupingHierarchies(final List<GroupingHierarchy> groupingHierarchies);
 	
 	/**
 	 * Sets the string specified as status message
diff --git a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IStatefulItemsSelector.java b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IItemSelector.java
similarity index 74%
rename from bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IStatefulItemsSelector.java
rename to bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IItemSelector.java
index fe40499..4c0ab3d 100644
--- a/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IStatefulItemsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.core/src/org/eclipse/platform/discovery/core/internal/selectors/IItemSelector.java
@@ -10,9 +10,9 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.core.internal.selectors;

 

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.api.IEnablable;

+import java.util.List;
+
+import org.eclipse.platform.discovery.core.api.IEnablable;
 

 

 /**

@@ -23,30 +23,29 @@
  * @param <T> the type of elements which will be returned by the selector

  * @param <K> the type of the elements which will be set to its input

  */

-public interface IStatefulItemsSelector<T, K> extends IEnablable

+public interface IItemSelector<T, K> extends IEnablable

 {

 	/**

-	 * Retrieve a set of currently selected items

-	 * 

-	 * @return a set of currently selected items or an empty set if no items are selected

+	 * Retrieves the item currently selected or null if no item is selected

 	 */

-	public Set<T> getSelectedItems();

+	public T getSelectedItem();

 

 	/**

 	 * Sets the input set of items to be selected from. Input may change at any time

 	 * 

 	 * @param input

 	 */

-	public void setInput(Set<K> input);

+	public void setInput(List<K> input);

 	

 	/**

 	 * Handle selection change

-	 * @param newSelection a set of newly selected elements

+	 * @param newSelection the newly selected element or null if the selection is cleared

 	 */

-	public void handleSelectionChange(final Set<T> newSelection);

+	public void handleSelectionChange(final T newSelection);

 	

 	/**

 	 * Updates the selector

 	 */

 	public void update();

 }

+ 
\ No newline at end of file
diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/ViewCustXpParser.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/ViewCustXpParser.java
index 4dc705b..45b24f9 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/ViewCustXpParser.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/ViewCustXpParser.java
@@ -10,18 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal;

 

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.IExtensionRegistry;

-import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;

-import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.util.internal.logging.ILogger;

-import org.eclipse.platform.discovery.util.internal.logging.Logger;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;
+import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.util.internal.logging.ILogger;
+import org.eclipse.platform.discovery.util.internal.logging.Logger;
 

 

 /**

@@ -54,9 +53,9 @@
 

 	@SuppressWarnings("unchecked")

 	@Override

-	public Set<T> readContributions()

+	public List<T> readContributions()

 	{

-		final Set<T> result = new HashSet<T>();

+		final List<T> result = new ArrayList<T>();

 		final List<IConfigurationElement> configElements = genericXpParser().getConfigurationElements(extensionRegistry, xpId(), elementName());

 		for (IConfigurationElement configElem : configElements)

 		{

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
index faee216..a7e2e05 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPlugin.java
@@ -10,68 +10,69 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.plugin;

 

-import java.io.File;

-import java.io.IOException;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IProgressMonitor;

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

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

-import org.eclipse.core.runtime.jobs.ISchedulingRule;

-import org.eclipse.core.runtime.jobs.Job;

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

-import org.eclipse.platform.discovery.core.api.IContributedAction;

-import org.eclipse.platform.discovery.core.api.ISearchConsoleMasterController;

-import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;

-import org.eclipse.platform.discovery.core.api.ISearchFavoritesMasterController;

-import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;

-import org.eclipse.platform.discovery.core.api.ISlaveController;

-import org.eclipse.platform.discovery.core.internal.IDiscoveryView;

-import org.eclipse.platform.discovery.core.internal.ISearchConsoleView;

-import org.eclipse.platform.discovery.core.internal.ISearchSession;

-import org.eclipse.platform.discovery.core.internal.SearchConsoleController;

-import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;

-import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;

-import org.eclipse.platform.discovery.core.internal.favorites.IPersistenceUtil;

-import org.eclipse.platform.discovery.core.internal.favorites.ISearchFavoritesControllerOutputView;

-import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesContentManager;

-import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesController;

-import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil;

-import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil.IPersistenceContext;

-import org.eclipse.platform.discovery.integration.internal.slavecontrollers.SlaveControllersConfiguration;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.ViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.runtime.api.persistence.DestinationItemPair;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.SearchProviderConfigurationFactory;

-import org.eclipse.platform.discovery.runtime.internal.persistence.IMementoContentManager;

-import org.eclipse.platform.discovery.runtime.internal.persistence.MementoContentManagerException;

-import org.eclipse.platform.discovery.runtime.internal.persistence.util.IPersistenceProviderRegistry;

-import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;

-import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;

-import org.eclipse.platform.discovery.ui.api.IViewUiContext;

-import org.eclipse.platform.discovery.ui.api.impl.DefaultSessionIds;

-import org.eclipse.platform.discovery.ui.api.impl.ErrorHandler;

-import org.eclipse.platform.discovery.ui.internal.view.ICustomizableView;

-import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.platform.discovery.util.api.env.IErrorHandler;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

-import org.eclipse.platform.discovery.util.internal.logging.Logger;

-import org.eclipse.platform.discovery.util.internal.longop.ModalContextLongOpRunner;

-import org.eclipse.platform.discovery.util.internal.session.ISessionManager;

-import org.eclipse.platform.discovery.util.internal.session.SessionManager;

-import org.eclipse.swt.widgets.Display;

-import org.eclipse.ui.IPartListener2;

-import org.eclipse.ui.IPartService;

-import org.eclipse.ui.IStartup;

-import org.eclipse.ui.IViewReference;

-import org.eclipse.ui.IWorkbenchPart;

-import org.eclipse.ui.IWorkbenchPartReference;

-import org.eclipse.ui.PlatformUI;

-import org.eclipse.ui.WorkbenchException;

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

-import org.osgi.framework.BundleContext;

+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.platform.discovery.core.api.IContributedAction;
+import org.eclipse.platform.discovery.core.api.ISearchConsoleMasterController;
+import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;
+import org.eclipse.platform.discovery.core.api.ISearchFavoritesMasterController;
+import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;
+import org.eclipse.platform.discovery.core.api.ISlaveController;
+import org.eclipse.platform.discovery.core.internal.IDiscoveryView;
+import org.eclipse.platform.discovery.core.internal.ISearchConsoleView;
+import org.eclipse.platform.discovery.core.internal.ISearchSession;
+import org.eclipse.platform.discovery.core.internal.SearchConsoleController;
+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;
+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
+import org.eclipse.platform.discovery.core.internal.favorites.IPersistenceUtil;
+import org.eclipse.platform.discovery.core.internal.favorites.ISearchFavoritesControllerOutputView;
+import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesContentManager;
+import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesController;
+import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil;
+import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil.IPersistenceContext;
+import org.eclipse.platform.discovery.integration.internal.slavecontrollers.SlaveControllersConfiguration;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.ViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.runtime.api.persistence.DestinationItemPair;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.SearchProviderConfigurationFactory;
+import org.eclipse.platform.discovery.runtime.internal.persistence.IMementoContentManager;
+import org.eclipse.platform.discovery.runtime.internal.persistence.MementoContentManagerException;
+import org.eclipse.platform.discovery.runtime.internal.persistence.util.IPersistenceProviderRegistry;
+import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
+import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;
+import org.eclipse.platform.discovery.ui.api.IViewUiContext;
+import org.eclipse.platform.discovery.ui.api.impl.DefaultSessionIds;
+import org.eclipse.platform.discovery.ui.api.impl.ErrorHandler;
+import org.eclipse.platform.discovery.ui.internal.view.ICustomizableView;
+import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.platform.discovery.util.api.env.IErrorHandler;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
+import org.eclipse.platform.discovery.util.internal.logging.Logger;
+import org.eclipse.platform.discovery.util.internal.longop.ModalContextLongOpRunner;
+import org.eclipse.platform.discovery.util.internal.session.ISessionManager;
+import org.eclipse.platform.discovery.util.internal.session.SessionManager;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IPartService;
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
 

 

 /**

@@ -325,7 +326,7 @@
 			consoleView.setDefaultSessionId(DefaultSessionIds.mainSearchSessionId);

 			

 			consoleController = createSearchConsoleController(consoleView.getControllerView(), searchProviderConfiguration(), environment);

-			final Set<ISearchConsoleSlaveController> slaveControllers = slaveControllersConfig().availableSearchConsoleSlaveControllers();

+			final List<ISearchConsoleSlaveController> slaveControllers = slaveControllersConfig().availableSearchConsoleSlaveControllers();

 			configureSlaveControllers(consoleController, slaveControllers);

 			

 			final Set<IGenericViewCustomization> viewCust = new HashSet<IGenericViewCustomization>(viewCustomizationsConfig().availableSearchConsoleCustomizations()); 

@@ -375,7 +376,7 @@
 			final IMasterDiscoveryView masterView = getMasterViewFromPart(wbPart);

 			

 			

-			final Set<ISearchFavoritesSlaveController> slaveControllers = slaveControllersConfig().availableSearchFavoritesSlaveControllers();

+			final List<ISearchFavoritesSlaveController> slaveControllers = slaveControllersConfig().availableSearchFavoritesSlaveControllers();

 			final Set<IGenericViewCustomization> viewCust = new HashSet<IGenericViewCustomization>(viewCustomizationsConfig().availableSearchFavoritesCustomizations());

 			searchFavoritesController = createSearchFavoritesController(favoritesView.getControllerView(), env);

 			favoritesView.registerController(searchFavoritesController);

@@ -482,7 +483,7 @@
 		}

 	}

 

-	private void configureSlaveControllers(final ISearchConsoleMasterController masterController, final Set<ISearchConsoleSlaveController> slaveControllers)

+	private void configureSlaveControllers(final ISearchConsoleMasterController masterController, final List<ISearchConsoleSlaveController> slaveControllers)

 	{

 		for(ISearchConsoleSlaveController slave : slaveControllers)

 		{

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/ISlaveControllersConfiguration.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/ISlaveControllersConfiguration.java
index 7fe99b9..a6c2177 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/ISlaveControllersConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/ISlaveControllersConfiguration.java
@@ -10,11 +10,11 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.plugin;

 

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;

-import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;

-import org.eclipse.platform.discovery.integration.internal.ICustomizationConfig;

+import java.util.List;
+
+import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;
+import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;
+import org.eclipse.platform.discovery.integration.internal.ICustomizationConfig;
 

 

 public interface ISlaveControllersConfiguration extends ICustomizationConfig

@@ -22,10 +22,10 @@
 	/**

 	 * Retrieves a set of available search console "slave" controllers

 	 */

-	public Set<ISearchConsoleSlaveController> availableSearchConsoleSlaveControllers();

+	public List<ISearchConsoleSlaveController> availableSearchConsoleSlaveControllers();

 	

 	/**

 	 * Retrieves a set of available search favorites "slave" controllers

 	 */

-	public Set<ISearchFavoritesSlaveController> availableSearchFavoritesSlaveControllers();

+	public List<ISearchFavoritesSlaveController> availableSearchFavoritesSlaveControllers();

 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/IViewCustomizationConfiguration.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/IViewCustomizationConfiguration.java
index 5f1c3c8..492860e 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/IViewCustomizationConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/plugin/IViewCustomizationConfiguration.java
@@ -10,11 +10,12 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.plugin;

 

-import java.util.Set;

 

-import org.eclipse.platform.discovery.integration.internal.ICustomizationConfig;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;

+import java.util.List;
+
+import org.eclipse.platform.discovery.integration.internal.ICustomizationConfig;
+import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
 

 

 /**

@@ -26,10 +27,10 @@
 	/**

 	 * Retrieve a set of available search console view customizations or an empty set if none

 	 */

-	public Set<ISearchConsoleCustomization> availableSearchConsoleCustomizations();

+	public List<ISearchConsoleCustomization> availableSearchConsoleCustomizations();

 	

 	/**

 	 * Retrieve a set of available search favorites view customizations or an empty set if none

 	 */

-	public Set<ISearchFavoritesViewCustomization> availableSearchFavoritesCustomizations();

+	public List<ISearchFavoritesViewCustomization> availableSearchFavoritesCustomizations();

 }

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/slavecontrollers/SlaveControllersConfiguration.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/slavecontrollers/SlaveControllersConfiguration.java
index 29843ba..2585b65 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/slavecontrollers/SlaveControllersConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/slavecontrollers/SlaveControllersConfiguration.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.slavecontrollers;

 

-import java.util.Set;

+import java.util.List;
 

 import org.eclipse.core.runtime.Platform;

 import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;

@@ -73,12 +73,12 @@
 		};

 	}

 	

-	public Set<ISearchConsoleSlaveController> availableSearchConsoleSlaveControllers()

+	public List<ISearchConsoleSlaveController> availableSearchConsoleSlaveControllers()

 	{

 		return seXpParser().readContributions();

 	}

 

-	public Set<ISearchFavoritesSlaveController> availableSearchFavoritesSlaveControllers()

+	public List<ISearchFavoritesSlaveController> availableSearchFavoritesSlaveControllers()

 	{

 		return sbXpParser().readContributions();

 	}

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesMenuAction.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesMenuAction.java
index cc00048..806bd0d 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesMenuAction.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesMenuAction.java
@@ -10,19 +10,20 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.viewcustomization;

 

-import java.util.HashSet;

-import java.util.Iterator;

-import java.util.Set;

-

-import org.eclipse.jface.action.Action;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.internal.view.ISearchFavoritesItemsAdder;

-import org.eclipse.platform.discovery.ui.internal.view.SearchFavoritesItemsAdder;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.ui.internal.view.ISearchFavoritesItemsAdder;
+import org.eclipse.platform.discovery.ui.internal.view.SearchFavoritesItemsAdder;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
 

 

 /**

@@ -50,7 +51,7 @@
 	 * @param environment

 	 *            environment

 	 */

-	public SaveInFavoritesMenuAction(final IConfigurableContributedAction contributedAction, final ISelection selection, final ISearchContext searchContext, final Set<ISearchFavoritesViewCustomization> sbViewCustomizations, final IDiscoveryEnvironment environment)

+	public SaveInFavoritesMenuAction(final IConfigurableContributedAction contributedAction, final ISelection selection, final ISearchContext searchContext, final List<ISearchFavoritesViewCustomization> sbViewCustomizations, final IDiscoveryEnvironment environment)

 	{

 		super();

 		this.selection = selection;

@@ -74,7 +75,7 @@
 		itemsAdder.addItems(this.selection);

 	}

 

-	protected ISearchFavoritesItemsAdder createSbAdder(final IConfigurableContributedAction saveAction, final Set<ISearchFavoritesViewCustomization> sbViewCustomizations, final IDiscoveryEnvironment environment, final ISelection selection, final ISearchContext searchCtx)

+	protected ISearchFavoritesItemsAdder createSbAdder(final IConfigurableContributedAction saveAction, final List<ISearchFavoritesViewCustomization> sbViewCustomizations, final IDiscoveryEnvironment environment, final ISelection selection, final ISearchContext searchCtx)

 	{

 		return new SearchFavoritesItemsAdder(sbViewCustomizations, environment.operationRunner())

 		{

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesViewCustomization.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesViewCustomization.java
index f42fc87..4a160fa 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesViewCustomization.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/SaveInFavoritesViewCustomization.java
@@ -10,19 +10,19 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.viewcustomization;

 

-import java.util.Set;

-

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.platform.discovery.core.api.IContributedAction;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.integration.internal.plugin.DiscoveryIntegrationMessages;

-import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;

-import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;

-import org.eclipse.platform.discovery.ui.api.impl.GenericViewCustomizationImpl;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.platform.discovery.core.api.IContributedAction;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.integration.internal.plugin.DiscoveryIntegrationMessages;
+import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;
+import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;
+import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.ui.api.impl.GenericViewCustomizationImpl;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
 

 

 public class SaveInFavoritesViewCustomization extends GenericViewCustomizationImpl implements ISearchConsoleCustomization

@@ -39,7 +39,7 @@
 

 		final ISelection selection = viewAccessor.getTreeViewer().getSelection();

 		final ISearchContext searchCtx = (ISearchContext) viewAccessor.getTreeViewer().getInput();

-		final Set<ISearchFavoritesViewCustomization> favoritesViewCustomizations = viewCustomizationConfiguration().availableSearchFavoritesCustomizations();

+		final List<ISearchFavoritesViewCustomization> favoritesViewCustomizations = viewCustomizationConfiguration().availableSearchFavoritesCustomizations();

 

 		final IActionWithAvailability action = createSaveAction(contributedAction, selection, searchCtx, favoritesViewCustomizations, this.masterView.getEnvironment());

 

@@ -64,7 +64,7 @@
 		this.masterView = masterView;

 	}

 

-	protected IActionWithAvailability createSaveAction(final IContributedAction contributedAction, final ISelection selection, final ISearchContext searchContext, final Set<ISearchFavoritesViewCustomization> sbCustomizations, final IDiscoveryEnvironment environment)

+	protected IActionWithAvailability createSaveAction(final IContributedAction contributedAction, final ISelection selection, final ISearchContext searchContext, final List<ISearchFavoritesViewCustomization> sbCustomizations, final IDiscoveryEnvironment environment)

 	{

 		assert contributedAction instanceof SaveInFavoritesContributedAction;

 		return new SaveInFavoritesMenuAction((SaveInFavoritesContributedAction) contributedAction, selection, searchContext, sbCustomizations, environment);

diff --git a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/ViewCustomizationConfiguration.java b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/ViewCustomizationConfiguration.java
index 0c5f359..2a1bb22 100644
--- a/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/ViewCustomizationConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.integration/src/org/eclipse/platform/discovery/integration/internal/viewcustomization/ViewCustomizationConfiguration.java
@@ -10,14 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.internal.viewcustomization;

 

-import java.util.Set;

 

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.integration.internal.ViewCustXpParser;

-import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;

+import java.util.List;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.integration.internal.ViewCustXpParser;
+import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;
+import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
 

 

 public class ViewCustomizationConfiguration implements IViewCustomizationConfiguration

@@ -73,12 +74,12 @@
 		};

 	}

 

-	public Set<ISearchConsoleCustomization> availableSearchConsoleCustomizations()

+	public List<ISearchConsoleCustomization> availableSearchConsoleCustomizations()

 	{

 		return seXpParser().readContributions();

 	}

 

-	public Set<ISearchFavoritesViewCustomization> availableSearchFavoritesCustomizations()

+	public List<ISearchFavoritesViewCustomization> availableSearchFavoritesCustomizations()

 	{

 		return sbXpParser().readContributions();

 	}

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISearchProviderConfiguration.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISearchProviderConfiguration.java
index f21147a..c20f59b 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISearchProviderConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISearchProviderConfiguration.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal;

 

-import java.util.Set;

+import java.util.List;
 

 import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

@@ -35,7 +35,7 @@
 	 *            the object type

 	 * @return a set of descriptions for all search providers which are capable of searching for the specified object type or an empty set if none

 	 */

-	public Set<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType);

+	public List<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType);

 

 	/**

 	 * Retrieves a set of destination categories which can be searched by all the currently registered search providers

@@ -44,7 +44,7 @@
 	 *            the object type

 	 * @return a set of destination categories which can be searched or empty set if none

 	 */

-	public Set<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(final IObjectTypeDescription objectType);

+	public List<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(final IObjectTypeDescription objectType);

 

 	/**

 	 * Retrieves a set of destination provider descriptions which can provide search destinations for the destination category specified

@@ -53,13 +53,13 @@
 	 *            the destination category

 	 * @return a set of destination provider descriptions or an empty set if none

 	 */

-	public Set<IDestinationsProviderDescription> getDestinationProvidersForCategory(final IDestinationCategoryDescription category);

+	public List<IDestinationsProviderDescription> getDestinationProvidersForCategory(final IDestinationCategoryDescription category);

 

 	/**

 	 * Retrieves a set of available destination providers

 	 * @return

 	 */

-	public Set<IDestinationsProviderDescription> getAvailableDestinationProviders();

+	public List<IDestinationsProviderDescription> getAvailableDestinationProviders();

 

 	/**

 	 * Gets the description of the active search provider which can search for the specified object type in the specified destination category<br>

@@ -83,14 +83,14 @@
 	 * 

 	 * @return a set of all registered object types or an empty set if none

 	 */

-	public Set<IObjectTypeDescription> getObjectTypes();

+	public List<IObjectTypeDescription> getObjectTypes();

 

 	/**

 	 * Retrieves a set of descriptions for all registered destination categories

 	 * 

 	 * @return a set of descriptions of all registered destinations or an empty set if none

 	 */

-	public Set<IDestinationCategoryDescription> getDestinationCategories();

+	public List<IDestinationCategoryDescription> getDestinationCategories();

 

 	/**

 	 * Gets the available search subdestinations for the combination object type - destination category - search provider.

@@ -103,7 +103,7 @@
 	 *            search provider

 	 * @return a set of currently active subdestinations for the input parameters specified or an empty set if none

 	 */

-	public Set<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType,

+	public List<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType,

 									final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription searchProvider);

 

 	/**

@@ -134,7 +134,7 @@
 	 * @throws DestinationCategoryNotFoundException

 	 *             when such a destination category was not found

 	 */

-	public Set<IDestinationCategoryDescription> getDestinationCategoriesForDestination(final ISearchDestination destination)

+	public List<IDestinationCategoryDescription> getDestinationCategoriesForDestination(final ISearchDestination destination)

 									throws DestinationCategoryNotFoundException;

 

 	/**

@@ -164,7 +164,7 @@
 	 *            the search destination provider description

 	 * @return a set of search destinations or an empty set if none

 	 */

-	public Set<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category,

+	public List<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category,

 									final IDestinationsProvider destinationsProvider);

 	

 }

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISubdestinationsActivationConfig.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISubdestinationsActivationConfig.java
index 84ca4d4..8b53052 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISubdestinationsActivationConfig.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/ISubdestinationsActivationConfig.java
@@ -10,12 +10,13 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal;

 

-import java.util.Set;

 

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

+import java.util.List;
+
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
 

 

 /**

@@ -31,7 +32,7 @@
 	 * @param searchProvider search provider

 	 * @return a set of active 

 	 */

-	public Set<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription searchProvider);

+	public List<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription searchProvider);

 

 	/**

 	 * Activates/de-activate a sub-destinations for the combination object type - destination category - provider descriptions. This method should persist the

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SubdestinationsActivationConfig.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SubdestinationsActivationConfig.java
index 9234230..0b22064 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SubdestinationsActivationConfig.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/SubdestinationsActivationConfig.java
@@ -10,19 +10,18 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal;

 

-import java.util.HashMap;

-import java.util.HashSet;

-import java.util.LinkedList;

-import java.util.List;

-import java.util.Map;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.api.IConflict;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;

+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.platform.discovery.runtime.api.IConflict;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;
 

 

 public class SubdestinationsActivationConfig implements ISubdestinationsActivationConfig

@@ -39,7 +38,7 @@
 	public void activateSubdestination(final IObjectTypeDescription searchObjectType, final IDestinationCategoryDescription destinationCategory,

 			final ISearchProviderDescription searchProviderDescription, final ISearchSubdestination subDestination, final boolean activate)

 	{

-		Set<ISearchSubdestination> availableSearchSubdestinations = getAvailableSearchSubdestinations(searchObjectType, destinationCategory, searchProviderDescription);

+		List<ISearchSubdestination> availableSearchSubdestinations = getAvailableSearchSubdestinations(searchObjectType, destinationCategory, searchProviderDescription);

 		Map<String, ISearchSubdestination> subdMap = getIdToSubdestinationMap(availableSearchSubdestinations);

 		activate:if(activate) {

 			//first check cache

@@ -85,9 +84,9 @@
 		}

 	}

 

-	public Set<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription searchProvider)

+	public List<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription searchProvider)

 	{

-		final Set<ISearchSubdestination> result = new HashSet<ISearchSubdestination>();

+		final List<ISearchSubdestination> result = new ArrayList<ISearchSubdestination>();

 		for (ISearchSubdestination subDest : this.subdestinationsParser.readContributions())

 		{

 			if (subDest.getObjectTypeId().equals(objectType.getId()) && subDest.getDestinationCategoryId().equals(destinationCategory.getId()))

@@ -114,7 +113,7 @@
 	}

 	

 	/*utility method*/

-	private Map<String, ISearchSubdestination> getIdToSubdestinationMap(Set<ISearchSubdestination> subdestinations) {

+	private Map<String, ISearchSubdestination> getIdToSubdestinationMap(List<ISearchSubdestination> subdestinations) {

 		Map<String, ISearchSubdestination> retVal = new HashMap<String, ISearchSubdestination>();

 		for(ISearchSubdestination current: subdestinations) {

 			retVal.put(current.getId(), current);

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/SearchProviderConfiguration.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/SearchProviderConfiguration.java
index edfd3b5..20ab0de 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/SearchProviderConfiguration.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/impl/SearchProviderConfiguration.java
@@ -10,26 +10,26 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.impl;

 

-import java.util.Collections;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderActivationConfig;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.ISubdestinationsActivationConfig;

+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderActivationConfig;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.ISubdestinationsActivationConfig;
 import org.eclipse.platform.discovery.runtime.internal.IXPParsersFactory;
-import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;

-import org.eclipse.platform.discovery.util.internal.logging.ILogger;

-import org.eclipse.platform.discovery.util.internal.logging.Logger;

+import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;
+import org.eclipse.platform.discovery.util.internal.logging.ILogger;
+import org.eclipse.platform.discovery.util.internal.logging.Logger;
 

 

 /**

@@ -75,11 +75,11 @@
 		return parsersFactory.createSearchProviderParser();

 	}

 

-	public Set<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType)

+	public List<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType)

 	{

-		final Set<ISearchProviderDescription> allProviders = searchProvidersExtensionParser().readContributions();

+		final List<ISearchProviderDescription> allProviders = searchProvidersExtensionParser().readContributions();

 

-		final Set<ISearchProviderDescription> result = new HashSet<ISearchProviderDescription>();

+		final List<ISearchProviderDescription> result = new ArrayList<ISearchProviderDescription>();

 		for (ISearchProviderDescription provider : allProviders)

 		{

 			if (provider.getObjectType().getId().equals(searchObjectType.getId()))

@@ -91,7 +91,7 @@
 		return result;

 	}

 

-	public Set<IObjectTypeDescription> getObjectTypes()

+	public List<IObjectTypeDescription> getObjectTypes()

 	{

 		return parsersFactory.createObjectTypeParser().readContributions();

 	}

@@ -109,9 +109,9 @@
 		return destinationCategory!=null ? searchProviderActivationConfig.getActiveSearchProviderDescription(objectType, destinationCategory) : searchProviderActivationConfig.getActiveSearchProviderDescription(objectType);

 	}

 

-	public Set<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(IObjectTypeDescription objectType)

+	public List<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(IObjectTypeDescription objectType)

 	{

-		final Set<IDestinationCategoryDescription> result = new HashSet<IDestinationCategoryDescription>();

+		final List<IDestinationCategoryDescription> result = new ArrayList<IDestinationCategoryDescription>();

 		for(IDestinationCategoryDescription category : getDestinationCategories())

 		{

 			try

@@ -128,22 +128,22 @@
 		return result;

 	}

 

-	public Set<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription provider)

+	public List<ISearchSubdestination> getAvailableSearchSubdestinations(final IObjectTypeDescription objectType, final IDestinationCategoryDescription destinationCategory, final ISearchProviderDescription provider)

 	{

 		return this.subdestinationsActivationConfig.getAvailableSearchSubdestinations(objectType, destinationCategory, provider);

 	}

 

-	public Set<IDestinationCategoryDescription> getDestinationCategories()

+	public List<IDestinationCategoryDescription> getDestinationCategories()

 	{

 		return this.parsersFactory.createDestinationsCategoryParser().readContributions();

 	}

 

-	public Set<IDestinationsProviderDescription> getDestinationProvidersForCategory(final IDestinationCategoryDescription category)

+	public List<IDestinationsProviderDescription> getDestinationProvidersForCategory(final IDestinationCategoryDescription category)

 	{

-		final Set<IDestinationsProviderDescription> result = new HashSet<IDestinationsProviderDescription>();

+		final List<IDestinationsProviderDescription> result = new ArrayList<IDestinationsProviderDescription>();

 		

 		for(IDestinationsProviderDescription destProvider : getAvailableDestinationProviders())

-		{

+		{
 			if(category.getDestinationProviderIds().contains(destProvider.getId()))

 			{

 				result.add(destProvider);

@@ -153,9 +153,9 @@
 		return result;

 	}

 	

-	public Set<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category, final IDestinationsProvider destinationsProvider)

+	public List<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category, final IDestinationsProvider destinationsProvider)

 	{

-		final Set<ISearchDestination> result = new HashSet<ISearchDestination>();

+		final List<ISearchDestination> result = new ArrayList<ISearchDestination>();

 		final Class<?> expectedDestinationClass = category.getDestinationsClass();

 		for(ISearchDestination dest : destinationsProvider.getSearchDestinations())

 		{

@@ -172,11 +172,11 @@
 		return result;

 	}

 

-	public Set<IDestinationCategoryDescription> getDestinationCategoriesForDestination(final ISearchDestination destination) throws DestinationCategoryNotFoundException

+	public List<IDestinationCategoryDescription> getDestinationCategoriesForDestination(final ISearchDestination destination) throws DestinationCategoryNotFoundException

 	{

-		final HashSet<IDestinationCategoryDescription> result = new HashSet<IDestinationCategoryDescription>();

+		final List<IDestinationCategoryDescription> result = new ArrayList<IDestinationCategoryDescription>();

 		

-		final Set<String> destinationProvidersIds = new HashSet<String>();

+		final List<String> destinationProvidersIds = new ArrayList<String>();

 		for(IDestinationsProviderDescription providerDescription : getAvailableDestinationProviders())

 		{

 			if(providerDescription.createProvider().getSearchDestinations().contains(destination))

@@ -208,7 +208,7 @@
 		return this.subdestinationsActivationConfig.isSubdestinationActive(subdestination, objectType, destCategory, searchProvider);

 	}

 

-	public Set<IDestinationsProviderDescription> getAvailableDestinationProviders()

+	public List<IDestinationsProviderDescription> getAvailableDestinationProviders()

 	{

 		return parsersFactory.createDestinationsProviderParser().readContributions();

 	}

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/model/descriptions/IDestinationCategoryDescription.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/model/descriptions/IDestinationCategoryDescription.java
index fc60c08..a0188d0 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/model/descriptions/IDestinationCategoryDescription.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/model/descriptions/IDestinationCategoryDescription.java
@@ -10,10 +10,11 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.model.descriptions;

 

-import java.util.Set;

 

-import org.eclipse.platform.discovery.runtime.api.IDescriptiveObject;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

+import java.util.List;
+
+import org.eclipse.platform.discovery.runtime.api.IDescriptiveObject;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
 

 

 /**

@@ -25,9 +26,9 @@
 public interface IDestinationCategoryDescription extends IDescriptiveObject

 {

 	/**

-	 * Retrieves a set of destination provider ids which which can provider destinations for this category category

+	 * Retrieves a list of destination provider ids which which can provider destinations for this category category

 	 */

-	public Set<String> getDestinationProviderIds();

+	public List<String> getDestinationProviderIds();

 

 	/**

 	 * Gets the destination class name specified via the "destinaionclass" attribute of the destinations category extension point

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/util/PersistenceProviderRegistryImpl.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/util/PersistenceProviderRegistryImpl.java
index aa69491..1ebfadb 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/util/PersistenceProviderRegistryImpl.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/util/PersistenceProviderRegistryImpl.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.runtime.internal.persistence.util;

 

 import java.util.HashSet;

+import java.util.List;
 import java.util.Set;

 

 import org.eclipse.platform.discovery.runtime.api.persistence.DestinationItemPair;

@@ -51,7 +52,7 @@
 		final Set<IMementoLoadProvider> resultSet = new HashSet<IMementoLoadProvider>();

 		IMementoLoadProvider resultItem = null;

 		

-		final Set<IMementoLoadProviderDescription> descriptionSet = xpPersistenceFactory.createMementoLoadProviderParser().readContributions();

+		final List<IMementoLoadProviderDescription> descriptionSet = xpPersistenceFactory.createMementoLoadProviderParser().readContributions();

 		for (IMementoLoadProviderDescription description : descriptionSet)

 		{

 			resultItem = description.createInstance();

@@ -67,7 +68,7 @@
 		final Set<IMementoStoreProvider> resultSet = new HashSet<IMementoStoreProvider>();

 		IMementoStoreProvider resultItem = null;

 		

-		final Set<IMementoStoreProviderDescription> descriptionSet = xpPersistenceFactory.createMementoStoreProviderParser().readContributions();

+		final List<IMementoStoreProviderDescription> descriptionSet = xpPersistenceFactory.createMementoStoreProviderParser().readContributions();

 		for (IMementoStoreProviderDescription description : descriptionSet)

 		{

 			resultItem = description.createInstance();

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoLoadProvidersExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoLoadProvidersExtensionParser.java
index 451896e..93a6c7e 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoLoadProvidersExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoLoadProvidersExtensionParser.java
@@ -10,15 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.persistence.xp;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.persistence.IMementoLoadProvider;

-import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoLoadProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.persistence.IMementoLoadProvider;
+import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoLoadProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;
 

 

 /**

@@ -39,9 +39,9 @@
 	}

 

 	@Override

-	public Set<IMementoLoadProviderDescription> readContributions() 

-	{

-		final Set<IMementoLoadProviderDescription> result = new HashSet<IMementoLoadProviderDescription>();

+	public List<IMementoLoadProviderDescription> readContributions() 

+	{
+		final List<IMementoLoadProviderDescription> result = new ArrayList<IMementoLoadProviderDescription>();

 		for (IConfigurationElement element : getConfigurationElements())

 		{

 			result.add(createMementoLoadProvider(element));

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoStoreProvidersExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoStoreProvidersExtensionParser.java
index e9bd780..61b2ca2 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoStoreProvidersExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/persistence/xp/MementoStoreProvidersExtensionParser.java
@@ -10,15 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.persistence.xp;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.persistence.IMementoStoreProvider;

-import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoStoreProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.persistence.IMementoStoreProvider;
+import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoStoreProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;
 

 /**

  * Implementation of the {@link IMementoStoreProviderExtensionParser} interface.

@@ -38,9 +38,9 @@
 	}

 

 	@Override

-	public Set<IMementoStoreProviderDescription> readContributions() 

+	public List<IMementoStoreProviderDescription> readContributions() 

 	{		

-		final Set<IMementoStoreProviderDescription> result = new HashSet<IMementoStoreProviderDescription>();

+		final List<IMementoStoreProviderDescription> result = new ArrayList<IMementoStoreProviderDescription>();

 		for (IConfigurationElement element : getConfigurationElements())

 		{

 			result.add(createMementoStoreProvider(element));

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/IContributionsReader.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/IContributionsReader.java
index f5d39dd..e0aca62 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/IContributionsReader.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/IContributionsReader.java
@@ -10,7 +10,8 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp;
 
-import java.util.Set;
+import java.util.List;
+
 
 /**
  * Interface for reading contributions
@@ -27,5 +28,5 @@
 	 * 
 	 * @return a set of contributions or an empty set if none
 	 */
-	public Set<T> readContributions();
+	public List<T> readContributions();
 }
diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsCategoryExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsCategoryExtensionParser.java
index ac1e86d..00487f5 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsCategoryExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsCategoryExtensionParser.java
@@ -10,17 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;

-import org.osgi.framework.Bundle;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
+import org.osgi.framework.Bundle;
 

 

 /**

@@ -45,9 +45,9 @@
 		this.destinationsProviderExtParser = destProviderExtParser;

 	}

 

-	public Set<IDestinationCategoryDescription> readContributions()

+	public List<IDestinationCategoryDescription> readContributions()

 	{

-		final Set<IDestinationCategoryDescription> categories = new HashSet<IDestinationCategoryDescription>();

+		final List<IDestinationCategoryDescription> categories = new ArrayList<IDestinationCategoryDescription>();

 		for (IConfigurationElement element : getConfigurationElements())

 		{

 			categories.add(createCategory(element));

@@ -60,7 +60,7 @@
 	{

 		return new IDestinationCategoryDescription() {

 

-			public Set<String> getDestinationProviderIds()

+			public List<String> getDestinationProviderIds()

 			{

 				return getDestProviderIds(getId());

 			}

@@ -82,9 +82,9 @@
 		};

 	}

 

-	private Set<String> getDestProviderIds(final String categoryId)

+	private List<String> getDestProviderIds(final String categoryId)

 	{

-		final Set<String> result = new HashSet<String>();

+		final List<String> result = new ArrayList<String>();

 		for (IDestinationsProviderDescription provider : destinationsProviderExtParser.readContributions())

 		{

 			if (provider.getDestinationCategoryId().equals(categoryId))

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsProviderExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsProviderExtensionParser.java
index 5eada5a..058c6f7 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsProviderExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/DestinationsProviderExtensionParser.java
@@ -10,16 +10,16 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
 

 

 /**

@@ -42,9 +42,9 @@
 		super(Platform.getExtensionRegistry(), XP_ID, XP_ELEMENT_NAME);

 	}

 

-	public Set<IDestinationsProviderDescription> readContributions()

+	public List<IDestinationsProviderDescription> readContributions()

 	{

-		final Set<IDestinationsProviderDescription> result = new HashSet<IDestinationsProviderDescription>();

+		final List<IDestinationsProviderDescription> result = new ArrayList<IDestinationsProviderDescription>();

 		for (IConfigurationElement element : getConfigurationElements())

 		{

 			result.add(createProvderDescr(element));

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/ObjectTypeExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/ObjectTypeExtensionParser.java
index 8821e49..a6b28b7 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/ObjectTypeExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/ObjectTypeExtensionParser.java
@@ -10,15 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
 import org.eclipse.platform.discovery.runtime.internal.model.descriptions.impl.ObjectTypeDescription;
-import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;

+import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;
 

 

 public class ObjectTypeExtensionParser extends AbstractExtensionPointParser implements IObjectTypeExtensionParser

@@ -33,9 +33,9 @@
 		super(registry, XP_ID, XP_ELEMENT_NAME);
 	}

 

-	public Set<IObjectTypeDescription> readContributions()

+	public List<IObjectTypeDescription> readContributions()

 	{

-		final Set<IObjectTypeDescription> result = new HashSet<IObjectTypeDescription>();

+		final List<IObjectTypeDescription> result = new ArrayList<IObjectTypeDescription>();

 		for(IConfigurationElement element : getConfigurationElements())

 		{

 			result.add(createObjectType(element));

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchProvidersExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchProvidersExtensionParser.java
index a35bdde..4c86099 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchProvidersExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchProvidersExtensionParser.java
@@ -10,19 +10,21 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.ISearchProvider;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;

+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.ISearchProvider;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;
 

 

 /**

@@ -53,9 +55,9 @@
 		this.objTypeExtParser = objectTypeExtParser;

 	}

 

-	public Set<ISearchProviderDescription> readContributions()

+	public List<ISearchProviderDescription> readContributions()

 	{

-		final Set<ISearchProviderDescription> result = new HashSet<ISearchProviderDescription>();

+		final List<ISearchProviderDescription> result = new ArrayList<ISearchProviderDescription>();

 		for (IConfigurationElement element : getConfigurationElements())

 		{

 			result.add(createSearchProvider(element));

diff --git a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchSubdestinationExtensionParser.java b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchSubdestinationExtensionParser.java
index 32b64e2..a916767 100644
--- a/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchSubdestinationExtensionParser.java
+++ b/bundles/org.eclipse.platform.discovery.runtime/src/org/eclipse/platform/discovery/runtime/internal/xp/impl/SearchSubdestinationExtensionParser.java
@@ -10,14 +10,16 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.platform.discovery.runtime.api.IConflict;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;

+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.platform.discovery.runtime.api.IConflict;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;
 

 

 /**

@@ -42,9 +44,9 @@
 		super(Platform.getExtensionRegistry(), XP_ID, XP_ELEMENT_NAME);

 	}

 

-	public Set<ISearchSubdestination> readContributions()

+	public List<ISearchSubdestination> readContributions()

 	{

-		final Set<ISearchSubdestination> result = new HashSet<ISearchSubdestination>();

+		final List<ISearchSubdestination> result = new ArrayList<ISearchSubdestination>();

 

 		for (IConfigurationElement element : getConfigurationElements())

 		{

diff --git a/bundles/org.eclipse.platform.discovery.ui/plugin.properties b/bundles/org.eclipse.platform.discovery.ui/plugin.properties
index 5431fa8..9a8c858 100644
--- a/bundles/org.eclipse.platform.discovery.ui/plugin.properties
+++ b/bundles/org.eclipse.platform.discovery.ui/plugin.properties
@@ -11,4 +11,4 @@
 Bundle-Vendor.0 = Eclipse.org

 Bundle-Name.0 = Search Console UI Plugin

 

-Extension-Point-Name.0 = Custom search UI contribution
\ No newline at end of file
+Extension-Point-Name.0 = Custom search results UI contribution
\ No newline at end of file
diff --git a/bundles/org.eclipse.platform.discovery.ui/schema/org.eclipse.platform.discovery.ui.customresultui.exsd b/bundles/org.eclipse.platform.discovery.ui/schema/org.eclipse.platform.discovery.ui.customresultui.exsd
index 7d96a10..f4ac09f 100644
--- a/bundles/org.eclipse.platform.discovery.ui/schema/org.eclipse.platform.discovery.ui.customresultui.exsd
+++ b/bundles/org.eclipse.platform.discovery.ui/schema/org.eclipse.platform.discovery.ui.customresultui.exsd
@@ -1,116 +1,116 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.platform.discovery.ui" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.platform.discovery.ui" id="org.eclipse.platform.discovery.ui.customresultui" name="Custom search UI contribution"/>
-      </appInfo>
-      <documentation>
-         Contributors can provide a custom UI which displays the result of a search provider. The framework supports up to one such contributor per a search provider. If there are more than one contributors for a single search provider, the framework will throw a runtime exception
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appInfo>
-            <meta.element />
-         </appInfo>
-      </annotation>
-      <complexType>
-         <sequence>
-            <element ref="contributor"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="contributor">
-      <complexType>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The unique ID of this contributor
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="searchproviderid" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The ID of the search provider for which this contributor shows search result
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="creator" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The ISearchResultCustomUiCreator implementation which will create the UI to display the result
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiinfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-
-</schema>
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.platform.discovery.ui" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.platform.discovery.ui" id="org.eclipse.platform.discovery.ui.customresultui" name="Custom search results UI contribution"/>

+      </appInfo>

+      <documentation>

+         Contributors can provide a custom UI which displays the result of a search provider. The framework supports up to one such contributor per a search provider. If there are more than one contributors for a single search provider, the framework will throw a runtime exception

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="contributor"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="contributor">

+      <complexType>

+         <attribute name="id" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The unique ID of this contributor

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="searchproviderid" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The ID of the search provider for which this contributor shows search result

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="creator" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The ISearchResultCustomUiCreator implementation which will create the UI to display the result

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="examples"/>

+      </appInfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="apiinfo"/>

+      </appInfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

+         <meta.section type="implementation"/>

+      </appInfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+

+</schema>

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/api/ISearchParametersUI.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/api/ISearchParametersUI.java
index e6edb06..2cae418 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/api/ISearchParametersUI.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/api/ISearchParametersUI.java
@@ -10,8 +10,8 @@
  *******************************************************************************/

 package org.eclipse.platform.discovery.ui.api;

 

+import java.util.List;

 import java.util.Map;

-import java.util.Set;

 

 import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;

 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

@@ -90,8 +90,14 @@
 	 */

 	public void createUI(final Composite parent, final FormToolkit toolkit, final IConsoleContext consoleContext);

 	

-	public void destinationSelected(final Set<ISearchDestination> destinations);

+	/**

+	 * Notifies the parameters UI that a search provider has been selected. Implementors may perform some UI related routines (e.g. enable/disable UI elements) based on the search provider specified. 

+	 * @param destination - the selected search provider. May be null if the user has selected a destination category (instead of destination) therefore unselecting destination, and effectively unselecting the search provider.

+	 */

+	public void searchProviderSelected(final ISearchProviderDescription selectedProvider);

 

+	

+	

 	/**

 	 * Gets specific parameters. The parameters are passed to the search provider, when performing search. 

 	 * @see ISearchParameters#getCustomParameters()

@@ -113,5 +119,5 @@
 	/**

 	 * Displays the hierarchies which can be used to present the search result

 	 */

-	public void showGroupingHierarchies(final Set<GroupingHierarchy> groupingHierarchies);	

+	public void showGroupingHierarchies(final List<GroupingHierarchy> groupingHierarchies);	

 }

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/SearchParametersUI.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/SearchParametersUI.java
index a3f2ad5..98686f5 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/SearchParametersUI.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/SearchParametersUI.java
@@ -10,10 +10,10 @@
  *******************************************************************************/

 package org.eclipse.platform.discovery.ui.internal;

 

+import java.util.ArrayList;

 import java.util.Collections;

-import java.util.HashSet;

+import java.util.List;

 import java.util.Map;

-import java.util.Set;

 

 import org.eclipse.jface.resource.ImageRegistry;

 import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;

@@ -27,9 +27,6 @@
 import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;

 import org.eclipse.platform.discovery.ui.internal.view.impl.SubdestinationsSelectedListener;

 import org.eclipse.platform.discovery.ui.internal.view.impl.TextControl;

-import org.eclipse.platform.discovery.util.internal.property.IPropertyAttributeListener;

-import org.eclipse.platform.discovery.util.internal.property.Property;

-import org.eclipse.platform.discovery.util.internal.property.PropertyAttributeChangedEvent;

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.events.ModifyEvent;

 import org.eclipse.swt.events.ModifyListener;

@@ -45,64 +42,17 @@
 import org.eclipse.ui.forms.widgets.FormToolkit;

 

 public class SearchParametersUI implements ISearchParametersUI {

+

 	private final static String DROP_DOWN_ICON_LOCATION = "icon-dropdown-keyword-ALT.gif"; //$NON-NLS-1$

 

 	private static final int UI_IN_CONTROL_SPACING = 5;

 	private Label openSubdestinationsButton;

 	private TextControl keywordTextControl;

 

-	private final Property<Set<ISearchDestination>> destinations;

-

 	private IConsoleContext consoleContext;

 

 	private InteractiveComboSelector<GroupingHierarchy> groupingHierarchySelector;

 

-	public SearchParametersUI()

-	{

-		destinations = new Property<Set<ISearchDestination>>();

-		destinations.registerValueListener(new IPropertyAttributeListener<Set<ISearchDestination>>() {

-			

-			@Override

-			public void attributeChanged(PropertyAttributeChangedEvent<Set<ISearchDestination>> event) {

-				final ISearchProviderDescription currentSearchProvider = consoleContext.searchProvider();

-				final Set<ISearchDestination> newSelection = event.getNewAttribute();

-				keywordTextControl.setEnabled((!newSelection.isEmpty()) && (currentSearchProvider == null ? false : currentSearchProvider.supportsTextSearch()));

-				updateKeywordTextMessage(newSelection);

-

-				if (newSelection.isEmpty() || currentSearchProvider == null)

-				{

-					openSubdestinationsButton.setEnabled(false);

-				} else

-				{

-					final Set<ISearchSubdestination> allSubdestintations = consoleContext.searchProviderConfiguration().getAvailableSearchSubdestinations(consoleContext.selectedObjectType(), consoleContext.destinationCategory(), consoleContext.searchProvider());

-					openSubdestinationsButton.setEnabled(allSubdestintations.size() > 0);

-				}

-

-				consoleContext.notifyComplete(isComplete());				

-			}

-			

-			private void updateKeywordTextMessage(final Set<ISearchDestination> selectedDestinations)

-			{

-				if(selectedDestinations.isEmpty())

-				{

-					keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint);

-					return;

-				}

-				

-				final ISearchProviderDescription currentSearchProvider = SearchParametersUI.this.consoleContext.searchProvider();

-				if(currentSearchProvider != null && currentSearchProvider.supportsTextSearch())

-				{

-					keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_EnterKeywordHint);

-				}

-				else

-				{

-					keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_UnsupportedTextSearch);

-				}

-			}

-			

-		}, false);

-	}

-	

 	@Override

 	public void createUI(Composite parent, FormToolkit formToolkit, final IConsoleContext consoleContext) {

 		parent.setLayout(new FormLayout());

@@ -132,7 +82,7 @@
 		

 		final TextControl control = new TextControl(keywordText, leftNeighbour);

 		control.setEnabled(false);

-		control.setMessage(DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint);

+		control.setMessage(DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint);

 		control.getControl().addModifyListener(new ModifyListener() {

 			@Override

 			public void modifyText(ModifyEvent e) {

@@ -161,7 +111,7 @@
 	

 	private boolean isComplete()

 	{

-		return !destinations.get().isEmpty() && !keywordTextControl.get().isEmpty();

+		return (consoleContext.searchProvider() != null) && !keywordTextControl.get().isEmpty();

 	}

 

 	@Override

@@ -197,20 +147,61 @@
 	

 	private void createGroupByComposite(final Composite parent, final FormToolkit formToolkit, final int leftLabelsSize, final Control upperNeighbour)

 	{

-		groupingHierarchySelector = new InteractiveComboSelector<GroupingHierarchy>(parent, formToolkit, new HashSet<GroupingHierarchy>(), DiscoveryUIMessages.GROUP_BY_LABEL, leftLabelsSize , upperNeighbour);

+		groupingHierarchySelector = new InteractiveComboSelector<GroupingHierarchy>(parent, formToolkit, new ArrayList<GroupingHierarchy>(), DiscoveryUIMessages.GROUP_BY_LABEL, leftLabelsSize , upperNeighbour);

 		groupingHierarchySelector.setEnabled(false);

 	}

 

 	@Override

-	public void showGroupingHierarchies(final Set<GroupingHierarchy> groupingHierarchies) {

+	public void showGroupingHierarchies(final List<GroupingHierarchy> groupingHierarchies) {

 		groupingHierarchySelector.setInput(groupingHierarchies);

 	}

 

 	@Override

-	public void destinationSelected(final Set<ISearchDestination> destinations) {

-		final Set<ISearchDestination> copy = new HashSet<ISearchDestination>(destinations);

-		this.destinations.set(copy);	

+	public void searchProviderSelected(ISearchProviderDescription provider) {

+		

+		

+		final ISearchDestination destination = consoleContext.searchDestination();

+		keywordTextControl.setEnabled((provider == null ? false : provider.supportsTextSearch()));

+		updateKeywordTextMessage(provider, destination);

+

+		if (destination == null || provider == null)

+		{

+			openSubdestinationsButton.setEnabled(false);

+		} else

+		{

+			final List<ISearchSubdestination> allSubdestintations = consoleContext.searchProviderConfiguration().getAvailableSearchSubdestinations(consoleContext.selectedObjectType(), consoleContext.destinationCategory(), consoleContext.searchProvider());

+			openSubdestinationsButton.setEnabled(allSubdestintations.size() > 0);

+		}

+

+		consoleContext.notifyComplete(isComplete());				

 	}

 	

-

+	private void updateKeywordTextMessage(ISearchProviderDescription provider, final ISearchDestination destination)

+	{

+		if(provider==null) 

+		{

+			if(consoleContext.selectedObjectType()==null)

+			{

+				keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint);

+				return;

+			}

+			

+			assert destination==null;

+			keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint);

+			return;

+		}

+		

+		if(provider.supportsTextSearch())

+		{

+			keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_EnterKeywordHint);

+			return;

+		}

+		else

+		{

+			keywordTextControl.setMessage(DiscoveryUIMessages.SearchConsoleView_UnsupportedTextSearch);

+		}

+		

+		

+	}

+	

 }

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.java
index e2c09ac..863287d 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.java
@@ -26,7 +26,9 @@
 	public static String SearchFavoritesView_UnsupportedDataContentMsg;

 

 	public static String SearchConsoleView_EnterKeywordHint;

-	public static String SearchConsoleView_NoDestinationSelectedHint;

+	public static String SearchConsoleView_NoDestinationSelectedHint;
+
+	public static String SearchConsoleView_NoObjectTypeSelectedHint;

 	public static String SearchConsoleView_UnsupportedTextSearch; 

 

 	public static String SearchConsoleView_MANAGED_CONFIGS_LINK;

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.properties b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.properties
index 67dc722..7cdad5a 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.properties
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/plugin/DiscoveryUIMessages.properties
@@ -47,6 +47,7 @@
 

 SearchConsoleView_EnterKeywordHint=Enter keyword

 SearchConsoleView_NoDestinationSelectedHint=Select destination to enable

+SearchConsoleView_NoObjectTypeSelectedHint=Select search type to enable
 SearchConsoleView_UnsupportedTextSearch=Text search not supported 

 

 SearchConsoleView_SearchResultsAvailable=Search has finished but the results are not visible\nResize results area to reveal them

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/ComboSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/ComboSelector.java
index 02bac7f..f1c4361 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/ComboSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/ComboSelector.java
@@ -10,29 +10,29 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.selector;

 

-import java.util.Collection;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.ComboViewer;

-import org.eclipse.jface.viewers.IBaseLabelProvider;

-import org.eclipse.jface.viewers.ISelectionChangedListener;

-import org.eclipse.jface.viewers.IStructuredContentProvider;

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.platform.discovery.core.internal.ISingleValueSelector;

-import org.eclipse.platform.discovery.runtime.api.IDisplayableObject;

-import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectLabelProvider;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectsContentProvider;

-import org.eclipse.platform.discovery.ui.internal.view.impl.IControlValueSelector;

-import org.eclipse.swt.SWT;

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

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

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

-import org.eclipse.swt.widgets.Combo;

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

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

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

-import org.eclipse.ui.forms.widgets.FormToolkit;

+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.platform.discovery.core.internal.ISingleValueSelector;
+import org.eclipse.platform.discovery.runtime.api.IDisplayableObject;
+import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectLabelProvider;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectsContentProvider;
+import org.eclipse.platform.discovery.ui.internal.view.impl.IControlValueSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 

 

 /**

@@ -57,7 +57,7 @@
 	 * @param secondColumnPosition

 	 *            "Y" position of the combo left side

 	 */

-	public ComboSelector(final Composite parent, final FormToolkit formToolkit, final Set<T> input, final String comboLabel, final int secondColumnPosition, final Control upperNeighbour)

+	public ComboSelector(final Composite parent, final FormToolkit formToolkit, final List<T> input, final String comboLabel, final int secondColumnPosition, final Control upperNeighbour)

 	{

 		comboLabelControl =  new Label(parent, SWT.FLAT);

 		final FormData comboLabelFormData = new FormData();

@@ -99,7 +99,7 @@
 		comboViewer.setInput(input);

 	}

 

-	private ComboViewer createComboViewer(final Composite parent, FormToolkit formToolkit, final Set<T> input)

+	private ComboViewer createComboViewer(final Composite parent, FormToolkit formToolkit, final List<T> input)

 	{

 		final ComboViewer viewer = new ComboViewer(parent, SWT.READ_ONLY | SWT.SINGLE );

 		viewer.setLabelProvider(comboLabelProvider());

@@ -112,7 +112,7 @@
 	/**

 	 * Get the content provider for the combo box

 	 */

-	protected IStructuredContentProvider comboContentProvider(final Set<T> input)

+	protected IStructuredContentProvider comboContentProvider(final List<T> input)

 	{

 		return new DisplayableObjectsContentProvider<T>(input);

 	}

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/InteractiveComboSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/InteractiveComboSelector.java
index ee3464e..9dc95c5 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/InteractiveComboSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/InteractiveComboSelector.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.ui.internal.selector;

 

 import java.util.Collection;

+import java.util.List;
 import java.util.Set;

 

 import org.eclipse.jface.viewers.ISelectionChangedListener;

@@ -45,7 +46,7 @@
 	 *            the parent composite. DO NOTE that it will be set to invisible in case empty input is specified

 	 * @see ComboSelector#ComboSelector(Composite, FormToolkit, Set, String, int)

 	 */

-	public InteractiveComboSelector(final Composite parent, final FormToolkit formToolkit, final Set<T> input, final String comboLabel, final int secondColumnPosition, final Control upperNeighbour)

+	public InteractiveComboSelector(final Composite parent, final FormToolkit formToolkit, final List<T> input, final String comboLabel, final int secondColumnPosition, final Control upperNeighbour)

 	{

 		super(parent, formToolkit, input, comboLabel, secondColumnPosition, upperNeighbour);

 		this.lastKnownSelectedItem = new Property<T>();

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
index 4bdc218..841bc67 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SearchDestinationsSelector.java
@@ -10,34 +10,35 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.selector;

 

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.ISelectionChangedListener;

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.jface.viewers.SelectionChangedEvent;

-import org.eclipse.jface.viewers.StructuredSelection;

-import org.eclipse.jface.viewers.TreeViewer;

-import org.eclipse.platform.discovery.core.internal.selectors.IStatefulItemsSelector;

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;

-import org.eclipse.platform.discovery.ui.internal.view.IGetControlObject;

-import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsContentProvider;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsLabelProvider;

-import org.eclipse.platform.discovery.util.internal.property.IPropertyAttributeListener;

-import org.eclipse.platform.discovery.util.internal.property.Property;

-import org.eclipse.platform.discovery.util.internal.property.PropertyAttributeChangedEvent;

-import org.eclipse.swt.SWT;

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

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

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

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

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

-import org.eclipse.ui.forms.widgets.FormToolkit;

+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.platform.discovery.core.internal.selectors.IItemSelector;
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;
+import org.eclipse.platform.discovery.ui.internal.view.IGetControlObject;
+import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsContentProvider;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsLabelProvider;
+import org.eclipse.platform.discovery.util.internal.property.IPropertyAttributeListener;
+import org.eclipse.platform.discovery.util.internal.property.Property;
+import org.eclipse.platform.discovery.util.internal.property.PropertyAttributeChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 

 

 /**

@@ -46,7 +47,7 @@
  * @author Danail Branekov

  * 

  */

-public abstract class SearchDestinationsSelector implements IStatefulItemsSelector<ISearchDestination, IDestinationCategoryDescription>, IGetControlObject<Control>

+public abstract class SearchDestinationsSelector implements IItemSelector<ISearchDestination, IDestinationCategoryDescription>, IGetControlObject<Control>

 {

 	private final TreeViewer destinationsTreeViewer;

 	private final Property<IStructuredSelection> lastKnownSelection;

@@ -75,18 +76,15 @@
 		destinationsTreeViewer.getControl().setLayoutData(searchInFormData);

 	}

 

-	public Set<ISearchDestination> getSelectedItems()

+	public ISearchDestination getSelectedItem()

 	{

 		final Object selectedObject = ((IStructuredSelection) destinationsTreeViewer.getSelection()).getFirstElement();

 		if (selectedObject instanceof IDestinationCategoryDescription)

 		{

-			return new HashSet<ISearchDestination>();

+			return null;

 		}

 

-		final Set<ISearchDestination> result = new HashSet<ISearchDestination>();

-		result.add((ISearchDestination) selectedObject);

-

-		return result;

+		return (ISearchDestination) selectedObject;

 	}

 	

 	private TreeViewer createDestinationsTreeViewer(final Composite parent)

@@ -95,9 +93,9 @@
 		viewer.setContentProvider(new DestinationsContentProvider()

 		{

 			@Override

-			protected Set<ISearchDestination> getSearchDestinationsForCategory(final IDestinationCategoryDescription category)

+			protected List<ISearchDestination> getSearchDestinationsForCategory(final IDestinationCategoryDescription category)

 			{

-				final Set<ISearchDestination> result = new HashSet<ISearchDestination>();

+				final List<ISearchDestination> result = new ArrayList<ISearchDestination>();

 				for(IDestinationsProvider destinationsProvider : getDestinationProvidersForCategory(category))

 				{

 					result.addAll(getSearchDestinations(category, destinationsProvider));

@@ -116,7 +114,7 @@
 				// Also, empty selection can happen only via API - the user is not capable of delesecting everything

 				if(event.getSelection().isEmpty())

 				{

-					handleSelectionChange(new HashSet<ISearchDestination>());

+					handleSelectionChange(null);

 					return;

 				}

 				lastKnownSelection.set((IStructuredSelection) event.getSelection());

@@ -131,8 +129,9 @@
 	public Control getControl() {

 		return destinationsTreeViewer.getControl();

 	}

-

-	public void setInput(Set<IDestinationCategoryDescription> input)

+
+	@Override

+	public void setInput(List<IDestinationCategoryDescription> input)

 	{

 		updateInternal(input);

 	}

@@ -140,10 +139,10 @@
 	@SuppressWarnings("unchecked")

 	public void update()

 	{

-		updateInternal((Set<IDestinationCategoryDescription>) destinationsTreeViewer.getInput());

+		updateInternal((List<IDestinationCategoryDescription>) destinationsTreeViewer.getInput());

 	}

 	

-	private void updateInternal(final Set<IDestinationCategoryDescription> input)

+	private void updateInternal(final List<IDestinationCategoryDescription> input)

 	{

 		destinationsTreeViewer.setInput(input);

 		refreshAndExpandTreeViewer(destinationsTreeViewer);

@@ -202,7 +201,7 @@
 	protected abstract Set<IDestinationsProvider> getDestinationProvidersForCategory(final IDestinationCategoryDescription category);

 

 	/**

-	 * Retrieves a set of search destinations which are relevant to the destination category and destination provider specified

+	 * Retrieves a list of search destinations which are relevant to the destination category and destination provider specified

 	 * 

 	 * @param category

 	 *            the destination category

@@ -210,24 +209,22 @@
 	 *            the destinations provider

 	 * @return a set of search destinations

 	 */

-	protected abstract Set<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category,

+	protected abstract List<ISearchDestination> getSearchDestinations(final IDestinationCategoryDescription category,

 									final IDestinationsProvider destinationsProvider);

 	

 	private class SelectionChangedListener implements IPropertyAttributeListener<IStructuredSelection>

 	{

-		@SuppressWarnings("unchecked")

 		@Override

 		public void attributeChanged(final PropertyAttributeChangedEvent<IStructuredSelection> event)

 		{

 			final IStructuredSelection selection = event.getNewAttribute();

 			if (selection.isEmpty() || !(selection.getFirstElement() instanceof ISearchDestination))

 			{

-				handleSelectionChange(new HashSet<ISearchDestination>());

+				handleSelectionChange(null);

 				return;

 			}

 

-			final Set<ISearchDestination> destinations = new HashSet<ISearchDestination>((List<ISearchDestination>) selection.toList());

-			handleSelectionChange(destinations);

+			handleSelectionChange((ISearchDestination)selection.getFirstElement());

 		}

 	}

 	

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SubdestinationsSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SubdestinationsSelector.java
index 457edcc..0154acf 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SubdestinationsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/selector/SubdestinationsSelector.java
@@ -10,29 +10,28 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.selector;

 

-import java.util.Arrays;

-import java.util.Collection;

-import java.util.Collections;

-import java.util.Comparator;

-import java.util.Iterator;

-import java.util.LinkedHashMap;

-import java.util.Map.Entry;

-import java.util.Set;

-

-import org.eclipse.jface.window.ToolTip;

-import org.eclipse.platform.discovery.core.internal.selectors.IStartableItemsSelector;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.SelectionEvent;

-import org.eclipse.swt.events.SelectionListener;

-import org.eclipse.swt.graphics.Point;

-import org.eclipse.swt.layout.GridLayout;

-import org.eclipse.swt.widgets.Button;

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

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

-import org.eclipse.swt.widgets.Event;

-import org.eclipse.ui.forms.ManagedForm;

-import org.eclipse.ui.forms.widgets.FormToolkit;

+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.eclipse.jface.window.ToolTip;
+import org.eclipse.platform.discovery.core.internal.selectors.IStartableItemsSelector;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 

 

 /**

@@ -48,7 +47,7 @@
  */

 public abstract class SubdestinationsSelector extends ToolTip implements IStartableItemsSelector<ISearchSubdestination>

 {

-	private final Set<ISearchSubdestination> subDestinations;

+	private final List<ISearchSubdestination> subDestinations;

 

 	private final Point showPoint;

 

@@ -56,11 +55,11 @@
 	

 	private ManagedForm _managedForm;

 

-	public SubdestinationsSelector(Control control, int style, final Set<ISearchSubdestination> subDestinations, final Point showPoint)

+	public SubdestinationsSelector(Control control, int style, final List<ISearchSubdestination> subDestinations, final Point showPoint)

 	{

 		super(control, style, true);

 		this.setHideOnMouseDown(false);

-		this.subDestinations = Collections.unmodifiableSet(subDestinations);

+		this.subDestinations = Collections.unmodifiableList(subDestinations);

 		this.showPoint = showPoint;

 		allButtons = new LinkedHashMap<Button, ISearchSubdestination>();

 	}

@@ -108,7 +107,7 @@
 		iter.next().setFocus();

 	}

 

-	protected Collection<ISearchSubdestination> sortSubdestinations(final Set<ISearchSubdestination> subdestinations)

+	protected List<ISearchSubdestination> sortSubdestinations(final List<ISearchSubdestination> subdestinations)

 	{

 		final ISearchSubdestination[] sortedSubdestinations = new ISearchSubdestination[subdestinations.size()];

 		Arrays.sort(subdestinations.toArray(sortedSubdestinations), new Comparator<ISearchSubdestination>()

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java
new file mode 100644
index 0000000..5807ce1
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/ISearchProviderSelector.java
@@ -0,0 +1,52 @@
+package org.eclipse.platform.discovery.ui.internal.view;

+

+import java.util.List;

+

+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;

+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

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

+

+public interface ISearchProviderSelector extends IGetControlObject<Composite> {

+	/**

+	 * The context via which search parameters communicate with the search console input parameters section

+	 */

+	public interface IConsoleContext

+	{

+		/**

+		 * Notifies the console that the search can be performed (i.e. the user provided sufficient input data)

+		 */

+		public void notifyComplete(final boolean complete);

+		

+		/**

+		 * The console aligns its fixed parameters UI (object type, search destination) in two columns. The digit returned by this method represents the 

+		 * relative offset at which the second column starts. Contributors may have this value in mind in order to align their custom user interface gracefully 

+		 */

+		public int secondColumnLeftOffset();

+		

+		/**

+		 * Provides the console search provider configuration; never null

+		 * @see ISearchProviderConfiguration

+		 */

+		public ISearchProviderConfiguration searchProviderConfiguration();

+	}

+	

+	

+	

+	public IObjectTypeDescription getSelectedObjectType();

+

+	public ISearchDestination getSelectedDestination();

+	

+	public ISearchProviderDescription getSelectedSearchProvider();

+	

+	public void setObjectTypes(final List<IObjectTypeDescription> objectTypes);

+

+	public void setDestinations(List<IDestinationCategoryDescription> categories);

+

+	public void updateDestinationsUI();

+

+	public void setController(ISearchConsoleController controller);

+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
index a9f7e54..de70f8c 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchConsoleView.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.ui.internal.view;

 

 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -18,17 +19,12 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.platform.discovery.core.api.ISearchContext;
 import org.eclipse.platform.discovery.core.api.SearchEvent;
 import org.eclipse.platform.discovery.core.internal.ISearchConsoleView;
 import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;
 import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
 import org.eclipse.platform.discovery.runtime.api.GroupingHierarchy;
-import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;
 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
 import org.eclipse.platform.discovery.runtime.api.ISearchParameters;
 import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
@@ -55,13 +51,9 @@
 import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;
 import org.eclipse.platform.discovery.ui.internal.search.advancedparams.AdvancedSearchParamsDisplayer;
 import org.eclipse.platform.discovery.ui.internal.search.advancedparams.IAdvancedSearchParamsDisplayer;
-import org.eclipse.platform.discovery.ui.internal.selector.ComboSelector;
 import org.eclipse.platform.discovery.ui.internal.util.ControlBackgroundImageManager;
 import org.eclipse.platform.discovery.ui.internal.view.impl.AbstractDiscoveryView;
-import org.eclipse.platform.discovery.ui.internal.view.impl.IControlValueSelector;
 import org.eclipse.platform.discovery.ui.internal.view.impl.ITabbedSessionDisplayer;
-import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleDestinationsSelector;
-import org.eclipse.platform.discovery.ui.internal.view.impl.SearchForSelectionChangeListener;
 import org.eclipse.platform.discovery.ui.internal.view.impl.SearchParameters;
 import org.eclipse.platform.discovery.ui.internal.view.result.impl.ContributedUIFactory;
 import org.eclipse.platform.discovery.ui.internal.view.result.impl.TabbedSessionDisplayer;
@@ -84,7 +76,6 @@
 import org.eclipse.swt.layout.FormData;
 import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Event;
@@ -120,9 +111,9 @@
 	 * Constant for identifying the gap between UI controls in form layouts

 	 */

 	public static final int UI_IN_CONTROL_SPACING = 5;

+	
+	private ISearchProviderSelector searchProviderSelector;
 	

-	private IControlValueSelector<IObjectTypeDescription, Combo> searchForComboViewer;

-	private SearchConsoleDestinationsSelector destinationsSelector;

 	private IAdvancedSearchParamsDisplayer advancedSearchParamsDisplayer;

 	private ITabbedSessionDisplayer<ISearchContext> sdm;

 	private IProgressMonitor viewProgressMonitor;

@@ -242,18 +233,20 @@
 			this.bottomComposite.setFocus();

 		}

 	}

-

-	public void showDestinationsCategories(Set<IDestinationCategoryDescription> categories)

-	{

-		destinationsSelector.setEnabled(categories.size() > 0);

-		destinationsSelector.setInput(categories);

+
+	@Override

+	public void showDestinationsCategories(List<IDestinationCategoryDescription> categories)

+	{
+		searchProviderSelector.setDestinations(categories);

 	}

-

-	public void showObjectTypes(Set<IObjectTypeDescription> objectTypes)

+
+	@Override

+	public void showObjectTypes(List<IObjectTypeDescription> objectTypes)

 	{

-		searchForComboViewer.setInput(objectTypes);

+		searchProviderSelector.setObjectTypes(objectTypes);

 	}

-

+
+	@Override

 	public void showResult(final ISearchContext searchContext)

 	{

 		final String sessionId = searchContext.session().getId();

@@ -277,65 +270,6 @@
 		super.registerViewCustomization(customization);

 	}

 	

-	/**

-	 * Creates the "search for" composite. It contains

-	 * <ul>

-	 * <li>The "search for" label</li>

-	 * <li>The "search for" list viewer</li>

-	 * </ul>

-	 * @param secondColumnPosition the "x" position of the second column 

-	 */

-	private void createSearchForComposite(final Composite parent, final FormToolkit formToolkit, final int secondColumnPosition)

-	{

-		searchForComboViewer = new ComboSelector<IObjectTypeDescription>(parent, formToolkit, getSearchProviderConfiguration().getObjectTypes(), DiscoveryUIMessages.SEARCH_FOR_LIST_VIEWER_LABEL, secondColumnPosition, null );

-		searchForComboViewer.registerSelectionChangedListener(new SearchForSelectionChangeListener(){

-			@Override

-			protected void objectTypeSelected(IObjectTypeDescription objectType)

-			{

-				SearchConsoleView.this.controller.objectTypeSelected(objectType);				

-			}

-		});

-	}

-

-	/**

-	 * Creates the "search in" composite. It contains

-	 * <ul>

-	 * <li>The "search in" label</li>

-	 * <li>The "search in" list viewer</li>

-	 * </ul>

-	 * @param secondColumnPosition the "x" position of the second column 

-	 */

-	private void createSearchInComposite(final Composite parent, final FormToolkit formToolkit, final int secondColumnPosition, final Control offset)

-	{

-		destinationsSelector = new SearchConsoleDestinationsSelector(parent, formToolkit, secondColumnPosition, offset, getSearchProviderConfiguration())

-		{

-			public void handleSelectionChange(final Set<ISearchDestination> newSelection)

-			{
-				searchParametersUI.destinationSelected(newSelection);
-

-				advancedSearchParamsDisplayer.update(getSelectedObjectType(), newSelection.isEmpty() ? null : newSelection.iterator().next(), getEnvironment(), uiContext());

-				advancedSearchParamsComposite.setLayoutData(createAdvancedOptionsFormData(fixedSearchParamComposite, currentOrientation.get(), advancedSearchParamsDisplayer.isEnabled()));

-				if (newSelection.isEmpty() || getSelectedActiveSearchProviderDescription() == null)

-				{

-					SearchConsoleView.this.controller.searchDestinationSelected(searchForComboViewer.getSelectedItem(), null);

-				} else

-				{

-					SearchConsoleView.this.controller.searchDestinationSelected(searchForComboViewer.getSelectedItem(), newSelection.iterator().next());

-				}

-				upperComposite.layout(true, true);

-			}

-

-		};

-		destinationsSelector.registerDestinationsChangeHandler(new IDestinationChangeHandler()

-		{

-			@Override

-			public void handleDestinationsChange()

-			{

-				controller.searchDestinationsChanged();

-			}

-		});

-		destinationsSelector.setEnabled(false);

-	}

 

 	private void createHyperLink(final Composite parent, final FormToolkit formToolkit)

 	{

@@ -365,7 +299,7 @@
 		});

 		

 		final FormData linkFormData = new FormData();

-		linkFormData.top = new FormAttachment(destinationsSelector.getControl(), UI_IN_CONTROL_SPACING);

+		linkFormData.top = new FormAttachment(searchProviderSelector.getControl(), UI_IN_CONTROL_SPACING);

 		linkFormData.right = new FormAttachment(100, -UI_IN_CONTROL_SPACING);

 		manageConfigurationHyperlink.setLayoutData(linkFormData);

 

@@ -381,9 +315,41 @@
 		fixedSearchParamComposite  = new Composite(this.upperComposite, SWT.NONE);
 		fixedSearchParamComposite.setLayout(new FormLayout());

 		fixedSearchParamComposite.setLayoutData(createFixedParamsFormData(currentOrientation.get()));

+		
+		final ISearchProviderSelector.IConsoleContext selectorContext = new ISearchProviderSelector.IConsoleContext() {
+			
+			@Override
+			public int secondColumnLeftOffset() {
+				return leftLabelsSize;
+			}
+			
+			@Override
+			public ISearchProviderConfiguration searchProviderConfiguration() {
+				return getSearchProviderConfiguration();
+			}
+			
+			@Override
+			public void notifyComplete(boolean complete) {
+				final ISearchProviderDescription selectedProvider = searchProviderSelector.getSelectedSearchProvider();
+				final ISearchDestination selectedDestination = searchProviderSelector.getSelectedDestination();
+				searchParametersUI.searchProviderSelected(selectedProvider);
+
+				advancedSearchParamsDisplayer.update(getSelectedObjectType(), selectedDestination, getEnvironment(), uiContext());
+				advancedSearchParamsComposite.setLayoutData(createAdvancedOptionsFormData(fixedSearchParamComposite, currentOrientation.get(), advancedSearchParamsDisplayer.isEnabled()));
+				if (selectedDestination == null || getSelectedActiveSearchProviderDescription() == null)
+				{
+					controller.searchDestinationSelected(searchProviderSelector.getSelectedObjectType(), null);
+				} else
+				{
+					controller.searchDestinationSelected(searchProviderSelector.getSelectedObjectType(), selectedDestination);
+				}
+				upperComposite.layout(true, true);
+			}
+		};
+		
+		searchProviderSelector = new SearchProviderSelector(fixedSearchParamComposite, formToolkit, selectorContext);
+		searchProviderSelector.getControl().setLayoutData(createSearchProviderSelectorLayoutData());
 		

-		createSearchForComposite(fixedSearchParamComposite, formToolkit, leftLabelsSize);

-		createSearchInComposite(fixedSearchParamComposite, formToolkit, leftLabelsSize, searchForComboViewer.getControl());

 		createHyperLink(fixedSearchParamComposite, formToolkit);
 		createSearchParametersUI(fixedSearchParamComposite, formToolkit);
 		
@@ -397,12 +363,18 @@
 		searchButton.setLayoutData(buttonData);

 		searchButton.setEnabled(false);

 		

-		installSearchForSelectionChangeListener();

 		installSearchButtonListener();

 	

 		upperComposite.layout();
 	}
 	
+	private FormData createSearchProviderSelectorLayoutData() {
+		final FormData data = new FormData();
+		data.left = new FormAttachment(0, 0);
+		data.right = new FormAttachment(100, 0);
+		return data;
+	}
+
 	private void createSearchParametersUI(final Composite parent, final FormToolkit toolkit)
 	{
 		final Composite searchParametersUIComposite = new Composite(parent, SWT.NONE);// formToolkit.createComposite(parent);
@@ -564,7 +536,12 @@
 		final Set<ISearchSubdestination> result = new HashSet<ISearchSubdestination>();

 		final IObjectTypeDescription objectType = getSelectedObjectType();

 		final IDestinationCategoryDescription category = getDestinationCategory(getSelectedDestination());

-		final ISearchProviderDescription searchProvider = getSearchProviderConfiguration().getActiveSearchProvider(objectType, category);

+		final ISearchProviderDescription searchProvider = getSearchProviderConfiguration().getActiveSearchProvider(objectType, category);
+		if(searchProvider == null)
+		{
+			return Collections.emptySet();
+		}
+		

 		for(ISearchSubdestination subd : getSearchProviderConfiguration().getAvailableSearchSubdestinations(objectType, category, searchProvider))

 		{

 			if(getSearchProviderConfiguration().isSubdestinationActive(subd, objectType, category, searchProvider))

@@ -589,33 +566,6 @@
 	}
 	

 	

-	/**

-	 * Installs the "search for" selection change listener which is notified when object type selection changes

-	 */

-	private void installSearchForSelectionChangeListener()

-	{

-		searchForComboViewer.registerSelectionChangedListener(new ISelectionChangedListener()

-		{

-			public void selectionChanged(SelectionChangedEvent event)

-			{

-				final IObjectTypeDescription objectType = getObjectType(event);

-				//destinationsSelector.setEnabled(objectType != null);

-				SearchConsoleView.this.controller.objectTypeSelected(objectType);

-			}

-			

-			private IObjectTypeDescription getObjectType(final SelectionChangedEvent event)

-			{

-				assert event.getSelection() instanceof IStructuredSelection;

-				

-				if(event.getSelection().isEmpty())

-				{

-					return null;

-				}

-				return (IObjectTypeDescription)((StructuredSelection)event.getSelection()).iterator().next();

-			}

-		});

-	}

-

 	private void installSearchButtonListener()

 	{

 		searchButton.addSelectionListener(new SelectionAdapter()

@@ -652,7 +602,7 @@
 	 */

 	private IObjectTypeDescription getSelectedObjectType()

 	{

-		return searchForComboViewer.getSelectedItem();

+		return searchProviderSelector.getSelectedObjectType();

 	}

 

 	/**

@@ -660,11 +610,7 @@
 	 */

 	private ISearchDestination getSelectedDestination()

 	{

-		if (destinationsSelector.getSelectedItems().size() == 0)

-		{

-			return null;

-		}

-		return destinationsSelector.getSelectedItems().iterator().next();

+		return searchProviderSelector.getSelectedDestination();

 	}

 

 	/**

@@ -674,27 +620,16 @@
 	{

 		try

 		{

-			final IDestinationCategoryDescription destCategory = getSelectedDestinationCategory();

-			if(destCategory == null)

-			{

-				return null;

-			}

-											

-			return getSearchProviderConfiguration().getActiveSearchProvider(getSelectedObjectType(), destCategory);

+			return getSearchProviderConfiguration().getActiveSearchProvider(getSelectedObjectType(), getSelectedDestinationCategory());

 		} catch (ProviderNotFoundException e)

 		{

 			return null;

 		}

 	}

 

-	public void registerDestinationsChangeHandler(final IDestinationChangeHandler destChangeHandler)

-	{

-		destinationsSelector.registerDestinationsChangeHandler(destChangeHandler);

-	}

-

 	public void updateDestinationsSelector()

-	{

-		destinationsSelector.update();

+	{
+		searchProviderSelector.updateDestinationsUI();

 	}

 	

 	private int getLongestLabelSize(final List<String> labels)

@@ -745,9 +680,14 @@
 	}

 

 	private IDestinationCategoryDescription getDestinationCategory(ISearchDestination destination)

-	{

+	{
+		if(destination == null)
+		{
+			return null;
+		}
+		

 		try

-		{

+		{
 			return getSearchProviderConfiguration().getDestinationCategoriesForDestination(destination).iterator().next();

 		} catch (DestinationCategoryNotFoundException e)

 		{

@@ -755,7 +695,7 @@
 		}

 	}

 	

-	public void showGroupingHierarchies(final Set<GroupingHierarchy> groupingHierarchies)

+	public void showGroupingHierarchies(final List<GroupingHierarchy> groupingHierarchies)

 	{
 		searchParametersUI.showGroupingHierarchies(groupingHierarchies);

 	}

@@ -830,7 +770,8 @@
 	@Override

 	public void registerController(final ISearchConsoleController controller)

 	{

-		this.controller = controller;

+		this.controller = controller;
+		searchProviderSelector.setController(controller);

 	}

 

 	@Override

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesItemsAdder.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesItemsAdder.java
index f5522c7..dfcdb82 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesItemsAdder.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesItemsAdder.java
@@ -10,23 +10,24 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view;

 

-import java.util.Collection;

-import java.util.HashSet;

-import java.util.Iterator;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
 

 

 public abstract class SearchFavoritesItemsAdder implements ISearchFavoritesItemsAdder

 {

-	private final Set<ISearchFavoritesViewCustomization> viewCustomizations;

+	private final List<ISearchFavoritesViewCustomization> viewCustomizations;

 	private final ILongOperationRunner opRunner;

 

-	public SearchFavoritesItemsAdder(final Set<ISearchFavoritesViewCustomization> viewCustomizations, final ILongOperationRunner opRunner)

+	public SearchFavoritesItemsAdder(final List<ISearchFavoritesViewCustomization> viewCustomizations, final ILongOperationRunner opRunner)

 	{

 		this.viewCustomizations = viewCustomizations;

 		this.opRunner = opRunner;

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesView.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesView.java
index 610ee11..7f074fe 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesView.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchFavoritesView.java
@@ -125,7 +125,7 @@
 		return new DiscoveryTreeViewerFactory()

 		{

 			@Override

-			protected ITreeContentProvider contentProvider(final Set<IGenericViewCustomization> viewCustomizations)

+			protected ITreeContentProvider contentProvider(final List<IGenericViewCustomization> viewCustomizations)

 			{

 				return new FavoritesContentProvider(viewCustomizations);

 			}

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java
new file mode 100644
index 0000000..5a9d8de
--- /dev/null
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/SearchProviderSelector.java
@@ -0,0 +1,190 @@
+package org.eclipse.platform.discovery.ui.internal.view;

+

+import java.util.List;

+import java.util.Set;

+

+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;

+import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;

+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

+import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;

+import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

+import org.eclipse.platform.discovery.ui.internal.plugin.DiscoveryUIMessages;

+import org.eclipse.platform.discovery.ui.internal.selector.ComboSelector;

+import org.eclipse.platform.discovery.ui.internal.view.impl.IControlValueSelector;

+import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleDestinationsSelector;

+import org.eclipse.platform.discovery.ui.internal.view.impl.SearchForSelectionChangeListener;

+import org.eclipse.swt.SWT;

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

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

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

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

+import org.eclipse.ui.forms.widgets.FormToolkit;

+

+public class SearchProviderSelector implements ISearchProviderSelector {

+	

+	private IControlValueSelector<IObjectTypeDescription, Combo> searchForComboViewer;

+	private SearchConsoleDestinationsSelector destinationsSelector;

+	

+	private ISearchConsoleController controller;

+	private final ISearchProviderSelector.IConsoleContext consoleContext;

+	private final Composite selectorComposite;

+	

+	@Override

+	public void setController(ISearchConsoleController controller) {

+		this.controller = controller;

+	}

+

+	public SearchProviderSelector(Composite parent, FormToolkit toolkit, ISearchProviderSelector.IConsoleContext consoleContext){

+		this.consoleContext = consoleContext;

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

+		this.selectorComposite.setLayout(new FormLayout());

+		createSearchForViewer(toolkit);

+		createDestinationsSelector(toolkit);

+	}

+

+

+	/**

+	 * Creates the "search for" composite. It contains

+	 * <ul>

+	 * <li>The "search for" label</li>

+	 * <li>The "search for" list viewer</li>

+	 * </ul>

+	 * @param secondColumnPosition the "x" position of the second column 

+	 */

+	private void createSearchForViewer(FormToolkit toolkit) {

+		searchForComboViewer = new ComboSelector<IObjectTypeDescription>(this.selectorComposite, toolkit, getObjectTypes(), DiscoveryUIMessages.SEARCH_FOR_LIST_VIEWER_LABEL, consoleContext.secondColumnLeftOffset(), null );

+		searchForComboViewer.registerSelectionChangedListener(new SearchForSelectionChangeListener(){

+			@Override

+			protected void objectTypeSelected(IObjectTypeDescription objectType)

+			{

+				controller.objectTypeSelected(objectType);

+				consoleContext.notifyComplete(isSearchProviderAvailable(objectType, destinationsSelector.getSelectedItem()));

+			}

+		});

+	}

+	

+	/**

+	 * Creates the "search in" composite. It contains

+	 * <ul>

+	 * <li>The "search in" label</li>

+	 * <li>The "search in" list viewer</li>

+	 * </ul>

+	 * @param secondColumnPosition the "x" position of the second column 

+	 * @param searchParametersUI 

+	 */

+	private void createDestinationsSelector(FormToolkit toolkit) {

+		destinationsSelector = new SearchConsoleDestinationsSelector(this.selectorComposite, toolkit, consoleContext.secondColumnLeftOffset(), searchForComboViewer.getControl(), consoleContext.searchProviderConfiguration())

+		{

+			public void handleSelectionChange(final ISearchDestination newSelection)

+			{

+				final IObjectTypeDescription selectedObjectType = searchForComboViewer.getSelectedItem();

+				if(selectedObjectType == null)

+				{

+					return;

+				}

+

+				consoleContext.notifyComplete(isSearchProviderAvailable(selectedObjectType, newSelection));

+			}

+

+		};

+		destinationsSelector.registerDestinationsChangeHandler(new IDestinationChangeHandler()

+		{

+			@Override

+			public void handleDestinationsChange()

+			{

+				controller.searchDestinationsChanged();

+			}

+		});

+		destinationsSelector.setEnabled(false);

+	}

+	

+	private List<IObjectTypeDescription> getObjectTypes() {

+		return consoleContext.searchProviderConfiguration().getObjectTypes();

+	}

+	

+	@Override

+	public void setDestinations(List<IDestinationCategoryDescription> categories) {

+		destinationsSelector.setEnabled(categories.size() > 0);

+		destinationsSelector.setInput(categories);

+	}

+

+	public void setObjectTypes(Set<IObjectTypeDescription> objectTypes) {

+		searchForComboViewer.setInput(objectTypes);

+	}

+

+	public Control getDestinationsControl() {

+		return destinationsSelector.getControl();

+	}

+

+

+	/* (non-Javadoc)

+	 * @see org.eclipse.platform.discovery.ui.internal.view.ISearchProviderSelector#getSelectedObjectType()

+	 */

+	@Override

+	public IObjectTypeDescription getSelectedObjectType() {

+		return searchForComboViewer.getSelectedItem();

+	}

+

+

+	/* (non-Javadoc)

+	 * @see org.eclipse.platform.discovery.ui.internal.view.ISearchProviderSelector#getSelectedDestination()

+	 */

+	@Override

+	public ISearchDestination getSelectedDestination() {

+		return destinationsSelector.getSelectedItem();

+	}

+

+	@Override

+	public void updateDestinationsUI() {

+		destinationsSelector.update();

+	}

+

+

+	@Override

+	public ISearchProviderDescription getSelectedSearchProvider() {

+		return getSelectedSearchProvider(searchForComboViewer.getSelectedItem(), destinationsSelector.getSelectedItem());

+	}

+

+	private ISearchProviderDescription getSelectedSearchProvider(final IObjectTypeDescription selectedObjectType, final ISearchDestination selectedDestination) {

+		if(selectedObjectType == null)

+		{

+			return null;

+		}

+		try {

+			return consoleContext.searchProviderConfiguration().getActiveSearchProvider(selectedObjectType, getSelectedCategory(destinationsSelector.getSelectedItem()));

+		} catch (ProviderNotFoundException e) {

+			return null;

+		}

+	}

+

+	@Override

+	public void setObjectTypes(List<IObjectTypeDescription> objectTypes) {

+		searchForComboViewer.setInput(objectTypes);

+	}

+	

+	private boolean isSearchProviderAvailable(final IObjectTypeDescription selectedObjectType, final ISearchDestination selectedDestination) {

+		return getSelectedSearchProvider(selectedObjectType, selectedDestination) != null;

+	}

+	

+	private IDestinationCategoryDescription getSelectedCategory(final ISearchDestination selectedDestination)

+	{

+		if(selectedDestination == null)

+		{

+			return null;

+		}

+		

+		try {

+			return consoleContext.searchProviderConfiguration().getDestinationCategoriesForDestination(selectedDestination).iterator().next();

+		} catch (DestinationCategoryNotFoundException e) {

+			throw new IllegalStateException(e);

+		}

+	}

+

+	@Override

+	public Composite getControl() {

+		return this.selectorComposite;

+	}

+}

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/favorites/FavoritesContentProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/favorites/FavoritesContentProvider.java
index 5e79994..b9c7da4 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/favorites/FavoritesContentProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/favorites/FavoritesContentProvider.java
@@ -10,8 +10,10 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.favorites;

 

+import java.util.ArrayList;
 import java.util.HashMap;

 import java.util.HashSet;

+import java.util.List;
 import java.util.Map;

 import java.util.Set;

 

@@ -31,13 +33,13 @@
  */

 public class FavoritesContentProvider extends GenericResultContentProvider

 {

-	private final Map<Object, Set<Object>> groupsMap;

+	private final Map<Object, List<Object>> groupsMap;

 

-	public FavoritesContentProvider(Set<IGenericViewCustomization> viewCustomizations)

+	public FavoritesContentProvider(List<IGenericViewCustomization> viewCustomizations)

 	{

 		super(viewCustomizations);

 		

-		groupsMap = new HashMap<Object, Set<Object>>();

+		groupsMap = new HashMap<Object, List<Object>>();

 	}

 

 	@Override

@@ -85,10 +87,10 @@
 			return;

 		}

 		

-		Set<Object> groupedItems = groupsMap.get(group);

+		List<Object> groupedItems = groupsMap.get(group);

 		if(groupedItems == null)

 		{

-			groupedItems = new HashSet<Object>();

+			groupedItems = new ArrayList<Object>();

 			groupsMap.put(group, groupedItems);

 		}

 		groupedItems.add(item);

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/AbstractDiscoveryView.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/AbstractDiscoveryView.java
index f070a58..e98fc4d 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/AbstractDiscoveryView.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/AbstractDiscoveryView.java
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.impl;

 

+import java.util.ArrayList;
 import java.util.HashSet;

+import java.util.List;
 import java.util.Set;

 

 import org.eclipse.jface.viewers.ISelectionProvider;

@@ -82,9 +84,9 @@
 		return new SearchConsoleSelectionProvider(new SearchConsoleSelectionProvider.IViewCustomizationsObtainer()

 		{

 			@Override

-			public Set<IGenericViewCustomization> viewCustomizations()

+			public List<IGenericViewCustomization> viewCustomizations()

 			{

-				return AbstractDiscoveryView.this.viewCustomizations();

+				return new ArrayList<IGenericViewCustomization>(AbstractDiscoveryView.this.viewCustomizations());

 			}

 		});

 	}

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DestinationsContentProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DestinationsContentProvider.java
index d2f839c..dad3366 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DestinationsContentProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DestinationsContentProvider.java
@@ -10,11 +10,10 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.impl;

 

+import java.util.ArrayList;
 import java.util.Arrays;

 import java.util.Comparator;

-import java.util.HashSet;

 import java.util.List;

-import java.util.Set;

 

 import org.eclipse.jface.viewers.ITreeContentProvider;

 import org.eclipse.jface.viewers.Viewer;

@@ -30,11 +29,11 @@
  */

 public abstract class DestinationsContentProvider implements ITreeContentProvider

 {

-	private final Set<ISearchDestination> destinations;

+	private final List<ISearchDestination> destinations;

 

 	public DestinationsContentProvider()

 	{

-		destinations = new HashSet<ISearchDestination>();

+		destinations = new ArrayList<ISearchDestination>();

 	}

 

 	public Object[] getChildren(Object parentElement)

@@ -44,7 +43,7 @@
 			return new Object[0];

 		}

 

-		final Set<ISearchDestination> destinations = new HashSet<ISearchDestination>(getSearchDestinationsForCategory((IDestinationCategoryDescription) parentElement));

+		final List<ISearchDestination> destinations = getSearchDestinationsForCategory((IDestinationCategoryDescription) parentElement);

 		return sortSearchDestinations(destinations).toArray();

 	}

 

@@ -61,9 +60,9 @@
 	@SuppressWarnings("unchecked")

 	public Object[] getElements(Object inputElement)

 	{

-		assert inputElement instanceof Set;

+		assert inputElement instanceof List;

 

-		final Set<IDestinationCategoryDescription> categories = (Set<IDestinationCategoryDescription>) inputElement;

+		final List<IDestinationCategoryDescription> categories = (List<IDestinationCategoryDescription>) inputElement;

 		return sortDestinationCategories(categories).toArray();

 	}

 

@@ -79,20 +78,20 @@
 		

 		if(newInput != null)

 		{

-			assert (newInput instanceof Set);

-			destinations.addAll((Set<ISearchDestination>) newInput);

+			assert (newInput instanceof List);

+			destinations.addAll((List<ISearchDestination>) newInput);

 		}

 	}

 

 	/**

 	 * Gets the search destination for the destination category specified

 	 */

-	protected abstract Set<ISearchDestination> getSearchDestinationsForCategory(final IDestinationCategoryDescription category);

+	protected abstract List<ISearchDestination> getSearchDestinationsForCategory(final IDestinationCategoryDescription category);

 

 	/**

 	 * Sorts the specified displayed objects

 	 */

-	protected List<IDestinationCategoryDescription> sortDestinationCategories(final Set<IDestinationCategoryDescription> categories)

+	protected List<IDestinationCategoryDescription> sortDestinationCategories(final List<IDestinationCategoryDescription> categories)

 	{

 		final IDestinationCategoryDescription[] categoriesArr = categories.toArray(new IDestinationCategoryDescription[categories.size()]);

 		Arrays.sort(categoriesArr, new Comparator<IDescriptiveObject>()

@@ -106,7 +105,7 @@
 		return Arrays.asList(categoriesArr);

 	}

 	

-	private List<ISearchDestination> sortSearchDestinations(Set<ISearchDestination> destinations)

+	private List<ISearchDestination> sortSearchDestinations(List<ISearchDestination> destinations)

 	{

 		final ISearchDestination[] destArr = destinations.toArray(new ISearchDestination[destinations.size()]);

 		Arrays.sort(destArr, new Comparator<ISearchDestination>(){

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DisplayableObjectsContentProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DisplayableObjectsContentProvider.java
index b34065d..0614d1e 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DisplayableObjectsContentProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/DisplayableObjectsContentProvider.java
@@ -10,15 +10,14 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.impl;

 

-import java.util.ArrayList;

-import java.util.Collections;

-import java.util.Comparator;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.IStructuredContentProvider;

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

-import org.eclipse.platform.discovery.runtime.api.IDisplayableObject;

+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.platform.discovery.runtime.api.IDisplayableObject;
 

 

 /**

@@ -30,7 +29,7 @@
 

 public class DisplayableObjectsContentProvider<T extends IDisplayableObject> implements IStructuredContentProvider

 {

-	private Set<T> curentInput;

+	private List<T> curentInput;

 

 	/**

 	 * Constructor

@@ -38,7 +37,7 @@
 	 * @param input

 	 *            initial set of {@link IDisplayableObject} which will be provided as elements

 	 */

-	public DisplayableObjectsContentProvider(final Set<T> input)

+	public DisplayableObjectsContentProvider(final List<T> input)

 	{

 		this.curentInput = input;

 	}

@@ -55,10 +54,10 @@
 	@SuppressWarnings("unchecked")

 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput)

 	{

-		curentInput = (Set<T>) newInput;

+		curentInput = (List<T>) newInput;

 	}

 

-	protected Object[] sortElements(final Set<T> elements)

+	protected Object[] sortElements(final List<T> elements)

 	{

 		final List<T> objectsList = new ArrayList<T>(elements);

 		Collections.sort(objectsList, new Comparator<T>()

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
index 9a0c9d5..c4b5c1d 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleDestinationsSelector.java
@@ -13,6 +13,7 @@
 import java.util.Collections;

 import java.util.HashMap;

 import java.util.HashSet;

+import java.util.List;
 import java.util.Map;

 import java.util.Set;

 

@@ -82,13 +83,13 @@
 	}

 

 	@Override

-	protected Set<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category, IDestinationsProvider destinationsProvider)

+	protected List<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category, IDestinationsProvider destinationsProvider)

 	{

 		return this.searchProviderConfig.getSearchDestinations(category, destinationsProvider);

 	}

 

 	@Override

-	public void setInput(Set<IDestinationCategoryDescription> input)

+	public  void setInput(List<IDestinationCategoryDescription> input)

 	{

 		if(this.destinationsChangeHandler == null)

 		{

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleSelectionProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleSelectionProvider.java
index 9844662..45d2458 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleSelectionProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SearchConsoleSelectionProvider.java
@@ -12,6 +12,7 @@
 

 import java.util.HashSet;

 import java.util.Iterator;

+import java.util.List;
 import java.util.Set;

 

 import org.eclipse.jface.viewers.ISelection;

@@ -34,7 +35,7 @@
 	 */

 	public interface IViewCustomizationsObtainer

 	{

-		public Set<IGenericViewCustomization> viewCustomizations();

+		public List<IGenericViewCustomization> viewCustomizations();

 	}

 	

 	public SearchConsoleSelectionProvider(final IViewCustomizationsObtainer customizationsObtainer)

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SubdestinationsSelectedListener.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SubdestinationsSelectedListener.java
index c362256..6522e5e 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SubdestinationsSelectedListener.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/impl/SubdestinationsSelectedListener.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.ui.internal.view.impl;

 

 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
@@ -58,7 +59,7 @@
 

 	public void widgetSelected(SelectionEvent event)

 	{

-		final Set<ISearchSubdestination> subDestinations = consoleContext.searchProviderConfiguration().getAvailableSearchSubdestinations(consoleContext.selectedObjectType(), consoleContext.destinationCategory(), consoleContext.searchProvider());

+		final List<ISearchSubdestination> subDestinations = consoleContext.searchProviderConfiguration().getAvailableSearchSubdestinations(consoleContext.selectedObjectType(), consoleContext.destinationCategory(), consoleContext.searchProvider());

 		final Point showPoint = new Point(event.x, event.y + parentControl.getSize().y);

 

 		final SubdestinationsSelector selector = new SubdestinationsSelector(parentControl, SWT.NONE, subDestinations, showPoint)

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/ContributedUIFactory.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/ContributedUIFactory.java
index 2a69d62..bb2779a 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/ContributedUIFactory.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/ContributedUIFactory.java
@@ -10,25 +10,25 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.result.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.Platform;

-import org.eclipse.jface.viewers.ISelectionChangedListener;

-import org.eclipse.jface.viewers.SelectionChangedEvent;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;

-import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;

-import org.eclipse.platform.discovery.ui.api.impl.ILabeledSelection;

-import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;

-import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;

-import org.eclipse.platform.discovery.ui.internal.view.result.impl.TabbedSessionDisplayer.UI;

-import org.eclipse.platform.discovery.ui.internal.view.result.impl.TabbedSessionDisplayer.UIFactory;

-import org.eclipse.platform.discovery.ui.internal.xp.ICustomResultUiXpParser;

-import org.eclipse.platform.discovery.ui.internal.xp.impl.CustomResultUiXpParser;

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

-import org.eclipse.ui.forms.widgets.FormToolkit;

+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;
+import org.eclipse.platform.discovery.ui.api.impl.ILabeledSelection;
+import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;
+import org.eclipse.platform.discovery.ui.internal.view.SearchConsoleView;
+import org.eclipse.platform.discovery.ui.internal.view.result.impl.TabbedSessionDisplayer.UI;
+import org.eclipse.platform.discovery.ui.internal.view.result.impl.TabbedSessionDisplayer.UIFactory;
+import org.eclipse.platform.discovery.ui.internal.xp.ICustomResultUiXpParser;
+import org.eclipse.platform.discovery.ui.internal.xp.impl.CustomResultUiXpParser;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 

 

 public class ContributedUIFactory implements UIFactory<ISearchContext>

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/DiscoveryTreeViewerFactory.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/DiscoveryTreeViewerFactory.java
index 80b0d10..5bf072f 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/DiscoveryTreeViewerFactory.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/DiscoveryTreeViewerFactory.java
@@ -10,45 +10,46 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.result.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.jface.action.IMenuListener;

-import org.eclipse.jface.action.IMenuManager;

-import org.eclipse.jface.action.IToolBarManager;

-import org.eclipse.jface.action.MenuManager;

-import org.eclipse.jface.viewers.CellLabelProvider;

-import org.eclipse.jface.viewers.IDoubleClickListener;

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

-import org.eclipse.jface.viewers.IStructuredSelection;

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

-import org.eclipse.jface.viewers.StructuredSelection;

-import org.eclipse.jface.viewers.TreeViewer;

-import org.eclipse.platform.discovery.core.api.IContributedAction;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.core.internal.ContextStructuredSelection;

-import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;

-import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;

-import org.eclipse.platform.discovery.ui.internal.tooltip.TooltipCreator;

-import org.eclipse.platform.discovery.ui.internal.tooltip.TreeViewerTooltipManager;

-import org.eclipse.platform.discovery.ui.internal.util.ControlBackgroundImageManager;

-import org.eclipse.platform.discovery.ui.internal.view.SortingMenuManager;

-import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.DragSrcInteractionListener;

-import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.DragSrcListener;

-import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.LocalSelectionTransferSetter;

-import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.XmlDiscoverySelectionTransferSetter;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.dnd.DND;

-import org.eclipse.swt.dnd.DragSourceEvent;

-import org.eclipse.swt.dnd.Transfer;

-import org.eclipse.swt.events.DisposeEvent;

-import org.eclipse.swt.events.DisposeListener;

-import org.eclipse.swt.layout.GridLayout;

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

-import org.eclipse.swt.widgets.Event;

-import org.eclipse.swt.widgets.Listener;

-import org.eclipse.swt.widgets.Menu;

+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.platform.discovery.core.api.IContributedAction;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.core.internal.ContextStructuredSelection;
+import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
+import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;
+import org.eclipse.platform.discovery.ui.internal.tooltip.TooltipCreator;
+import org.eclipse.platform.discovery.ui.internal.tooltip.TreeViewerTooltipManager;
+import org.eclipse.platform.discovery.ui.internal.util.ControlBackgroundImageManager;
+import org.eclipse.platform.discovery.ui.internal.view.SortingMenuManager;
+import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.DragSrcInteractionListener;
+import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.DragSrcListener;
+import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.LocalSelectionTransferSetter;
+import org.eclipse.platform.discovery.ui.internal.view.dnd.impl.XmlDiscoverySelectionTransferSetter;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
 

 

 /**

@@ -59,8 +60,8 @@
 public class DiscoveryTreeViewerFactory 

 {

 

-	private Set<IGenericViewCustomization> availableViewCustomizations;

-	private Set<IContributedAction> availableActions;

+	private List<IGenericViewCustomization> availableViewCustomizations;

+	private List<IContributedAction> availableActions;

 	private IResultsViewAccessor viewAccessor;

 

 	private ControlBackgroundImageManager treeBgImageManager;

@@ -80,8 +81,8 @@
 	 */

 	public IResultsViewAccessor createTreeViewer(final Composite parent, final Set<? extends IGenericViewCustomization> viewCustomizations, final Set<IContributedAction> actions, IDiscoveryEnvironment env)

 	{

-		this.availableViewCustomizations = new HashSet<IGenericViewCustomization>(viewCustomizations);

-		this.availableActions = new HashSet<IContributedAction>(actions);

+		this.availableViewCustomizations = new ArrayList<IGenericViewCustomization>(viewCustomizations);

+		this.availableActions = new ArrayList<IContributedAction>(actions);

 

 		final IToolBarManager toolbarManager = createToolbar(parent, SWT.TOOL|SWT.FLAT|SWT.RIGHT_TO_LEFT);

 		

@@ -110,7 +111,7 @@
 	

 	private GenericResultLabelProvider getGenericResultLabelProvider(final Set<? extends IGenericViewCustomization> viewCustomizations)

 	{

-		Set<IGenericViewCustomization> genericViewCustomizations = new HashSet<IGenericViewCustomization>();

+		List<IGenericViewCustomization> genericViewCustomizations = new ArrayList<IGenericViewCustomization>();

 		

 		for( IGenericViewCustomization c : viewCustomizations)

 		{

@@ -120,7 +121,7 @@
 		return new GenericResultLabelProvider(genericViewCustomizations);

 	}

 	

-	private void installDoubleClickListeners(final TreeViewer treeViewer, final Set<IGenericViewCustomization> customizations)

+	private void installDoubleClickListeners(final TreeViewer treeViewer, final List<IGenericViewCustomization> customizations)

 	{

 		for(IGenericViewCustomization viewC : customizations)

 		{

@@ -132,12 +133,12 @@
 		}

 	}

 

-	protected ILabelProvider labelProvider(final Set<IGenericViewCustomization> viewCustomizations)

+	protected ILabelProvider labelProvider(final List<IGenericViewCustomization> viewCustomizations)

 	{

 		return new GenericResultLabelProvider(viewCustomizations);

 	}

 

-	protected ITreeContentProvider contentProvider(final Set<IGenericViewCustomization> viewCustomizations)

+	protected ITreeContentProvider contentProvider(final List<IGenericViewCustomization> viewCustomizations)

 	{

 		return new GenericResultContentProvider(viewCustomizations);

 	}

@@ -266,7 +267,7 @@
 		};

 	}

 

-	private void installActions(final Set<IGenericViewCustomization> viewCustomizations, final Set<IContributedAction> actions, final IResultsViewAccessor viewAccessor)

+	private void installActions(final List<IGenericViewCustomization> viewCustomizations, final List<IContributedAction> actions, final IResultsViewAccessor viewAccessor)

 	{

 		for (IGenericViewCustomization viewc : viewCustomizations)

 		{

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultContentProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultContentProvider.java
index d2bd1c6..edb2b7a 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultContentProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultContentProvider.java
@@ -14,8 +14,7 @@
 import java.util.Arrays;

 import java.util.Collection;

 import java.util.Collections;

-import java.util.HashSet;

-import java.util.Set;

+import java.util.List;
 

 import org.eclipse.jface.viewers.ITreeContentProvider;

 import org.eclipse.jface.viewers.Viewer;

@@ -29,17 +28,17 @@
  */

 public class GenericResultContentProvider implements ITreeContentProvider

 {

-	private Set<ITreeContentProvider> contentProviders;

-	private final Set<IGenericViewCustomization> customizations;

+	private List<ITreeContentProvider> contentProviders;

+	private final List<IGenericViewCustomization> customizations;

 

 	/**

 	 * Constructor

 	 * @param viewCustomizations a set of view customizations; empty set if none 

 	 */

-	public GenericResultContentProvider(final Set<IGenericViewCustomization> viewCustomizations)

+	public GenericResultContentProvider(final List<IGenericViewCustomization> viewCustomizations)

 	{

-		contentProviders = new HashSet<ITreeContentProvider>();

-		customizations = Collections.unmodifiableSet(viewCustomizations);

+		contentProviders = new ArrayList<ITreeContentProvider>();

+		customizations = Collections.unmodifiableList(viewCustomizations);

 		

 		for (IGenericViewCustomization cust : customizations)

 		{

@@ -51,7 +50,7 @@
 		}

 	}

 	

-	protected Set<IGenericViewCustomization> availableCustomizations()

+	protected List<IGenericViewCustomization> availableCustomizations()

 	{

 		return customizations;

 	}

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultLabelProvider.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultLabelProvider.java
index d762778..c20d7d7 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultLabelProvider.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/view/result/impl/GenericResultLabelProvider.java
@@ -10,28 +10,28 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.view.result.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.CellLabelProvider;

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

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

-import org.eclipse.jface.viewers.ViewerCell;

-import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ITooltipProvider;

-import org.eclipse.platform.discovery.ui.internal.tooltip.FormTextBuilder;

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

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
+import org.eclipse.platform.discovery.ui.api.ITooltipProvider;
+import org.eclipse.platform.discovery.ui.internal.tooltip.FormTextBuilder;
+import org.eclipse.swt.graphics.Image;
 

 

 public class GenericResultLabelProvider extends CellLabelProvider implements ILabelProvider

 {

-	private final Set<ILabelProvider> labelProviders;

-	private final Set<ITooltipProvider> tooltipProviders;

+	private final List<ILabelProvider> labelProviders;

+	private final List<ITooltipProvider> tooltipProviders;

 

-	public GenericResultLabelProvider(final Set<IGenericViewCustomization> viewCustomizations)

+	public GenericResultLabelProvider(final List<IGenericViewCustomization> viewCustomizations)

 	{

-		labelProviders = new HashSet<ILabelProvider>();

-		tooltipProviders = new HashSet<ITooltipProvider>();

+		labelProviders = new ArrayList<ILabelProvider>();

+		tooltipProviders = new ArrayList<ITooltipProvider>();

 

 		for (IGenericViewCustomization customization : viewCustomizations)

 		{

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/AdvancedSearchParamsUiContribXpParser.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/AdvancedSearchParamsUiContribXpParser.java
index 41134c0..2f7603b 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/AdvancedSearchParamsUiContribXpParser.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/AdvancedSearchParamsUiContribXpParser.java
@@ -10,18 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.IExtensionRegistry;

-import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.ui.api.IAdvancedSearchParamsUiContributor;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.ui.api.IAdvancedSearchParamsUiContributor;
 import org.eclipse.platform.discovery.ui.internal.search.advancedparams.IAdvancedSearchParamsUiContributorDescr;
-import org.eclipse.platform.discovery.ui.internal.xp.IAdvancedSearchParamsUiContribXpParser;

+import org.eclipse.platform.discovery.ui.internal.xp.IAdvancedSearchParamsUiContribXpParser;
 

 

 /**

@@ -44,9 +43,9 @@
 		this.extensionRegistry = extRegistry;

 	}

 

-	public Set<IAdvancedSearchParamsUiContributorDescr> readContributions()

+	public List<IAdvancedSearchParamsUiContributorDescr> readContributions()

 	{

-		final Set<IAdvancedSearchParamsUiContributorDescr> result = new HashSet<IAdvancedSearchParamsUiContributorDescr>();

+		final List<IAdvancedSearchParamsUiContributorDescr> result = new ArrayList<IAdvancedSearchParamsUiContributorDescr>();

 		for (final IConfigurationElement configElement : configurationElements())

 		{

 			result.add(new IAdvancedSearchParamsUiContributorDescr()

diff --git a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/CustomResultUiXpParser.java b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/CustomResultUiXpParser.java
index 0d2773c..0dc89c7 100644
--- a/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/CustomResultUiXpParser.java
+++ b/bundles/org.eclipse.platform.discovery.ui/src/org/eclipse/platform/discovery/ui/internal/xp/impl/CustomResultUiXpParser.java
@@ -10,17 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.internal.xp.impl;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.IExtensionRegistry;

-import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;

-import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;

-import org.eclipse.platform.discovery.ui.internal.xp.ICustomResultUiXpParser;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.platform.discovery.runtime.internal.impl.XpParsersFactory;
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;
+import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;
+import org.eclipse.platform.discovery.ui.internal.xp.ICustomResultUiXpParser;
 

 

 /**

@@ -48,9 +48,9 @@
 		return (new XpParsersFactory()).createGenericXpParser();

 	}

 

-	public Set<ICustomResultUiContributorDescription> readContributions()

+	public List<ICustomResultUiContributorDescription> readContributions()

 	{

-		final Set<ICustomResultUiContributorDescription> result = new HashSet<ICustomResultUiContributorDescription>();

+		final List<ICustomResultUiContributorDescription> result = new ArrayList<ICustomResultUiContributorDescription>();

 		for(IConfigurationElement configElement : genericXpParser().getConfigurationElements(extRegistry, XP_ID, XP_ELEMENT_NAME))

 		{

 			result.add(createContributorDescription(configElement));

diff --git a/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/DynamicObjectTypeContributorTest.java b/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/DynamicObjectTypeContributorTest.java
index 16a2ac9..05c6d1a 100644
--- a/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/DynamicObjectTypeContributorTest.java
+++ b/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/DynamicObjectTypeContributorTest.java
@@ -10,22 +10,34 @@
  *******************************************************************************/

 package org.eclipse.platform.discovery.compatibility.internal;

 

+import static org.easymock.EasyMock.anyBoolean;

+import static org.easymock.EasyMock.anyObject;

+import static org.easymock.EasyMock.createMock;

+import static org.easymock.EasyMock.createNiceMock;

+import static org.easymock.EasyMock.expect;

+import static org.easymock.EasyMock.replay;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.ID_ONE;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.ID_TWO;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.LABEL_ONE;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.LABEL_TWO;

+

 import java.io.File;

 import java.io.FileInputStream;

 import java.io.IOException;

 import java.io.InputStream;

 import java.net.URISyntaxException;

 import java.net.URL;

-import java.util.HashSet;

+import java.util.ArrayList;

+import java.util.List;

 import java.util.ResourceBundle;

-import java.util.Set;

+

+import junit.framework.TestCase;

 

 import org.eclipse.core.runtime.FileLocator;

 import org.eclipse.core.runtime.IContributor;

 import org.eclipse.core.runtime.IExtensionRegistry;

 import org.eclipse.core.runtime.Platform;

 import org.eclipse.core.runtime.RegistryFactory;

-import org.eclipse.platform.discovery.compatibility.internal.DiscoveryCompatibilityPlugin;

 import org.eclipse.platform.discovery.compatibility.internal.contributors.ContributionFailedException;

 import org.eclipse.platform.discovery.compatibility.internal.contributors.impl.DynamicObjectTypeContributor;

 import org.eclipse.platform.discovery.compatibility.internal.readers.ISearchPageDescription;

@@ -38,10 +50,6 @@
 import org.osgi.framework.Bundle;

 import org.osgi.framework.BundleException;

 

-import junit.framework.TestCase;

-import static org.easymock.EasyMock.*;

-import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.*;

-

 public class DynamicObjectTypeContributorTest extends TestCase {

 

 	private final Object masterToken = new Object();

@@ -107,16 +115,16 @@
 		}

 	}

 

-	private Set<ISearchPageDescription> descriptions() {

-		Set<ISearchPageDescription> result = new HashSet<ISearchPageDescription>();

+	private List<ISearchPageDescription> descriptions() {

+		List<ISearchPageDescription> result = new ArrayList<ISearchPageDescription>();

 		result.add(new SearchPageDescription(ID_ONE, LABEL_ONE));

 		result.add(new SearchPageDescription(ID_TWO, LABEL_TWO));

 

 		return result;

 	}

 	

-	private Set<IObjectTypeDescription> expectedObjectTypes() {

-		Set<IObjectTypeDescription> result = new HashSet<IObjectTypeDescription>();

+	private List<IObjectTypeDescription> expectedObjectTypes() {

+		List<IObjectTypeDescription> result = new ArrayList<IObjectTypeDescription>();

 		result.add(new ObjectTypeDescription(ID_ONE, LABEL_ONE));

 		result.add(new ObjectTypeDescription(ID_TWO, LABEL_TWO));

 		return result;

diff --git a/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParserTest.java b/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParserTest.java
index dbef305..0928d41 100644
--- a/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParserTest.java
+++ b/tests/org.eclipse.platform.discovery.compatibility.tests/src/org/eclipse/platform/discovery/compatibility/internal/readers/impl/SearchPageParserTest.java
@@ -10,21 +10,23 @@
  *******************************************************************************/

 package org.eclipse.platform.discovery.compatibility.internal.readers.impl;

 

-import java.util.ArrayList;

+import static org.easymock.EasyMock.createMock;

+import static org.easymock.EasyMock.expect;

+import static org.easymock.EasyMock.replay;

+import static org.easymock.EasyMock.verify;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.ID_ONE;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.ID_TWO;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.LABEL_ONE;

+import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.LABEL_TWO;

 

-import java.util.HashSet;

+import java.util.ArrayList;

 import java.util.List;

-import java.util.Set;

 

 import junit.framework.TestCase;

 

 import org.eclipse.core.runtime.IConfigurationElement;

 import org.eclipse.platform.discovery.compatibility.internal.readers.ISearchPageDescription;

 import org.eclipse.platform.discovery.compatibility.internal.readers.ISearchPageParser;

-import org.eclipse.platform.discovery.compatibility.internal.readers.impl.SearchPageDescription;

-import org.eclipse.platform.discovery.compatibility.internal.readers.impl.SearchPageParser;

-import static org.easymock.EasyMock.*;

-import static org.eclipse.platform.discovery.compatibility.internal.DescriptiveObjectConstants.*;

 

 public class SearchPageParserTest extends TestCase {

 

@@ -44,14 +46,14 @@
 	}

 	

 	public void testReadContributors() {

-		Set<ISearchPageDescription> contributors = parser.readContributions();

+		List<ISearchPageDescription> contributors = parser.readContributions();

 		assertEquals("Two contributors expected", 2, contributors.size());

 		

-		Set<ISearchPageDescription> expectedSet = new HashSet<ISearchPageDescription>();

-		expectedSet.add(new SearchPageDescription(ID_ONE, LABEL_ONE));

-		expectedSet.add(new SearchPageDescription(ID_TWO, LABEL_TWO));

+		List<ISearchPageDescription> expectedList = new ArrayList<ISearchPageDescription>();

+		expectedList.add(new SearchPageDescription(ID_ONE, LABEL_ONE));

+		expectedList.add(new SearchPageDescription(ID_TWO, LABEL_TWO));

 

-		assertEquals("readContributors returned incorrect resuly", expectedSet, contributors);

+		assertEquals("readContributors returned incorrect resuly", expectedList, contributors);

 		verify(mockElementOne, mockElementTwo);

 

 	}

diff --git a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
index 158c11e..1a09710 100644
--- a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
+++ b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerFixture.java
@@ -10,25 +10,24 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.core.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.core.internal.ISearchSession;

-import org.eclipse.platform.discovery.core.internal.SearchConsoleController;

-import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.platform.discovery.util.api.env.IErrorHandler;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

-import org.eclipse.platform.discovery.util.internal.session.IHistoryTrack;

-import org.eclipse.platform.discovery.util.internal.session.ISessionManager;

+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.core.internal.ISearchSession;
+import org.eclipse.platform.discovery.core.internal.SearchConsoleController;
+import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.platform.discovery.util.api.env.IErrorHandler;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
+import org.eclipse.platform.discovery.util.internal.session.IHistoryTrack;
+import org.eclipse.platform.discovery.util.internal.session.ISessionManager;
 

 

 public class SearchConsoleControllerFixture extends MockObjectTestCase {

@@ -50,8 +49,8 @@
 	protected Mock<IDestinationCategoryDescription> destinationCategory2;

 	protected Mock<IDestinationCategoryDescription> destinationCategory3;

 

-	protected Set<IDestinationCategoryDescription> destinationCategories_obj1;

-	protected Set<IDestinationCategoryDescription> destinationCategories_obj2;

+	protected List<IDestinationCategoryDescription> destinationCategories_obj1;

+	protected List<IDestinationCategoryDescription> destinationCategories_obj2;

 	

 	protected Mock<IDiscoveryEnvironment> consoleEnvironment;

 	protected Mock<IErrorHandler> errorHandler;

@@ -70,8 +69,8 @@
 		setupSearchProviderConfig();

 

 		view = mock(ISearchConsoleControllerOutputView.class);

-		final Set<IObjectTypeDescription> objectTypes = new HashSet<IObjectTypeDescription>(Arrays.asList(new IObjectTypeDescription[] {

-				objectType_1.proxy(), objectType_2.proxy() }));

+		final List<IObjectTypeDescription> objectTypes = Arrays.asList(new IObjectTypeDescription[] {

+				objectType_1.proxy(), objectType_2.proxy() });

 		view.expects(once()).method("showObjectTypes").with(eq(objectTypes));

 		

 		setupSessions();

@@ -109,21 +108,20 @@
 

 	private void setupSearchProviderConfig()

 	{

-		final Set<IObjectTypeDescription> objectTypes = new HashSet<IObjectTypeDescription>(Arrays.asList(new IObjectTypeDescription[] {

-				objectType_1.proxy(), objectType_2.proxy() }));

+		final List<IObjectTypeDescription> objectTypes = Arrays.asList(new IObjectTypeDescription[] {

+				objectType_1.proxy(), objectType_2.proxy() });

 		providerConfig = mock(ISearchProviderConfiguration.class);

 		providerConfig.stubs().method("getObjectTypes").will(returnValue(objectTypes));

 

 		destinationCategory1 = mock(IDestinationCategoryDescription.class);

 		destinationCategory2 = mock(IDestinationCategoryDescription.class);

-		destinationCategories_obj1 = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] {

-				destinationCategory1.proxy(), destinationCategory2.proxy() }));

+		destinationCategories_obj1 = Arrays.asList(new IDestinationCategoryDescription[] {

+				destinationCategory1.proxy(), destinationCategory2.proxy() });

 		providerConfig.stubs().method("getAvailableDestinationCategoriesForObjectType").with(eq(objectType_1.proxy())).will(

 				returnValue(destinationCategories_obj1));

 

 		destinationCategory3 = mock(IDestinationCategoryDescription.class);

-		destinationCategories_obj2 = new HashSet<IDestinationCategoryDescription>(Arrays

-				.asList(new IDestinationCategoryDescription[] { destinationCategory3.proxy() }));

+		destinationCategories_obj2 = Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory3.proxy() });

 		providerConfig.stubs().method("getAvailableDestinationCategoriesForObjectType").with(eq(objectType_2.proxy())).will(

 				returnValue(destinationCategories_obj2));

 	}

diff --git a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerTest.java b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerTest.java
index 8fceac9..fd2f6b4 100644
--- a/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerTest.java
+++ b/tests/org.eclipse.platform.discovery.core.test.unit/src/org/eclipse/platform/discovery/core/test/unit/internal/SearchConsoleControllerTest.java
@@ -10,9 +10,11 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.core.test.unit.internal;

 

+import java.util.ArrayList;
 import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 

 import org.eclipse.platform.discovery.core.api.ISearchContext;

 import org.eclipse.platform.discovery.core.api.SearchEvent;

@@ -71,11 +73,11 @@
 		providerConfig.stubs().method("getActiveSearchProvider").with(same(objectType_1.proxy()), same(destinationCategory1.proxy())).will(

 										returnValue(searchProviderDescr_1.proxy()));

 		providerConfig.stubs().method("getDestinationCategoriesForDestination").with(eq(searchDestination.proxy())).will(

-				returnValue(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1

-						.proxy() }))));

+				returnValue(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1

+						.proxy() })));

 

 		final Mock<ISearchSubdestination> subdestination = mock(ISearchSubdestination.class);

-		final Set<ISearchSubdestination> subdestinations = new HashSet<ISearchSubdestination>();

+		final List<ISearchSubdestination> subdestinations = new ArrayList<ISearchSubdestination>();

 		subdestinations.add(subdestination.proxy());

 		providerConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory1.proxy()),

 				eq(searchProviderDescr_1.proxy())).will(returnValue(subdestinations));

@@ -136,19 +138,19 @@
 		providerConfig.stubs().method("getActiveSearchProvider").with(same(objectType_1.proxy()), same(destinationCategory1.proxy())).will(

 										returnValue(searchProviderDescr_1.proxy()));

 		providerConfig.stubs().method("getDestinationCategoriesForDestination").with(eq(searchDestination.proxy())).will(

-				returnValue(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1

-						.proxy() }))));

-		providerConfig.stubs().method("getAvailableSearchSubdestinations").will(returnValue(new HashSet<ISearchSubdestination>()));

+				returnValue(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1

+						.proxy() })));

+		providerConfig.stubs().method("getAvailableSearchSubdestinations").will(returnValue(new ArrayList<ISearchSubdestination>()));

 		

 		view.expects(once()).method("showGroupingHierarchies").with(new Constraint()

 		{

 			public boolean eval(Object arg0)

 			{

-				if (!(arg0 instanceof Set))

+				if (!(arg0 instanceof List<?>))

 				{

 					return false;

 				}

-				return ((Set<?>) arg0).iterator().next() == group;

+				return ((List<?>) arg0).iterator().next() == group;

 			}

 

 			public StringBuffer describeTo(StringBuffer arg0)

@@ -165,11 +167,11 @@
 		{

 			public boolean eval(Object arg0)

 			{

-				if (!(arg0 instanceof Set))

+				if (!(arg0 instanceof List))

 				{

 					return false;

 				}

-				return ((Set<?>) arg0).size() == 0;

+				return ((List<?>) arg0).size() == 0;

 			}

 

 			public StringBuffer describeTo(StringBuffer arg0)

@@ -194,19 +196,18 @@
 		providerConfig.stubs().method("getActiveSearchProvider").with(same(objectType_1.proxy()), same(destinationCategory1.proxy())).will(

 										returnValue(searchProviderDescr_1.proxy()));

 		providerConfig.stubs().method("getDestinationCategoriesForDestination").with(eq(searchDestination.proxy())).will(

-				returnValue(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1

-						.proxy() }))));

-		providerConfig.stubs().method("getAvailableSearchSubdestinations").will(returnValue(new HashSet<ISearchSubdestination>()));

+				returnValue(Arrays.asList(new IDestinationCategoryDescription[] { destinationCategory1.proxy() })));

+		providerConfig.stubs().method("getAvailableSearchSubdestinations").will(returnValue(new ArrayList<ISearchSubdestination>()));

 		

 		view.expects(once()).method("showGroupingHierarchies").with(new Constraint()

 		{

 			public boolean eval(Object arg0)

 			{

-				if (!(arg0 instanceof Set))

+				if (!(arg0 instanceof List))

 				{

 					return false;

 				}

-				return ((Set<?>) arg0).iterator().next() == group;

+				return ((List<?>) arg0).iterator().next() == group;

 			}

 

 			public StringBuffer describeTo(StringBuffer arg0)

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
index c2a71b8..3a76194 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/internal/plugin/DiscoveryIntegrationPluginTest.java
@@ -161,8 +161,8 @@
 		searchFavoritesSlaveController.stubs().method("createActions").will(returnValue(new HashSet<IContributedAction>(Arrays.asList(new IContributedAction[] { contributedAction.proxy() }))));

 		

 		slaveControllersConfig = mock(ISlaveControllersConfiguration.class);

-		slaveControllersConfig.expects(atMostOnce()).method("availableSearchConsoleSlaveControllers").will(returnValue(new HashSet<ISearchConsoleSlaveController>(Arrays.asList(new ISearchConsoleSlaveController[] { slaveController.proxy() }))));

-		slaveControllersConfig.expects(atMostOnce()).method("availableSearchFavoritesSlaveControllers").will(returnValue(new HashSet<ISearchFavoritesSlaveController>(Arrays.asList(new ISearchFavoritesSlaveController[] { searchFavoritesSlaveController.proxy() }))));

+		slaveControllersConfig.expects(atMostOnce()).method("availableSearchConsoleSlaveControllers").will(returnValue(Arrays.asList(new ISearchConsoleSlaveController[] { slaveController.proxy() })));

+		slaveControllersConfig.expects(atMostOnce()).method("availableSearchFavoritesSlaveControllers").will(returnValue(Arrays.asList(new ISearchFavoritesSlaveController[] { searchFavoritesSlaveController.proxy() })));

 	}

 	

 	private void setupViewCustomizations()

@@ -171,8 +171,8 @@
 		searchFavoritesViewCustomization = mock(ISearchFavoritesViewCustomization.class);

 		

 		viewCustomizationsConfig = mock(IViewCustomizationConfiguration.class);

-		viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchConsoleCustomizations").will(returnValue(new HashSet<ISearchConsoleCustomization>(Arrays.asList(new ISearchConsoleCustomization[]{searchConsoleViewCustomization.proxy()}))));

-		viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchFavoritesCustomizations").will(returnValue(new HashSet<ISearchFavoritesViewCustomization>(Arrays.asList(new ISearchFavoritesViewCustomization[]{searchFavoritesViewCustomization.proxy()}))));

+		viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchConsoleCustomizations").will(returnValue(Arrays.asList(new ISearchConsoleCustomization[]{searchConsoleViewCustomization.proxy()})));

+		viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchFavoritesCustomizations").will(returnValue((Arrays.asList(new ISearchFavoritesViewCustomization[]{searchFavoritesViewCustomization.proxy()}))));

 	}

 

 	public void testPartOpenedInternalWithUnknownView()

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesMenuActionTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesMenuActionTest.java
index be47300..c9b0e36 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesMenuActionTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesMenuActionTest.java
@@ -10,21 +10,21 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.core.internal.ContextStructuredSelection;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.IConfigurableContributedAction;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesMenuAction;

-import org.eclipse.platform.discovery.runtime.api.ISearchParameters;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

-import org.eclipse.platform.discovery.util.api.env.IErrorHandler;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

+import java.util.Arrays;
+import java.util.HashSet;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.core.internal.ContextStructuredSelection;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.IConfigurableContributedAction;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesMenuAction;
+import org.eclipse.platform.discovery.runtime.api.ISearchParameters;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.platform.discovery.util.api.env.IErrorHandler;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
 

 

 public class SaveInFavoritesMenuActionTest extends MockObjectTestCase

@@ -67,7 +67,7 @@
 

 	private void setupMenuAction()

 	{

-		action = new SaveInFavoritesMenuAction(contributedAction.proxy(), selection, searchContext.proxy(), new HashSet<ISearchFavoritesViewCustomization>(Arrays.asList(new ISearchFavoritesViewCustomization[] { sbCustomization.proxy() })), environment.proxy());

+		action = new SaveInFavoritesMenuAction(contributedAction.proxy(), selection, searchContext.proxy(), Arrays.asList(new ISearchFavoritesViewCustomization[] { sbCustomization.proxy() }), environment.proxy());

 	}

 

 	public void testIsAvailable()

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesViewCustomizationTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesViewCustomizationTest.java
index 4ee60ed..cb3b493 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesViewCustomizationTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SaveInFavoritesViewCustomizationTest.java
@@ -10,29 +10,28 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.jface.action.IMenuManager;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.TreeViewer;

-import org.eclipse.platform.discovery.core.api.IContributedAction;

-import org.eclipse.platform.discovery.core.api.ISearchContext;

-import org.eclipse.platform.discovery.integration.internal.plugin.DiscoveryIntegrationMessages;

-import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.IActionWithAvailability;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesContributedAction;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesViewCustomization;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;

-import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;

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

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

-import org.eclipse.ui.PlatformUI;

+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.platform.discovery.core.api.IContributedAction;
+import org.eclipse.platform.discovery.core.api.ISearchContext;
+import org.eclipse.platform.discovery.integration.internal.plugin.DiscoveryIntegrationMessages;
+import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.IActionWithAvailability;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesContributedAction;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.SaveInFavoritesViewCustomization;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;
+import org.eclipse.platform.discovery.ui.api.IResultsViewAccessor;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
 

 

 public class SaveInFavoritesViewCustomizationTest extends MockObjectTestCase

@@ -64,12 +63,12 @@
 

 		favoritesCustomization = mock(ISearchFavoritesViewCustomization.class);

 		viewCustomizationConfig = mock(IViewCustomizationConfiguration.class);

-		viewCustomizationConfig.stubs().method("availableSearchFavoritesCustomizations").will(returnValue(new HashSet<ISearchFavoritesViewCustomization>(Arrays.asList(new ISearchFavoritesViewCustomization[] { favoritesCustomization.proxy() }))));

+		viewCustomizationConfig.stubs().method("availableSearchFavoritesCustomizations").will(returnValue(Arrays.asList(new ISearchFavoritesViewCustomization[] { favoritesCustomization.proxy() })));

 

 		customization = new SaveInFavoritesViewCustomization()

 		{

 			@Override

-			protected IActionWithAvailability createSaveAction(IContributedAction contributedAction, ISelection selection, ISearchContext searchContext, Set<ISearchFavoritesViewCustomization> sbCustomizations, IDiscoveryEnvironment environment)

+			protected IActionWithAvailability createSaveAction(IContributedAction contributedAction, ISelection selection, ISearchContext searchContext, List<ISearchFavoritesViewCustomization> sbCustomizations, IDiscoveryEnvironment environment)

 			{

 				assertTrue("Unexpected action", contributedAction == SaveInFavoritesViewCustomizationTest.this.contributedAction.proxy());

 				assertTrue("Unexpcted selection", selection == viewerSelection.proxy());

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SlaveControllersConfigurationTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SlaveControllersConfigurationTest.java
index f54d45e..a8b0154 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SlaveControllersConfigurationTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/SlaveControllersConfigurationTest.java
@@ -10,16 +10,16 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.test.unit.internal;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;

-import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;

-import org.eclipse.platform.discovery.integration.internal.plugin.ISlaveControllersConfiguration;

-import org.eclipse.platform.discovery.integration.internal.slavecontrollers.SlaveControllersConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;
+import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;
+import org.eclipse.platform.discovery.integration.internal.plugin.ISlaveControllersConfiguration;
+import org.eclipse.platform.discovery.integration.internal.slavecontrollers.SlaveControllersConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class SlaveControllersConfigurationTest extends MockObjectTestCase

@@ -50,14 +50,14 @@
 	

 	public void testAvailableSeSlaveControllers()

 	{

-		final Set<ISearchConsoleSlaveController> result = new HashSet<ISearchConsoleSlaveController>();

+		final List<ISearchConsoleSlaveController> result = new ArrayList<ISearchConsoleSlaveController>();

 		seXpParser.expects(once()).method("readContributions").will(returnValue(result));

 		assertTrue("Unexpected result", config.availableSearchConsoleSlaveControllers() == result);

 	}

 	

 	public void testAvailableSbSlaveControllers()

 	{

-		final Set<ISearchFavoritesSlaveController> result = new HashSet<ISearchFavoritesSlaveController>();

+		final List<ISearchFavoritesSlaveController> result = new ArrayList<ISearchFavoritesSlaveController>();

 		sbXpParser.expects(once()).method("readContributions").will(returnValue(result));

 		assertTrue("Unexpected result", config.availableSearchFavoritesSlaveControllers() == result);

 	}

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustXpParserTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustXpParserTest.java
index 375953a..eebf27e 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustXpParserTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustXpParserTest.java
@@ -10,18 +10,18 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.Set;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.core.runtime.IExtensionRegistry;

-import org.eclipse.platform.discovery.integration.internal.ViewCustXpParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.util.internal.StatusUtils;

-import org.eclipse.platform.discovery.util.internal.logging.ILogger;

+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.platform.discovery.integration.internal.ViewCustXpParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.util.internal.StatusUtils;
+import org.eclipse.platform.discovery.util.internal.logging.ILogger;
 

 

 public class ViewCustXpParserTest extends MockObjectTestCase

@@ -104,7 +104,7 @@
 	public void testReadSlaveControllers()

 	{

 		logger.expects(once()).method("logError").with(eq(exceptionThrown.getMessage()), eq(exceptionThrown));

-		final Set<Object> result = testParser.readContributions();

+		final List<Object> result = testParser.readContributions();

 		assertEquals("One element expected", 1, result.size());

 		assertTrue("Unexpected slave controller", result.iterator().next() == instantiatableObject);

 	}

diff --git a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustomizationConfigurationTest.java b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustomizationConfigurationTest.java
index 1fa39b5..9b44dc4 100644
--- a/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustomizationConfigurationTest.java
+++ b/tests/org.eclipse.platform.discovery.integration.test.unit/src/org/eclipse/platform/discovery/integration/test/unit/internal/ViewCustomizationConfigurationTest.java
@@ -10,16 +10,16 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.integration.test.unit.internal;

 

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.integration.internal.viewcustomization.ViewCustomizationConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.platform.discovery.integration.internal.plugin.IViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.integration.internal.viewcustomization.ViewCustomizationConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
 

 

 public class ViewCustomizationConfigurationTest extends MockObjectTestCase

@@ -50,14 +50,14 @@
 	

 	public void testAvailableSearchConsoleCustomizations()

 	{

-		final Set<ISearchConsoleCustomization> result = new HashSet<ISearchConsoleCustomization>();

+		final List<ISearchConsoleCustomization> result = new ArrayList<ISearchConsoleCustomization>();

 		seXpParser.expects(once()).method("readContributions").will(returnValue(result));

 		assertTrue("Unexpected result", config.availableSearchConsoleCustomizations() == result);

 	}

 	

 	public void testAvailableSearchFavoritesCustomizations()

 	{

-		final Set<ISearchFavoritesViewCustomization> result = new HashSet<ISearchFavoritesViewCustomization>();

+		final List<ISearchFavoritesViewCustomization> result = new ArrayList<ISearchFavoritesViewCustomization>();

 		sbXpParser.expects(once()).method("readContributions").will(returnValue(result));

 		assertTrue("Unexpected result", config.availableSearchFavoritesCustomizations() == result);

 	}

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsCategoryExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsCategoryExtensionParserTest.java
index c07d0aa..674b2a5 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsCategoryExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsCategoryExtensionParserTest.java
@@ -10,20 +10,18 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.DestinationsCategoryExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.DestinationsCategoryExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class DestinationsCategoryExtensionParserTest extends MockObjectTestCase

@@ -63,13 +61,13 @@
 

 	public void testGetDestinationCategories()

 	{

-		final Set<IDestinationCategoryDescription> categories = testParser.readContributions();

+		final List<IDestinationCategoryDescription> categories = testParser.readContributions();

 		assertEquals("One category expected", 1, categories.size());

 		IDestinationCategoryDescription cat = categories.iterator().next();

 		assertEquals("Unexpected id", CATEGORY_ID, cat.getId());

 		assertEquals("Unexpected name", CATEGORY_NAME, cat.getDisplayName());

 		assertTrue("Unexpected destinations class", ISearchDestination.class.isAssignableFrom(cat.getDestinationsClass()));

-		final Set<String> destProviderIds = cat.getDestinationProviderIds();

+		final List<String> destProviderIds = cat.getDestinationProviderIds();

 		assertEquals("One destination provider expected", 1, destProviderIds.size());

 		assertTrue("Test dest provider not returned", destProviderIds.contains(DESTINATION_PROVIDER_ID));

 	}

@@ -82,8 +80,7 @@
 		

 		destProviderExtParer = mock(IDestinationsProviderExtensionParser.class);

 		destProviderExtParer.stubs().method("readContributions").will(

-				returnValue(new HashSet<IDestinationsProviderDescription>(Arrays

-						.asList(new IDestinationsProviderDescription[] { destProvider.proxy() }))));

+				returnValue(Arrays.asList(new IDestinationsProviderDescription[] { destProvider.proxy() })));

 	}

 

 	private class MyParser extends DestinationsCategoryExtensionParser

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsProviderExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsProviderExtensionParserTest.java
index 6afb4fc..0ba9e0a 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsProviderExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/DestinationsProviderExtensionParserTest.java
@@ -10,19 +10,19 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.DestinationsProviderExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.DestinationsProviderExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class DestinationsProviderExtensionParserTest extends MockObjectTestCase

@@ -66,7 +66,7 @@
 

 	public void testGetDestinationCategories()

 	{

-		final Set<IDestinationsProviderDescription> providers = testParser.readContributions();

+		final List<IDestinationsProviderDescription> providers = testParser.readContributions();

 		assertEquals("One provider expected", 1, providers.size());

 		final IDestinationsProviderDescription provDescription = providers.iterator().next();

 		assertEquals("Unexpected id", PROVIDER_ID, provDescription.getId());

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoLoadProvidersExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoLoadProvidersExtensionParserTest.java
index 53e9a2b..bec1b16 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoLoadProvidersExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoLoadProvidersExtensionParserTest.java
@@ -10,16 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.persistence.IMementoLoadProvider;

-import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoLoadProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.persistence.xp.MementoLoadProvidersExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.persistence.IMementoLoadProvider;
+import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoLoadProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.persistence.xp.MementoLoadProvidersExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class MementoLoadProvidersExtensionParserTest extends MockObjectTestCase

@@ -58,7 +57,7 @@
 	

 	public void testReadProviders()

 	{

-		final Set<IMementoLoadProviderDescription> providersSet = testParser.readContributions();

+		final List<IMementoLoadProviderDescription> providersSet = testParser.readContributions();

 		assertEquals("One provider expeceted", 1, providersSet.size()); //$NON-NLS-1$

 		final IMementoLoadProviderDescription provider = providersSet.iterator().next();

 		

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoStoreProvidersExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoStoreProvidersExtensionParserTest.java
index d976353..b11e197 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoStoreProvidersExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/MementoStoreProvidersExtensionParserTest.java
@@ -10,16 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.persistence.IMementoStoreProvider;

-import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoStoreProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.persistence.xp.MementoStoreProvidersExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.persistence.IMementoStoreProvider;
+import org.eclipse.platform.discovery.runtime.internal.persistence.model.descriptions.IMementoStoreProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.persistence.xp.MementoStoreProvidersExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class MementoStoreProvidersExtensionParserTest extends MockObjectTestCase

@@ -58,7 +57,7 @@
 	

 	public void testReadProviders()

 	{

-		final Set<IMementoStoreProviderDescription> providersSet = testParser.readContributions();

+		final List<IMementoStoreProviderDescription> providersSet = testParser.readContributions();

 		assertEquals("One provider expeceted", 1, providersSet.size()); //$NON-NLS-1$

 		final IMementoStoreProviderDescription provider = providersSet.iterator().next();

 		

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/ObjectTypeExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/ObjectTypeExtensionParserTest.java
index b74255e..4d26725 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/ObjectTypeExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/ObjectTypeExtensionParserTest.java
@@ -10,15 +10,14 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.ObjectTypeExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.ObjectTypeExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class ObjectTypeExtensionParserTest extends MockObjectTestCase

@@ -47,7 +46,7 @@
 

 	public void testGetObjectTypes()

 	{

-		final Set<IObjectTypeDescription> objects = testParser.readContributions();

+		final List<IObjectTypeDescription> objects = testParser.readContributions();

 		assertEquals("One object expected", 1, objects.size());

 		IObjectTypeDescription obj = objects.iterator().next();

 		assertEquals("Unexpected id", OBJECT_ID, obj.getId());

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderActivationConfigDummyTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderActivationConfigDummyTest.java
index c3c83f9..1a33854 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderActivationConfigDummyTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderActivationConfigDummyTest.java
@@ -2,7 +2,7 @@
 

 import java.util.Arrays;

 import java.util.HashSet;

-import java.util.LinkedHashSet;

+import java.util.List;

 import java.util.Set;

 

 import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;

@@ -22,13 +22,13 @@
 	public void testGetActiveSearchProviderNoCategories() throws ProviderNotFoundException {

 		IObjectTypeDescription aDescription = objectTypeDescriptionForId(OBJECT_TYPE_ID);

 		ISearchProviderDescription expectedProvider = providerWithNoCategories(aDescription);

-		SearchProviderActivationConfigDummy dummy = new SearchProviderActivationConfigDummy(createParser(set( providerWithCateogires(aDescription), expectedProvider )));

+		SearchProviderActivationConfigDummy dummy = new SearchProviderActivationConfigDummy(createParser(list( providerWithCateogires(aDescription), expectedProvider )));

 		assertEquals("Unexpected provider returned", expectedProvider, dummy.getActiveSearchProviderDescription(objectTypeDescriptionForId(OBJECT_TYPE_ID)));

 	}

 	

 	public void testGetActiveSearchProviderNoCategoriesThrowsExpectionForProviderWithCategories() {

 		IObjectTypeDescription aDescription = objectTypeDescriptionForId(OBJECT_TYPE_ID);

-		SearchProviderActivationConfigDummy dummy = new SearchProviderActivationConfigDummy(createParser(set( providerWithCateogires(aDescription) )));

+		SearchProviderActivationConfigDummy dummy = new SearchProviderActivationConfigDummy(createParser(list( providerWithCateogires(aDescription) )));

 		try{

 			dummy.getActiveSearchProviderDescription(objectTypeDescriptionForId(OBJECT_TYPE_ID));

 			fail("ProviderNotFound not thrown");

@@ -36,7 +36,7 @@
 	}

 	

 	

-	private ISearchProvidersExtensionParser createParser(Set<ISearchProviderDescription> providers) {

+	private ISearchProvidersExtensionParser createParser(List<ISearchProviderDescription> providers) {

 		Mock<ISearchProvidersExtensionParser> parserMock = mock(ISearchProvidersExtensionParser.class);

 		parserMock.stubs().method("readContributions").will(returnValue(providers));

 		return parserMock.proxy();

@@ -65,10 +65,8 @@
 		return mock.proxy();

 	}

 	

-	private Set<ISearchProviderDescription> set(ISearchProviderDescription... descriptions) {

-		Set<ISearchProviderDescription> result = new LinkedHashSet<ISearchProviderDescription>();

-		result.addAll(Arrays.asList(descriptions));

-		return result;

+	private List<ISearchProviderDescription> list(ISearchProviderDescription... descriptions) {

+		return Arrays.asList(descriptions);

 	}

 	

 	

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderConfigurationTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderConfigurationTest.java
index b29a9f6..a19c997 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderConfigurationTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProviderConfigurationTest.java
@@ -10,37 +10,37 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderActivationConfig;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.ISubdestinationsActivationConfig;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderActivationConfig;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.ISubdestinationsActivationConfig;
 import org.eclipse.platform.discovery.runtime.internal.IXPParsersFactory;
-import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;

-import org.eclipse.platform.discovery.runtime.internal.impl.SearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.testutils.utils.reflection.ReflectionUtils;

-import org.eclipse.platform.discovery.util.internal.logging.ILogger;

-import org.jmock.core.Constraint;

-import org.jmock.core.Invocation;

-import org.jmock.core.Stub;

+import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;
+import org.eclipse.platform.discovery.runtime.internal.impl.SearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.testutils.utils.reflection.ReflectionUtils;
+import org.eclipse.platform.discovery.util.internal.logging.ILogger;
+import org.jmock.core.Constraint;
+import org.jmock.core.Invocation;
+import org.jmock.core.Stub;
 

 

 /**

@@ -203,21 +203,21 @@
 		destinationProviderDescr1.stubs().method("createProvider").will(returnValue(destinationProvider1.proxy()));

 

 		destinationProvider2 = mock(IDestinationsProvider.class);

-		final Set<ISearchDestination> provider2Dest = new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination3.proxy()}));

+		final Set<ISearchDestination> provider2Dest =  new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination3.proxy()}));

 		destinationProvider2.stubs().method("getSearchDestinations").will(returnValue(provider2Dest));

 		destinationProviderDescr2 = mock(IDestinationsProviderDescription.class, DESTINATION_PROVIDER_ID_2);

 		destinationProviderDescr2.stubs().method("getId").will(returnValue(DESTINATION_PROVIDER_ID_2));

 		destinationProviderDescr2.stubs().method("createProvider").will(returnValue(destinationProvider2.proxy()));

 

 		destinationProvider3 = mock(IDestinationsProvider.class);

-		final Set<ISearchDestination> provider3Dest = new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination4.proxy(), searchDestination5.proxy()}));

+		final Set<ISearchDestination> provider3Dest =  new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination4.proxy(), searchDestination5.proxy()}));

 		destinationProvider3.stubs().method("getSearchDestinations").will(returnValue(provider3Dest));

 		destinationProviderDescr3 = mock(IDestinationsProviderDescription.class, DESTINATION_PROVIDER_ID_3);

 		destinationProviderDescr3.stubs().method("getId").will(returnValue(DESTINATION_PROVIDER_ID_3));

 		destinationProviderDescr3.stubs().method("createProvider").will(returnValue(destinationProvider3.proxy()));

 

 		destinationProvider4 = mock(IDestinationsProvider.class);

-		final Set<ISearchDestination> provider4Dest = new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination6.proxy(), searchDestination7.proxy()}));

+		final Set<ISearchDestination> provider4Dest =  new HashSet<ISearchDestination>(Arrays.asList(new ISearchDestination[]{searchDestination6.proxy(), searchDestination7.proxy()}));

 		destinationProvider4.stubs().method("getSearchDestinations").will(returnValue(provider4Dest));

 		destinationProviderDescr4 = mock(IDestinationsProviderDescription.class, DESTINATION_PROVIDER_ID_4);

 		destinationProviderDescr4.stubs().method("getId").will(returnValue(DESTINATION_PROVIDER_ID_4));

@@ -236,28 +236,28 @@
 		destinationCategory1 = mock(IDestinationCategoryDescription.class, DESTINATION_CATEGORY_NAME_1);

 		destinationCategory1.stubs().method("getId").will(returnValue(DESTINATION_CATEGORY_ID_1));

 		destinationCategory1.stubs().method("getDisplayName").will(returnValue(DESTINATION_CATEGORY_NAME_1));

-		final Set<String> cat1Providers = new HashSet<String>(Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_1}));

+		final List<String> cat1Providers = Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_1});

 		destinationCategory1.stubs().method("getDestinationProviderIds").will(returnValue(cat1Providers));

 		destinationCategory1.stubs().method("getDestinationsClass").will(returnValue(ISearchDestination.class));

 

 		destinationCategory2 = mock(IDestinationCategoryDescription.class, DESTINATION_CATEGORY_NAME_2);

 		destinationCategory2.stubs().method("getId").will(returnValue(DESTINATION_CATEGORY_ID_2));

 		destinationCategory2.stubs().method("getDisplayName").will(returnValue(DESTINATION_CATEGORY_NAME_2));

-		final Set<String> cat2Providers = new HashSet<String>(Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_2, DESTINATION_PROVIDER_ID_3}));

+		final List<String> cat2Providers = Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_2, DESTINATION_PROVIDER_ID_3});

 		destinationCategory2.stubs().method("getDestinationProviderIds").will(returnValue(cat2Providers));

 		destinationCategory2.stubs().method("getDestinationsClass").will(returnValue(ISearchDestination.class));

 

 		destinationCategory3 = mock(IDestinationCategoryDescription.class, DESTINATION_CATEGORY_NAME_3);

 		destinationCategory3.stubs().method("getId").will(returnValue(DESTINATION_CATEGORY_ID_3));

 		destinationCategory3.stubs().method("getDisplayName").will(returnValue(DESTINATION_CATEGORY_NAME_3));

-		final Set<String> cat3Providers = new HashSet<String>(Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_4}));

+		final List<String> cat3Providers =Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_4});

 		destinationCategory3.stubs().method("getDestinationProviderIds").will(returnValue(cat3Providers));

 		destinationCategory3.stubs().method("getDestinationsClass").will(returnValue(ISearchDestination.class));

 		

 		destinationCategory4 = mock(IDestinationCategoryDescription.class, DESTINATION_CATEGORY_NAME_4);

 		destinationCategory4.stubs().method("getId").will(returnValue(DESTINATION_CATEGORY_ID_4));

 		destinationCategory4.stubs().method("getDisplayName").will(returnValue(DESTINATION_CATEGORY_NAME_4));

-		final Set<String> cat4Providers = new HashSet<String>(Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_5}));

+		final List<String> cat4Providers = Arrays.asList(new String[]{DESTINATION_PROVIDER_ID_5});

 		destinationCategory4.stubs().method("getDestinationProviderIds").will(returnValue(cat4Providers));

 		destinationCategory4.stubs().method("getDestinationsClass").will(returnValue(ISearchDestination.class));

 	}

@@ -268,7 +268,7 @@
 		provider1.stubs().method("getId").will(returnValue(PROVIDER_ID_1));

 		provider1.stubs().method("getDisplayName").will(returnValue(PROVIDER_NAME_1));

 		provider1.stubs().method("getObjectType").will(returnValue(objectType_1.proxy()));

-		final Set<IDestinationCategoryDescription> provider1Cats = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1.proxy(), destinationCategory2.proxy()}));

+		final List<IDestinationCategoryDescription> provider1Cats = Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1.proxy(), destinationCategory2.proxy()});

 		provider1.stubs().method("getSupportedDestinationCategories").will(returnValue(provider1Cats));

 		provider1.stubs().method("supportsTextSearch").will(returnValue(true));

 		

@@ -276,7 +276,7 @@
 		provider2.stubs().method("getId").will(returnValue(PROVIDER_ID_2));

 		provider2.stubs().method("getDisplayName").will(returnValue(PROVIDER_NAME_2));

 		provider2.stubs().method("getObjectType").will(returnValue(objectType_1.proxy()));

-		final Set<IDestinationCategoryDescription> provider2Cats = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory3.proxy(), destinationCategory4.proxy()}));

+		final List<IDestinationCategoryDescription> provider2Cats =Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory3.proxy(), destinationCategory4.proxy()});

 		provider2.stubs().method("getSupportedDestinationCategories").will(returnValue(provider2Cats));

 		provider2.stubs().method("supportsTextSearch").will(returnValue(false));

 		

@@ -284,7 +284,7 @@
 		provider3.stubs().method("getId").will(returnValue(PROVIDER_ID_3));

 		provider3.stubs().method("getDisplayName").will(returnValue(PROVIDER_NAME_3));

 		provider3.stubs().method("getObjectType").will(returnValue(objectType_1.proxy()));

-		final Set<IDestinationCategoryDescription> provider3Cats = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory2.proxy(), destinationCategory3.proxy()}));

+		final List<IDestinationCategoryDescription> provider3Cats = Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory2.proxy(), destinationCategory3.proxy()});

 		provider3.stubs().method("getSupportedDestinationCategories").will(returnValue(provider3Cats));

 		provider3.stubs().method("supportsTextSearch").will(returnValue(true));

 		

@@ -292,7 +292,7 @@
 		provider4.stubs().method("getId").will(returnValue(PROVIDER_ID_4));

 		provider4.stubs().method("getDisplayName").will(returnValue(PROVIDER_NAME_4));

 		provider4.stubs().method("getObjectType").will(returnValue(objectType_2.proxy()));

-		final Set<IDestinationCategoryDescription> provider4Cats = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1.proxy(), destinationCategory4.proxy()}));

+		final List<IDestinationCategoryDescription> provider4Cats = Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1.proxy(), destinationCategory4.proxy()});

 		provider4.stubs().method("getSupportedDestinationCategories").will(returnValue(provider4Cats));

 		provider4.stubs().method("supportsTextSearch").will(returnValue(false));

 	}

@@ -321,14 +321,14 @@
 	private void setupObjectTypesExtensionParser()

 	{

 		objectTypeExtensionParser = mock(IObjectTypeExtensionParser.class);

-		final Set<IObjectTypeDescription> objects = new HashSet<IObjectTypeDescription>(Arrays.asList(new IObjectTypeDescription[]{objectType_1.proxy(), objectType_2.proxy()}));

+		final List<IObjectTypeDescription> objects = Arrays.asList(new IObjectTypeDescription[]{objectType_1.proxy(), objectType_2.proxy()});

 		objectTypeExtensionParser.stubs().method("readContributions").will(returnValue(objects));

 	}

 	

 	private void setupDestCategoryExtensionParser()

 	{

 		destCategoryExtensionParser = mock(IDestinationCategoryExtensionParser.class);

-		final Set<IDestinationCategoryDescription> categories = new HashSet<IDestinationCategoryDescription>();

+		final List<IDestinationCategoryDescription> categories = new ArrayList<IDestinationCategoryDescription>();

 		categories.addAll(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1.proxy(), destinationCategory2.proxy(), destinationCategory3.proxy(), destinationCategory4.proxy()}));

 		destCategoryExtensionParser.stubs().method("readContributions").will(returnValue(categories));

 	}

@@ -336,7 +336,7 @@
 	private void setupDestProvidersExtParser()

 	{

 		destProviderExtensionParser = mock(IDestinationsProviderExtensionParser.class);

-		final Set<IDestinationsProviderDescription> providers = new HashSet<IDestinationsProviderDescription>();

+		final List<IDestinationsProviderDescription> providers = new ArrayList<IDestinationsProviderDescription>();

 		providers.addAll(Arrays.asList(new IDestinationsProviderDescription[]{destinationProviderDescr1.proxy(), destinationProviderDescr2.proxy(), destinationProviderDescr3.proxy(), destinationProviderDescr4.proxy(), destinationProviderDescr5.proxy()}));

 		destProviderExtensionParser.stubs().method("readContributions").will(returnValue(providers));

 	}

@@ -344,7 +344,7 @@
 	private void setupSearchProvidersExtParser()

 	{

 		searchProviderExtensionParser = mock(ISearchProvidersExtensionParser.class);

-		final Set<ISearchProviderDescription> providers = new HashSet<ISearchProviderDescription>();

+		final List<ISearchProviderDescription> providers = new ArrayList<ISearchProviderDescription>();

 		providers.addAll(Arrays.asList(new ISearchProviderDescription[]{provider1.proxy(), provider2.proxy(), provider3.proxy(), provider4.proxy()}));

 		searchProviderExtensionParser.stubs().method("readContributions").will(returnValue(providers));

 	}

@@ -367,11 +367,11 @@
 	{

 		final Mock<ISubdestinationsActivationConfig> activationConfig = mock(ISubdestinationsActivationConfig.class);

 		

-		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_2.proxy()), ANYTHING, ANYTHING).will(returnValue(new HashSet<ISearchSubdestination>()));

-		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory1.proxy()), ANYTHING).will(returnValue(new HashSet<ISearchSubdestination>(Arrays.asList(new ISearchSubdestination[]{subdestination1.proxy()}))));

-		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory2.proxy()), ANYTHING).will(returnValue(new HashSet<ISearchSubdestination>(Arrays.asList(new ISearchSubdestination[]{subdestination2.proxy(), subdestination3.proxy()}))));

-		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory3.proxy()), ANYTHING).will(returnValue(new HashSet<ISearchSubdestination>()));

-		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory4.proxy()), ANYTHING).will(returnValue(new HashSet<ISearchSubdestination>()));

+		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_2.proxy()), ANYTHING, ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));

+		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory1.proxy()), ANYTHING).will(returnValue(Arrays.asList(new ISearchSubdestination[]{subdestination1.proxy()})));

+		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory2.proxy()), ANYTHING).will(returnValue(Arrays.asList(new ISearchSubdestination[]{subdestination2.proxy(), subdestination3.proxy()})));

+		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory3.proxy()), ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));

+		activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1.proxy()), eq(destinationCategory4.proxy()), ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));

 		

 		activationConfig.stubs().method("isSubdestinationActive").with(eq(subdestination2.proxy()), eq(objectType_1.proxy()), eq(destinationCategory2.proxy()), eq(provider1.proxy())).will(checkValueForSelection());

 		Constraint [] constraints = {eq(objectType_1.proxy()), eq(destinationCategory2.proxy()), eq(provider1.proxy()),eq(subdestination2.proxy()), eq(new Boolean(false))};

@@ -409,7 +409,7 @@
 	public void testGetAvailableSearchProvidersDescriptionsForObjectType()

 	{

 

-		final Set<ISearchProviderDescription> descriptions = searchProviderConfig.getAvailableSearchProviderDescriptions(objectType_1.proxy());

+		final List<ISearchProviderDescription> descriptions = searchProviderConfig.getAvailableSearchProviderDescriptions(objectType_1.proxy());

 		assertEquals("Three providers expected", 3, descriptions.size());

 		final List<String> ids = new ArrayList<String>();

 		for (ISearchProviderDescription d : descriptions)

@@ -434,7 +434,7 @@
 	

 	public void testGetAvailableDestinationCategoriesForObjectType()

 	{

-		final Set<String> cat1Ids = new HashSet<String>();

+		final List<String> cat1Ids = new ArrayList<String>();

 		for(IDestinationCategoryDescription cat : searchProviderConfig.getAvailableDestinationCategoriesForObjectType(objectType_1.proxy()))

 		{

 			cat1Ids.add(cat.getId());

@@ -445,7 +445,7 @@
 		assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_3));

 		assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_4));

 

-		final Set<String> cat2Ids = new HashSet<String>();

+		final List<String> cat2Ids = new ArrayList<String>();

 		for(IDestinationCategoryDescription cat : searchProviderConfig.getAvailableDestinationCategoriesForObjectType(objectType_2.proxy()))

 		{

 			cat2Ids.add(cat.getId());

@@ -517,27 +517,27 @@
 	

 	public void testGetDestinationProvidersForCategory()

 	{

-		final Set<IDestinationsProviderDescription> providers1 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory1.proxy());

+		final List<IDestinationsProviderDescription> providers1 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory1.proxy());

 		assertEquals("One destination provider expected", 1, providers1.size());

 		assertTrue("Destination provider 1 not returned", providers1.contains(destinationProviderDescr1.proxy()));

 		

-		final Set<IDestinationsProviderDescription> providers2 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory2.proxy());

+		final List<IDestinationsProviderDescription> providers2 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory2.proxy());

 		assertEquals("Two destination providers expected", 2, providers2.size());

 		assertTrue("Destination provider 2 not returned", providers2.contains(destinationProviderDescr2.proxy()));

 		assertTrue("Destination provider 3 not returned", providers2.contains(destinationProviderDescr3.proxy()));

 

-		final Set<IDestinationsProviderDescription> providers3 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory3.proxy());

+		final List<IDestinationsProviderDescription> providers3 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory3.proxy());

 		assertEquals("One destination provider expected", 1, providers3.size());

 		assertTrue("Destination provider 4 not returned", providers3.contains(destinationProviderDescr4.proxy()));

 

-		final Set<IDestinationsProviderDescription> providers4 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory4.proxy());

+		final List<IDestinationsProviderDescription> providers4 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory4.proxy());

 		assertEquals("One destination provider expected", 1, providers4.size());

 		assertTrue("Destination provider 5 not returned", providers4.contains(destinationProviderDescr5.proxy()));

 	}	

 	

 	public void testGetSearchDestinations()

 	{

-		Set<ISearchDestination> destinations = searchProviderConfig.getSearchDestinations(destinationCategory1.proxy(), destinationProvider1.proxy());

+		List<ISearchDestination> destinations = searchProviderConfig.getSearchDestinations(destinationCategory1.proxy(), destinationProvider1.proxy());

 		assertEquals("Two destinations expected", 2, destinations.size());

 		assertTrue("Destination 1 not returned", destinations.contains(searchDestination1.proxy()));

 		assertTrue("Destination 2 not returned", destinations.contains(searchDestination2.proxy()));

@@ -572,16 +572,16 @@
 	

 	public void testGetAvailableSearchSubdestinations()

 	{

-		final Set<ISearchSubdestination> subdest1 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory1.proxy(), provider1.proxy());

+		final List<ISearchSubdestination> subdest1 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory1.proxy(), provider1.proxy());

 		assertEquals("One subdestination expected", 1, subdest1.size());

 		assertTrue("Subdestination 1 not returned", subdest1.contains(subdestination1.proxy()));

 		

-		final Set<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory2.proxy(), provider1.proxy());

+		final List<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory2.proxy(), provider1.proxy());

 		assertEquals("Two subdestination expected", 2, subdest2.size());

 		assertTrue("Subdestination 2 not returned", subdest2.contains(subdestination2.proxy()));

 		assertTrue("Subdestination 3 not returned", subdest2.contains(subdestination3.proxy()));

 

-		final Set<ISearchSubdestination> subdest3 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory3.proxy(), provider2.proxy());

+		final List<ISearchSubdestination> subdest3 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory3.proxy(), provider2.proxy());

 		assertEquals("No subdestination expected", 0, subdest3.size());

 	}

 	

@@ -589,7 +589,7 @@
 	public void testGetActiveSearchSubdestinations()

 	{

 		

-		final Set<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory2.proxy(), provider1.proxy());

+		final List<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1.proxy(), destinationCategory2.proxy(), provider1.proxy());

 		assertEquals("Two subdestination expected", 2, subdest2.size());

 		assertTrue("Subdestination 2 not returned", subdest2.contains(subdestination2.proxy()));

 		assertTrue("Subdestination 3 not returned", subdest2.contains(subdestination3.proxy()));

@@ -616,7 +616,7 @@
 	

 	public void testGetAvailableDestinationProviders()

 	{

-		final Set<IDestinationsProviderDescription> providers = searchProviderConfig.getAvailableDestinationProviders();

+		final List<IDestinationsProviderDescription> providers = searchProviderConfig.getAvailableDestinationProviders();

 		assertEquals("5 providers expected", 5, providers.size());

 		assertTrue("destinationProviderDescr1 not found", providers.contains(destinationProviderDescr1.proxy()));

 		assertTrue("destinationProviderDescr2 not found", providers.contains(destinationProviderDescr2.proxy()));

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProvidersExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProvidersExtensionParserTest.java
index 0124741..3dd8905 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProvidersExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchProvidersExtensionParserTest.java
@@ -10,22 +10,21 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.ISearchProvider;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.SearchProvidersExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.ISearchProvider;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.SearchProvidersExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class SearchProvidersExtensionParserTest extends MockObjectTestCase

@@ -83,7 +82,7 @@
 		obj2.stubs().method("getId").will(returnValue(OBJECT_ID_2));

 		obj2.stubs().method("getDisplayName").will(returnValue(OBJECT_NAME_2));

 		

-		objTypeExtParser.stubs().method("readContributions").will(returnValue(new HashSet<IObjectTypeDescription>(Arrays.asList(new IObjectTypeDescription[]{obj1.proxy(), obj2.proxy()}))));

+		objTypeExtParser.stubs().method("readContributions").will(returnValue(Arrays.asList(new IObjectTypeDescription[]{obj1.proxy(), obj2.proxy()})));

 	}

 

 	private void setupDestCategoriesExtParser()

@@ -94,7 +93,7 @@
 		final Mock<IDestinationCategoryDescription> cat2 = mock(IDestinationCategoryDescription.class);

 		cat2.stubs().method("getId").will(returnValue(CATEGORY_ID_2));

 		

-		destCategoryParser.stubs().method("readContributions").will(returnValue(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{cat1.proxy(), cat2.proxy()}))));

+		destCategoryParser.stubs().method("readContributions").will(returnValue(Arrays.asList(new IDestinationCategoryDescription[]{cat1.proxy(), cat2.proxy()})));

 	}

 	

 	private void setupCategoryConfigElements()

@@ -124,7 +123,7 @@
 	

 	public void testReadProviders()

 	{

-		final Set<ISearchProviderDescription> providersSet = testParser.readContributions();

+		final List<ISearchProviderDescription> providersSet = testParser.readContributions();

 		assertEquals("One provider expeceted", 1, providersSet.size());

 		final ISearchProviderDescription provider = providersSet.iterator().next();

 		

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchSubdestinationExtensionParserTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchSubdestinationExtensionParserTest.java
index 498fa5a..e19302b 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchSubdestinationExtensionParserTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SearchSubdestinationExtensionParserTest.java
@@ -10,17 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.api.IConflict;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.xp.impl.SearchSubdestinationExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.api.IConflict;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.xp.impl.SearchSubdestinationExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class SearchSubdestinationExtensionParserTest extends MockObjectTestCase

@@ -109,7 +109,7 @@
 

 	public void testReadSubdestinations()

 	{

-		final Set<ISearchSubdestination> subdestSet = testParser.readContributions();

+		final List<ISearchSubdestination> subdestSet = testParser.readContributions();

 		assertEquals("Three subdestination expected", 3, subdestSet.size());

 

 		for(final ISearchSubdestination subdest : subdestSet)

diff --git a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SubdestinationsActivationConfigTest.java b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SubdestinationsActivationConfigTest.java
index ba68ccb..62cd95a 100644
--- a/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SubdestinationsActivationConfigTest.java
+++ b/tests/org.eclipse.platform.discovery.runtime.test.unit/src/org/eclipse/platform/discovery/runtime/test/unit/internal/SubdestinationsActivationConfigTest.java
@@ -10,19 +10,20 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.runtime.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.api.IConflict;

-import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;

-import org.eclipse.platform.discovery.runtime.internal.SubdestinationsActivationConfig;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;

-import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.platform.discovery.runtime.api.IConflict;
+import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
+import org.eclipse.platform.discovery.runtime.internal.SubdestinationsActivationConfig;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
+import org.eclipse.platform.discovery.runtime.internal.xp.ISearchSubdestinationExtensionParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
 

 

 public class SubdestinationsActivationConfigTest extends MockObjectTestCase

@@ -86,15 +87,14 @@
 		searchProvider = mock(ISearchProviderDescription.class);

 		

 		parser = mock(ISearchSubdestinationExtensionParser.class);

-		parser.stubs().method("readContributions").will(returnValue(new HashSet<ISearchSubdestination>(Arrays.asList(new ISearchSubdestination[]{subdestination.proxy(),

-				otherSubdestination.proxy(),subdestinationWithConflicts.proxy()}))));

+		parser.stubs().method("readContributions").will(returnValue(Arrays.asList(new ISearchSubdestination[]{subdestination.proxy(), otherSubdestination.proxy(),subdestinationWithConflicts.proxy()})));

 		

 		config = new SubdestinationsActivationConfig(parser.proxy());

 	}

 	

 	public void testGetAvailableSubdestinations()

 	{

-		final Set<ISearchSubdestination> result = config.getAvailableSearchSubdestinations(objectType.proxy(), destinationCategory.proxy(), searchProvider.proxy());

+		final List<ISearchSubdestination> result = config.getAvailableSearchSubdestinations(objectType.proxy(), destinationCategory.proxy(), searchProvider.proxy());

 		assertEquals("Two subdestinations expected", 2, result.size());

 		assertTrue("Subdestination not found", result.contains(subdestination.proxy()));

 		assertTrue("Subdestination not found", result.contains(subdestinationWithConflicts.proxy()));

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/AdvancedSearchParamsDisplayerTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/AdvancedSearchParamsDisplayerTest.java
index 8b0d0a2..c695387 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/AdvancedSearchParamsDisplayerTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/AdvancedSearchParamsDisplayerTest.java
@@ -91,7 +91,7 @@
 	private void setupXpParser()

 	{

 		xpParser = createThreadSafeNiceMock(IAdvancedSearchParamsUiContribXpParser.class);

-		EasyMock.expect(xpParser.readContributions()).andStubReturn(new HashSet<IAdvancedSearchParamsUiContributorDescr>(Arrays.asList(new IAdvancedSearchParamsUiContributorDescr[] { searchParamsUiContribDescr })));

+		EasyMock.expect(xpParser.readContributions()).andStubReturn(Arrays.asList(new IAdvancedSearchParamsUiContributorDescr[] { searchParamsUiContribDescr }));

 		EasyMock.replay(xpParser);

 	}

 

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/ComboSelectorTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/ComboSelectorTest.java
index 6ed482a..b528ad4 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/ComboSelectorTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/ComboSelectorTest.java
@@ -15,9 +15,9 @@
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.List;
 
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -72,13 +72,15 @@
 		final Combo comboValues = getObjectTypesCombo();

 		final java.util.List<String> items = Arrays.asList(comboTester

 				.getItems(comboValues));

-		assertEquals("Three items expected", 3, items.size()); //$NON-NLS-1$

+		assertEquals("Three items expected", 4, items.size()); //$NON-NLS-1$

 		assertTrue(

 				"Object " + OBJECT_TYPE_NAME_1 + " not found", items.contains(OBJECT_TYPE_NAME_1)); //$NON-NLS-1$ //$NON-NLS-2$

 		assertTrue(

 				"Object " + OBJECT_TYPE_NAME_2 + " not found", items.contains(OBJECT_TYPE_NAME_2)); //$NON-NLS-1$ //$NON-NLS-2$

 		assertTrue(

-				"Object " + OBJECT_TYPE_NAME_3 + " not found", items.contains(OBJECT_TYPE_NAME_3)); //$NON-NLS-1$ //$NON-NLS-2$

+				"Object " + OBJECT_TYPE_NAME_3 + " not found", items.contains(OBJECT_TYPE_NAME_3)); //$NON-NLS-1$ //$NON-NLS-2$
+		assertTrue("Object " + OBJECT_TYPE_NO_DESTINATIONS_NAME + " not found", items.contains(OBJECT_TYPE_NO_DESTINATIONS_NAME)); //$NON-NLS-1$ //$NON-NLS-2$
+

 

 	}

 

@@ -86,7 +88,7 @@
 

 		final ComboSelector<IObjectTypeDescription> mySelector = openSearchForComboSelectorUI();

 

-		final Set<IObjectTypeDescription> newInput = new HashSet<IObjectTypeDescription>();

+		final List<IObjectTypeDescription> newInput = new ArrayList<IObjectTypeDescription>();

 		newInput.add(objectType1);

 		getDisplay().asyncExec(new Runnable() {

 

@@ -97,7 +99,7 @@
 		final Combo comboValues = getObjectTypesCombo();

 		final java.util.List<String> items = Arrays.asList(comboTester

 				.getItems(comboValues));

-		assertEquals("Three items expected", 1, items.size()); //$NON-NLS-1$

+		assertEquals("One item expected", 1, items.size()); //$NON-NLS-1$

 		assertTrue(

 				"Object " + OBJECT_TYPE_NAME_1 + " not found", items.contains(OBJECT_TYPE_NAME_1)); //$NON-NLS-1$ //$NON-NLS-2$

 	}

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/InteractiveComboSelectorTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/InteractiveComboSelectorTest.java
index 289c37a..7e727b5 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/InteractiveComboSelectorTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/InteractiveComboSelectorTest.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.comp.internal;

 

-import java.util.HashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.easymock.EasyMock;
 import org.eclipse.platform.discovery.runtime.api.IDisplayableObject;
@@ -35,7 +35,7 @@
 

 	private IDisplayableObject object1;

 	private IDisplayableObject object2;

-	private Set<IDisplayableObject> objectsSet;

+	private List<IDisplayableObject> objectsSet;

 

 	@Override

 	public Display setUpPDE() throws Exception

@@ -48,7 +48,7 @@
 		EasyMock.expect(object2.getDisplayName()).andStubReturn(OBJECT2_LABEL);

 		EasyMock.replay(object1, object2);

 

-		objectsSet = new HashSet<IDisplayableObject>();

+		objectsSet = new ArrayList<IDisplayableObject>();

 		objectsSet.add(object1);

 		objectsSet.add(object2);

 

@@ -56,7 +56,7 @@
 	}

 	

 	@SuppressWarnings("unchecked")

-	private InteractiveComboSelector<IDisplayableObject> openSelector(final Set<IDisplayableObject> objectsToDisplay)

+	private InteractiveComboSelector<IDisplayableObject> openSelector(final List<IDisplayableObject> objectsToDisplay)

 	{

 		final InteractiveComboSelector<IDisplayableObject>[] selector = new InteractiveComboSelector[1];

 		testShell = createTestShell();

@@ -81,7 +81,7 @@
 		final InteractiveComboSelector<IDisplayableObject> selector = openSelector(objectsSet);

 		assertTrue("Combo should be enabled", comboTester.getEnabled(getCombo()));

 

-		setSelectorInput(selector, new HashSet<IDisplayableObject>());

+		setSelectorInput(selector, new ArrayList<IDisplayableObject>());

 		assertFalse("Combo should be disabled", comboTester.getEnabled(getCombo()));

 		

 		setSelectorInput(selector, objectsSet);

@@ -103,7 +103,7 @@
 		return (Combo) FINDER.find(new SiblingTextMatcher(COMBO_LABEL, null, Combo.class));

 	}

 	

-	private void setSelectorInput(final InteractiveComboSelector<IDisplayableObject> selector, final Set<IDisplayableObject> input)

+	private void setSelectorInput(final InteractiveComboSelector<IDisplayableObject> selector, final List<IDisplayableObject> input)

 	{

 		getDisplay().syncExec(new Runnable()

 		{

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleTestFixture.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleTestFixture.java
index d028dcd..73eddc8 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleTestFixture.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleTestFixture.java
@@ -10,9 +10,12 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.comp.internal;

 

+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -61,13 +64,18 @@
 	

 	protected IObjectTypeDescription objectType1;

 	protected IObjectTypeDescription objectType2;

-	protected IObjectTypeDescription objectType3;

+	protected IObjectTypeDescription objectType3;
+	protected IObjectTypeDescription objectTypeNoDestinations;
+

 	protected final String OBJECT_TYPE_ID1 = "org.eclipse.platform.discovery.objecttype1";

 	protected final String OBJECT_TYPE_ID2 = "org.eclipse.platform.discovery.objecttype2";

-	protected final String OBJECT_TYPE_ID3 = "org.eclipse.platform.discovery.objecttype3";

+	protected final String OBJECT_TYPE_ID3 = "org.eclipse.platform.discovery.objecttype3";
+	protected final String OBJECT_TYPE_NO_DESTINATIONS_ID = "org.eclipse.platform.discovery.nodestinations_objecttype";

 	protected final String OBJECT_TYPE_NAME_1 = "First object type";

 	protected final String OBJECT_TYPE_NAME_2 = "Second object type";

-	protected final String OBJECT_TYPE_NAME_3 = "Third object type";

+	protected final String OBJECT_TYPE_NAME_3 = "Third object type";
+	protected final String OBJECT_TYPE_NO_DESTINATIONS_NAME = "Destination-less object type";
+

 

 	protected IDestinationsProviderDescription destProviderDescr_cat1;

 	protected IDestinationsProviderDescription destProviderDescr_cat2;

@@ -105,11 +113,15 @@
 	protected Map<ISearchSubdestination, Boolean> subdestinationsActivityMap;

 

 	protected ISearchProviderDescription supportingTextSearchProviderDescription;

-	protected ISearchProviderDescription unsupportingTextSearchProviderDescription;

+	protected ISearchProviderDescription unsupportingTextSearchProviderDescription;
+	protected ISearchProviderDescription searchProviderForObjTypeWithNoDestinations_Description;
 	protected final static String SUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID = "SUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID";

-	protected final static String UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID = "UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID";

+	protected final static String UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID = "UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID";
+	protected final static String SEARCH_PROVIDER_NO_DESTINATIONS_ID = "SEARCH_PROVIDER_NO_DESTINATIONS_ID";
+

 	protected ISearchProvider supportingTextSearchProviderInstance;

-	protected ISearchProvider unsupportingTextSearchProviderInstance;

+	protected ISearchProvider unsupportingTextSearchProviderInstance;
+	protected ISearchProvider searchProviderForObjTypeWithNoDestinations_Instance;
 

 	protected ISearchProviderConfiguration searchProviderConfiguration;

 

@@ -180,9 +192,13 @@
 		

 		objectType3 = createThreadSafeNiceMock(IObjectTypeDescription.class);

 		EasyMock.expect(objectType3.getId()).andStubReturn(OBJECT_TYPE_ID3);

-		EasyMock.expect(objectType3.getDisplayName()).andStubReturn(OBJECT_TYPE_NAME_3);

+		EasyMock.expect(objectType3.getDisplayName()).andStubReturn(OBJECT_TYPE_NAME_3);
+		
+		objectTypeNoDestinations = createThreadSafeNiceMock(IObjectTypeDescription.class);
+		EasyMock.expect(objectTypeNoDestinations.getId()).andStubReturn(OBJECT_TYPE_NO_DESTINATIONS_ID);
+		EasyMock.expect(objectTypeNoDestinations.getDisplayName()).andStubReturn(OBJECT_TYPE_NO_DESTINATIONS_NAME);

 

-		EasyMock.replay(objectType1, objectType2, objectType3);

+		EasyMock.replay(objectType1, objectType2, objectType3, objectTypeNoDestinations);

 	}

 

 	private void setupDestinations()

@@ -244,14 +260,24 @@
 

 			public ISearchProviderDescription getActiveSearchProvider(IObjectTypeDescription objectType,

 											IDestinationCategoryDescription destinationCategory) throws ProviderNotFoundException

-			{

+			{
+				if (destinationCategory==null) 
+				{
+					if(objectType.getId().equals(objectTypeNoDestinations.getId())) {
+						return searchProviderForObjTypeWithNoDestinations_Description;
+					}else{
+						throw new ProviderNotFoundException("Provider not found");
+					}
+				}
 				if (objectType.getId().equals(objectType2.getId()) && (destinationCategory.getId().equals(CATEGORY_ID_2)))

 				{

 					return supportingTextSearchProviderDescription;

-				} else if (objectType.getId().equals(objectType1.getId()) && (destinationCategory.getId().equals(CATEGORY_ID_1)))

+				}
+				if (objectType.getId().equals(objectType1.getId()) && (destinationCategory.getId().equals(CATEGORY_ID_1)))

 				{

 					return unsupportingTextSearchProviderDescription;

-				}else if (objectType.getId().equals(objectType3.getId()) && (destinationCategory.getId().equals(CATEGORY_ID_3)))

+				}
+				if (objectType.getId().equals(objectType3.getId()) && (destinationCategory.getId().equals(CATEGORY_ID_3)))

 				{

 					return supportingTextSearchProviderDescription;

 				}

@@ -259,47 +285,49 @@
 				throw new ProviderNotFoundException("Provider not found");

 			}

 

-			public Set<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(IObjectTypeDescription objectType)

+			public List<IDestinationCategoryDescription> getAvailableDestinationCategoriesForObjectType(IObjectTypeDescription objectType)

 			{

 				if (objectType.getId().equals(objectType1.getId()))

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category1 }));

+					return Arrays.asList(new IDestinationCategoryDescription[] { category1 });

 				} else if (objectType.getId().equals(objectType2.getId()))

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category2 }));

-				} else 

+					return Arrays.asList(new IDestinationCategoryDescription[] { category2 });

+				} else if (objectType.getId().equals(objectType3.getId()))

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category3 }));

-				}

+					return Arrays.asList(new IDestinationCategoryDescription[] { category3 });

+				}
+				
+				return Collections.emptyList();

 			}

 

-			public Set<ISearchSubdestination> getAvailableSearchSubdestinations(IObjectTypeDescription objectType,

+			public List<ISearchSubdestination> getAvailableSearchSubdestinations(IObjectTypeDescription objectType,

 											IDestinationCategoryDescription destinationCategory, ISearchProviderDescription searchProvider)

 			{

 				if (objectType.getId().equals(OBJECT_TYPE_ID1))

 				{

-					return new HashSet<ISearchSubdestination>(Arrays.asList(subdestination1, subdestination2));

+					return Arrays.asList(subdestination1, subdestination2);

 				}

-				return new HashSet<ISearchSubdestination>();

+				return new ArrayList<ISearchSubdestination>();

 			}

 

-			public Set<IDestinationCategoryDescription> getDestinationCategories()

+			public List<IDestinationCategoryDescription> getDestinationCategories()

 			{

-				return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category1, category2 ,category3}));

+				return Arrays.asList(new IDestinationCategoryDescription[] { category1, category2 ,category3});

 			}

 

-			public Set<IDestinationCategoryDescription> getDestinationCategoriesForDestination(ISearchDestination destination)

+			public List<IDestinationCategoryDescription> getDestinationCategoriesForDestination(ISearchDestination destination)

 											throws DestinationCategoryNotFoundException

 			{

 				if (destination.equals(destination1))

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category1 }));

+					return Arrays.asList(new IDestinationCategoryDescription[] { category1 });

 				} if (destination.equals(destination5))

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category3 }));

+					return Arrays.asList(new IDestinationCategoryDescription[] { category3 });

 				}else

 				{

-					return new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[] { category2 }));

+					return Arrays.asList(new IDestinationCategoryDescription[] { category2 });

 				}

 			}

 

@@ -309,40 +337,40 @@
 				return subdestinationsActivityMap.get(subdestination);

 			}

 

-			public Set<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType)

+			public List<ISearchProviderDescription> getAvailableSearchProviderDescriptions(IObjectTypeDescription searchObjectType)

 			{

 				fail("Unexpected invocation");

 				return null;

 			}

 

-			public Set<IObjectTypeDescription> getObjectTypes()

+			public List<IObjectTypeDescription> getObjectTypes()

 			{

-				return new HashSet<IObjectTypeDescription>(Arrays.asList(new IObjectTypeDescription[] { objectType1, objectType2, objectType3 }));

+				return Arrays.asList(new IObjectTypeDescription[] { objectType1, objectType2, objectType3, objectTypeNoDestinations });

 			}

 

-			public Set<IDestinationsProviderDescription> getDestinationProvidersForCategory(IDestinationCategoryDescription category)

+			public List<IDestinationsProviderDescription> getDestinationProvidersForCategory(IDestinationCategoryDescription category)

 			{

 				if (category.equals(category1))

 				{

-					return new HashSet<IDestinationsProviderDescription>(Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat1}));

+					return Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat1});

 				} if (category.equals(category2))

 				{

-					return new HashSet<IDestinationsProviderDescription>(Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat2}));

+					return Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat2});

 				}else

 				{

-					return new HashSet<IDestinationsProviderDescription>(Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat3}));

+					return Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat3});

 				}

 			}

 

-			public Set<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category,

+			public List<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category,

 											IDestinationsProvider providerDescription)

 			{

-				return providerDescription.getSearchDestinations();

+				return new ArrayList<ISearchDestination>(providerDescription.getSearchDestinations());

 			}

 

-			public Set<IDestinationsProviderDescription> getAvailableDestinationProviders()

+			public List<IDestinationsProviderDescription> getAvailableDestinationProviders()

 			{

-				return new HashSet<IDestinationsProviderDescription>(Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat1, destProviderDescr_cat2, destProviderDescr_cat3}));

+				return Arrays.asList(new IDestinationsProviderDescription[]{destProviderDescr_cat1, destProviderDescr_cat2, destProviderDescr_cat3});

 			}

 		};

 	}

@@ -363,9 +391,13 @@
 		EasyMock.expect(supportingTextSearchProviderInstance.getGroupingHierarchies((ISearchDestination)EasyMock.anyObject(), (Set)EasyMock.anyObject())).andStubReturn(h);

 		

 		unsupportingTextSearchProviderInstance = EasyMock.createMock(ISearchProvider.class);

-		EasyMock.expect(unsupportingTextSearchProviderInstance.getGroupingHierarchies((ISearchDestination)EasyMock.anyObject(), (Set)EasyMock.anyObject())).andStubReturn(new HashSet<GroupingHierarchy>());

+		EasyMock.expect(unsupportingTextSearchProviderInstance.getGroupingHierarchies((ISearchDestination)EasyMock.anyObject(), (Set)EasyMock.anyObject())).andStubReturn(new HashSet<GroupingHierarchy>());
+		
+		searchProviderForObjTypeWithNoDestinations_Instance = EasyMock.createMock(ISearchProvider.class);

+		EasyMock.expect(searchProviderForObjTypeWithNoDestinations_Instance.getGroupingHierarchies((ISearchDestination)EasyMock.anyObject(), (Set)EasyMock.anyObject())).andStubReturn(new HashSet<GroupingHierarchy>());
 

-		EasyMock.replay(supportingTextSearchProviderInstance, unsupportingTextSearchProviderInstance);

+		EasyMock.replay(supportingTextSearchProviderInstance, unsupportingTextSearchProviderInstance, searchProviderForObjTypeWithNoDestinations_Instance);
+

 	}

 	

 	private void setupProviderDescriptions()

@@ -373,33 +405,53 @@
 		supportingTextSearchProviderDescription = createThreadSafeNiceMock(ISearchProviderDescription.class);

 		EasyMock.expect(supportingTextSearchProviderDescription.supportsTextSearch()).andStubReturn(true);

 		EasyMock.expect(supportingTextSearchProviderDescription.getId()).andStubReturn(SUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID);

-		EasyMock.expect(supportingTextSearchProviderDescription.createInstance()).andStubReturn(supportingTextSearchProviderInstance);

+		EasyMock.expect(supportingTextSearchProviderDescription.createInstance()).andStubReturn(supportingTextSearchProviderInstance);
+		EasyMock.expect(supportingTextSearchProviderDescription.getSupportedDestinationCategories()).andStubReturn(
+				new HashSet<IDestinationCategoryDescription>(Arrays.asList(category2, category3)));
+

 		

 		unsupportingTextSearchProviderDescription = createThreadSafeNiceMock(ISearchProviderDescription.class);

 		EasyMock.expect(unsupportingTextSearchProviderDescription.supportsTextSearch()).andStubReturn(false);

 		EasyMock.expect(unsupportingTextSearchProviderDescription.getId()).andStubReturn(UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID);

-		EasyMock.expect(unsupportingTextSearchProviderDescription.createInstance()).andStubReturn(unsupportingTextSearchProviderInstance);

+		EasyMock.expect(unsupportingTextSearchProviderDescription.createInstance()).andStubReturn(unsupportingTextSearchProviderInstance);
+		EasyMock.expect(supportingTextSearchProviderDescription.getSupportedDestinationCategories()).andStubReturn(
+				new HashSet<IDestinationCategoryDescription>(Arrays.asList(category1)));
+		
+		searchProviderForObjTypeWithNoDestinations_Description = createThreadSafeNiceMock(ISearchProviderDescription.class);
+		EasyMock.expect(searchProviderForObjTypeWithNoDestinations_Description.supportsTextSearch()).andStubReturn(true);
+		EasyMock.expect(searchProviderForObjTypeWithNoDestinations_Description.getId()).andStubReturn(SEARCH_PROVIDER_NO_DESTINATIONS_ID);
+		EasyMock.expect(searchProviderForObjTypeWithNoDestinations_Description.createInstance()).andStubReturn(searchProviderForObjTypeWithNoDestinations_Instance);
+		EasyMock.expect(searchProviderForObjTypeWithNoDestinations_Description.getSupportedDestinationCategories()).andStubReturn(new HashSet<IDestinationCategoryDescription>());
 

-		EasyMock.replay(supportingTextSearchProviderDescription, unsupportingTextSearchProviderDescription);

+

+		EasyMock.replay(supportingTextSearchProviderDescription, unsupportingTextSearchProviderDescription, searchProviderForObjTypeWithNoDestinations_Description);

 	}

 

 	private void setupDestinationCategories()

 	{

 		category1 = createThreadSafeNiceMock(IDestinationCategoryDescription.class);

 		EasyMock.expect(category1.getId()).andStubReturn(CATEGORY_ID_1);

-		EasyMock.expect(category1.getDisplayName()).andStubReturn(CATEGORY_NAME_1);

-

+		EasyMock.expect(category1.getDisplayName()).andStubReturn(CATEGORY_NAME_1);
+		EasyMock.expect(category1.getDestinationProviderIds()).andStubReturn(list(UNSUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID));

+		
 		category2 = createThreadSafeNiceMock(IDestinationCategoryDescription.class);

 		EasyMock.expect(category2.getId()).andStubReturn(CATEGORY_ID_2);

-		EasyMock.expect(category2.getDisplayName()).andStubReturn(CATEGORY_NAME_2);

+		EasyMock.expect(category2.getDisplayName()).andStubReturn(CATEGORY_NAME_2);
+		EasyMock.expect(category2.getDestinationProviderIds()).andStubReturn(list(SUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID));

 		

 		category3 = createThreadSafeNiceMock(IDestinationCategoryDescription.class);

 		EasyMock.expect(category3.getId()).andStubReturn(CATEGORY_ID_3);

-		EasyMock.expect(category3.getDisplayName()).andStubReturn(CATEGORY_NAME_3);

+		EasyMock.expect(category3.getDisplayName()).andStubReturn(CATEGORY_NAME_3);
+		EasyMock.expect(category3.getDestinationProviderIds()).andStubReturn(list(SUPPORTING_TEXT_SEARCH_SEARCH_PROVIDER_ID));

 

 		EasyMock.replay(category1, category2, category3);

 	}

 

+	private List<String> list(String... strings) {
+		return Arrays.asList(strings);
+	}
+
+
 	protected void selectFirstPossibleDestination(final Tree destinationsTree)

 	{

 		final TreeItem[] treeItems = treeTester.getItems(destinationsTree);

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleViewTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleViewTest.java
index 5865ab7..bfa2a3d 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleViewTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchConsoleViewTest.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.comp.internal;

 

-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -108,18 +107,6 @@
 		return getDisplay();

 	}

 

-	public void testViewShowsAllObjectTypesOnStartup() throws NotFoundException, MultipleFoundException

-	{

-		createViewToTest();

-		

-		final Combo comboValues = getObjectTypesCombo();

-		final java.util.List<String> items = Arrays.asList(comboTester.getItems(comboValues));

-		assertEquals("Three items expected", 3, items.size()); //$NON-NLS-1$

-		assertTrue("Object " + OBJECT_TYPE_NAME_1 + " not found", items.contains(OBJECT_TYPE_NAME_1)); //$NON-NLS-1$ //$NON-NLS-2$

-		assertTrue("Object " + OBJECT_TYPE_NAME_2 + " not found", items.contains(OBJECT_TYPE_NAME_2)); //$NON-NLS-1$ //$NON-NLS-2$

-		assertTrue("Object " + OBJECT_TYPE_NAME_3 + " not found", items.contains(OBJECT_TYPE_NAME_3)); //$NON-NLS-1$ //$NON-NLS-2$

-	}

-

 	public void testSelectingObjectsChangesDestinations() throws NotFoundException, MultipleFoundException

 	{

 		createViewToTest();

@@ -306,8 +293,8 @@
 		final Tree destinationsTree = getDestinationCategoriesTree();

 		final Text keywordsText = getKeywordsSearchText();

 

-		// By default, there is nothing selected, the  keyword text is set to DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint when the current search provider does not support text search 

-		assertEquals("The keyword text should be set to \"" + DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint + "\" when disabled", DiscoveryUIMessages.SearchConsoleView_NoDestinationSelectedHint, textTester.getText(keywordsText)); //$NON-NLS-1$ //$NON-NLS-2$

+		// By default, there is nothing selected, the  keyword text is set to SearchConsoleView_NoObjectTypeSelectedHint

+		assertEquals("The keyword text should be set to \"" + DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint + "\" when disabled", DiscoveryUIMessages.SearchConsoleView_NoObjectTypeSelectedHint, textTester.getText(keywordsText)); //$NON-NLS-1$ //$NON-NLS-2$

 		assertFalse("Keywords text should not be enabled", isEnabled(keywordsText)); //$NON-NLS-1$

 		

 		// Select object 3

@@ -482,8 +469,40 @@
 		catch (Exception e) {

 			fail("Unexpexted exception was thrown: "+e.getMessage()); //$NON-NLS-1$

 		}

-	}

-	

+	}
+	
+	public void testObjectTypeWithNoDestinations() throws NotFoundException, MultipleFoundException
+	{
+		createViewToTest();
+		final Combo objectTypesCombo = getObjectTypesCombo();
+		comboTester.actionSelectItem(objectTypesCombo, OBJECT_TYPE_NO_DESTINATIONS_NAME);
+		Text keywordSearchText = getKeywordsSearchText();
+		assertTrue("keyword text should be enabled", textTester.isEnabled(keywordSearchText));
+		assertEquals("did not expect a search criteria", "", textTester.getText(keywordSearchText));
+		assertTrue("keyword text should be editable", textTester.getEditable(keywordSearchText));
+		assertFalse("Search should be disabled because there is no search criteria", buttonTester.isEnabled(getSearchButton()));
+		
+		textTester.actionKeyString(getKeywordsSearchText(), "asd");
+		assertTrue("Search should be enabled because search criteria was provided", buttonTester.isEnabled(getSearchButton()));
+	}
+	
+	public void testRegisteringIllegalViewCustomization()
+	{
+		createViewToTest();
+		
+		final IGenericViewCustomization illegalCustomization = EasyMock.createMock(IGenericViewCustomization.class);
+		try
+		{
+			testView.registerViewCustomization(illegalCustomization);
+			fail("IllegalArgumentException for illegal customization"); //$NON-NLS-1$
+		}
+		catch(IllegalArgumentException e)
+		{
+			//expected
+		}
+	}
+	
+	
 	private Hyperlink findManageDestinationsLink()

 	{

 		final Hyperlink[] result = new Hyperlink[1];

@@ -514,22 +533,6 @@
 		return result[0];

 	}

 	

-	public void testRegisteringIllegalViewCustomization()

-	{

-		createViewToTest();

-		

-		final IGenericViewCustomization illegalCustomization = EasyMock.createMock(IGenericViewCustomization.class);

-		try

-		{

-			testView.registerViewCustomization(illegalCustomization);

-			fail("IllegalArgumentException for illegal customization"); //$NON-NLS-1$

-		}

-		catch(IllegalArgumentException e)

-		{

-			//expected

-		}

-	}

-	

 	private MyConsoleView createTestView()

 	{

 		final MyConsoleView[] v = new MyConsoleView[1];

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchDestinationsSelectorTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchDestinationsSelectorTest.java
index 924d191..51792ac 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchDestinationsSelectorTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SearchDestinationsSelectorTest.java
@@ -36,14 +36,14 @@
 

 public class SearchDestinationsSelectorTest extends SearchConsoleTestFixture

 {

-	private Set<ISearchDestination> destinationsToShow;

+	private List<ISearchDestination> destinationsToShow;

 	

 	@Override

 	public Display setUpPDE() throws Exception

 	{

 		super.setUpPDE();

 	

-		destinationsToShow = new HashSet<ISearchDestination>();

+		destinationsToShow = new ArrayList<ISearchDestination>();

 		destinationsToShow.add(destination1);

 		return getDisplay();

 	}

@@ -64,18 +64,19 @@
 			}

 

 			@Override

-			protected Set<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category,

+			protected List<ISearchDestination> getSearchDestinations(IDestinationCategoryDescription category,

 											IDestinationsProvider destinationsProvider)

 			{

 				return destinationsToShow;

-			}

-

-			public void handleSelectionChange(Set<ISearchDestination> newSelection)

-			{

+			}
+
+			@Override
+			public void handleSelectionChange(ISearchDestination newSelection) {
+				
 			}

 		};

 		

-		selector.setInput(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{category1})));

+		selector.setInput(Arrays.asList(new IDestinationCategoryDescription[]{category1}));

 		return selector;

 	}

 

@@ -170,17 +171,16 @@
 			}

 		});

 

-		final List<ISearchDestination> selectedDestinations = new ArrayList<ISearchDestination>();

+		final ISearchDestination[] selectedDestination = new ISearchDestination[1];

 		getDisplay().syncExec(new Runnable()

 		{

 			@Override

 			public void run()

 			{

-				selectedDestinations.addAll(selector.getSelectedItems());

+				selectedDestination[0]  = selector.getSelectedItem();

 			}

 		});

-		assertEquals("One selected item expected", 1, selectedDestinations.size());

-		assertTrue("Destination 2 is not selected after update", selectedDestinations.contains(destination2));

+		assertSame("Destination 2 is not selected after update", destination2, selectedDestination[0]);

 	}

 	

 	private List<String> getTreeItemNames(final TreeItem[] items)

diff --git a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SubdestinationsSelectedListenerTest.java b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SubdestinationsSelectedListenerTest.java
index 0aebe28..97d1fb4 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SubdestinationsSelectedListenerTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.comp/src/org/eclipse/platform/discovery/ui/test/comp/internal/SubdestinationsSelectedListenerTest.java
@@ -11,8 +11,7 @@
 package org.eclipse.platform.discovery.ui.test.comp.internal;

 

 import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.List;
 
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -160,7 +159,7 @@
 		searchProviderDescription = EasyMock.createNiceMock(ISearchProviderDescription.class);

 		providerConfiguration = EasyMock.createNiceMock(ISearchProviderConfiguration.class);

 

-		final Set<ISearchSubdestination> subDestinations = new HashSet<ISearchSubdestination>(Arrays.asList(new ISearchSubdestination[] { subDestination_1, subDestination_2, subDestination_3 }));

+		final List<ISearchSubdestination> subDestinations = Arrays.asList(new ISearchSubdestination[] { subDestination_1, subDestination_2, subDestination_3 });

 		EasyMock.expect(providerConfiguration.getAvailableSearchSubdestinations(searchObjectType, destinationCategory, searchProviderDescription)).andStubReturn(subDestinations);
 		

 		EasyMock.replay(searchProviderDescription);

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AdvancedSearchParamsUiContribXpParserTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AdvancedSearchParamsUiContribXpParserTest.java
index d8e9e6a..c5cda61 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AdvancedSearchParamsUiContribXpParserTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/AdvancedSearchParamsUiContribXpParserTest.java
@@ -10,13 +10,13 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.ui.api.IAdvancedSearchParamsUiContributor;

+import java.util.List;
+
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.ui.api.IAdvancedSearchParamsUiContributor;
 import org.eclipse.platform.discovery.ui.internal.search.advancedparams.IAdvancedSearchParamsUiContributorDescr;
-import org.eclipse.platform.discovery.ui.internal.xp.impl.AdvancedSearchParamsUiContribXpParser;

+import org.eclipse.platform.discovery.ui.internal.xp.impl.AdvancedSearchParamsUiContribXpParser;
 

 

 public class AdvancedSearchParamsUiContribXpParserTest extends XpParsersFixture

@@ -51,7 +51,7 @@
 	

 	public void testReadContributors()

 	{

-		final Set<IAdvancedSearchParamsUiContributorDescr> result = parser.readContributions();

+		final List<IAdvancedSearchParamsUiContributorDescr> result = parser.readContributions();

 		assertEquals("One contributor expected", 1, result.size());

 		final IAdvancedSearchParamsUiContributorDescr contributorDescr = result.iterator().next();

 		assertEquals("Unexpected id", CONTRIBUTOR_ID, contributorDescr.getId());

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/CustomResultUiXpParserTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/CustomResultUiXpParserTest.java
index 669da04..effaf56 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/CustomResultUiXpParserTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/CustomResultUiXpParserTest.java
@@ -10,14 +10,14 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.Set;

-

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;

-import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;

-import org.eclipse.platform.discovery.ui.internal.xp.impl.CustomResultUiXpParser;

+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.platform.discovery.runtime.internal.xp.IGenericXpParser;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;
+import org.eclipse.platform.discovery.ui.internal.selector.ICustomResultUiContributorDescription;
+import org.eclipse.platform.discovery.ui.internal.xp.impl.CustomResultUiXpParser;
 

 

 public class CustomResultUiXpParserTest extends XpParsersFixture

@@ -58,7 +58,7 @@
 

 	public void testReadContributors()

 	{

-		final Set<ICustomResultUiContributorDescription> result = parser.readContributions();

+		final List<ICustomResultUiContributorDescription> result = parser.readContributions();

 		assertEquals("One contributor expected", 1, result.size());

 		final ICustomResultUiContributorDescription contributorDescr = result.iterator().next();

 		assertEquals("Unexpected id", CONTRIBUTOR_ID, contributorDescr.getId());

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/DestinationsContentProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/DestinationsContentProviderTest.java
index c24cc45..3d09621 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/DestinationsContentProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/DestinationsContentProviderTest.java
@@ -10,17 +10,15 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsContentProvider;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DestinationsContentProvider;
 

 

 public class DestinationsContentProviderTest extends MockObjectTestCase

@@ -49,7 +47,7 @@
 		

 		contentProvider = new DestinationsContentProvider(){

 			@Override

-			protected Set<ISearchDestination> getSearchDestinationsForCategory(IDestinationCategoryDescription category)

+			protected List<ISearchDestination> getSearchDestinationsForCategory(IDestinationCategoryDescription category)

 			{

 				return getMockedDestinationForCategory(category);

 			}};

@@ -75,9 +73,9 @@
 		destination_3.stubs().method("getDisplayName").will(returnValue(DESTINATION_NAME_3));

 	}

 	

-	private Set<ISearchDestination> getMockedDestinationForCategory(final IDestinationCategoryDescription category)

+	private List<ISearchDestination> getMockedDestinationForCategory(final IDestinationCategoryDescription category)

 	{

-		final Set<ISearchDestination> result = new HashSet<ISearchDestination>();

+		final List<ISearchDestination> result = new ArrayList<ISearchDestination>();

 		if(category.getId().equals(CATEGORY_ID_1))

 		{

 			result.add(destination_1.proxy());

@@ -134,7 +132,7 @@
 	

 	public void testGetElements()

 	{

-		final Set<IDestinationCategoryDescription> categories = new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{category_1.proxy(), category_2.proxy()}));

+		final List<IDestinationCategoryDescription> categories = Arrays.asList(new IDestinationCategoryDescription[]{category_1.proxy(), category_2.proxy()});

 		final Object[] elements = contentProvider.getElements(categories);

 		assertEquals("Two elements expected", 2, elements.length);

 		final List<String> elementIds = new ArrayList<String>();

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/FavoritesContentProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/FavoritesContentProviderTest.java
index f05f27c..9d362e3 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/FavoritesContentProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/FavoritesContentProviderTest.java
@@ -58,7 +58,7 @@
 		

 		setupViewCustomization();

 

-		testedProvider = new FavoritesContentProvider(new HashSet<IGenericViewCustomization>(Arrays.asList(new IGenericViewCustomization[] { viewCust })))

+		testedProvider = new FavoritesContentProvider(Arrays.asList(new IGenericViewCustomization[] { viewCust }))

 		{

 			@Override

 			protected ILogger logger()

@@ -167,7 +167,7 @@
 				throw new IllegalArgumentException("Unexpected favorites item");

 			}

 		};

-		testedProvider = new FavoritesContentProvider(new HashSet<IGenericViewCustomization>(Arrays.asList(new IGenericViewCustomization[] { viewCust })))

+		testedProvider = new FavoritesContentProvider(Arrays.asList(new IGenericViewCustomization[] { viewCust }))

 		{

 			@Override

 			protected ILogger logger()

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultContentProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultContentProviderTest.java
index bfa3f89..c7a08e8 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultContentProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultContentProviderTest.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

+import java.util.ArrayList;
 import java.util.Arrays;

 import java.util.HashSet;

 import java.util.Set;

@@ -57,7 +58,7 @@
 		setupContentProviders();

 		setupCustomizations();

 

-		testedProvider = new GenericResultContentProvider(customizations);

+		testedProvider = new GenericResultContentProvider(new ArrayList<IGenericViewCustomization>(customizations));

 	}

 

 	private void setupCustomizations()

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultLabelProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultLabelProviderTest.java
index ea454fe..d9a1b90 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultLabelProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/GenericResultLabelProviderTest.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

+import java.util.ArrayList;
 import java.util.HashSet;

 import java.util.Set;

 

@@ -60,7 +61,7 @@
 		setupTooltipProviders();

 		setupCustomizations();

 		

-		testedProvider = new GenericResultLabelProvider(customizations);

+		testedProvider = new GenericResultLabelProvider(new ArrayList<IGenericViewCustomization>(customizations));

 	}

 

 	private void setupImages()

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleDestinationsSelectorTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleDestinationsSelectorTest.java
index 83a8835..94f6a67 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleDestinationsSelectorTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleDestinationsSelectorTest.java
@@ -10,24 +10,24 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.core.internal.selectors.IStatefulItemsSelector;

-import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;

-import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;

-import org.eclipse.platform.discovery.runtime.api.ISearchDestination;

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleDestinationsSelector;

-import org.eclipse.swt.SWT;

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

-import org.eclipse.ui.PlatformUI;

-import org.eclipse.ui.forms.widgets.FormToolkit;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.platform.discovery.core.internal.selectors.IItemSelector;
+import org.eclipse.platform.discovery.runtime.api.IDestinationChangeHandler;
+import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleDestinationsSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 

 

 public class SearchConsoleDestinationsSelectorTest extends MockObjectTestCase

@@ -37,7 +37,7 @@
 	private Mock<IDestinationChangeHandler> destinationsChangeHandler;

 	private FormToolkit formToolkit;

 	private Composite parentComposite;

-	private Mock<IStatefulItemsSelector<ISearchDestination, IDestinationCategoryDescription>> selectionChangeHandlerChecker;

+	private Mock<IItemSelector<ISearchDestination, IDestinationCategoryDescription>> selectionChangeHandlerChecker;

 	private Mock<IDestinationCategoryDescription> firstDestinationCategory;

 	private Mock<IDestinationsProviderDescription> firstDestProviderDescription;

 	private Mock<IDestinationsProvider> firstDestinationsProvider;

@@ -51,13 +51,15 @@
 	{

 		setupSearchProviderConfig();

 		destinationsChangeHandler = mock(IDestinationChangeHandler.class);

-		selectionChangeHandlerChecker = mock(IStatefulItemsSelector.class);

+		selectionChangeHandlerChecker = mock(IItemSelector.class);

 		formToolkit = new FormToolkit(PlatformUI.getWorkbench().getDisplay());

-		parentComposite = formToolkit.createComposite(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());

+		parentComposite = formToolkit.createComposite(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+		
+		

 		selector = new SearchConsoleDestinationsSelector(parentComposite, formToolkit, 10, new Composite(parentComposite, SWT.NONE), searchProviderConfig.proxy())

 		{

 			@Override

-			public void handleSelectionChange(Set<ISearchDestination> newSelection)

+			public void handleSelectionChange(ISearchDestination newSelection)

 			{

 				selectionChangeHandlerChecker.proxy().handleSelectionChange(newSelection);

 			}

@@ -85,15 +87,15 @@
 		firstDestProviderDescription.stubs().method("createProvider").will(returnValue(firstDestinationsProvider.proxy()));

 		secondDestProviderDescription.stubs().method("createProvider").will(returnValue(secondDestinationsProvider.proxy()));

 		

-		final Set<IDestinationsProviderDescription> allDestProviders = new HashSet<IDestinationsProviderDescription>();

+		final List<IDestinationsProviderDescription> allDestProviders = new ArrayList<IDestinationsProviderDescription>();

 		allDestProviders.add(firstDestProviderDescription.proxy());

 		searchProviderConfig.stubs().method("getDestinationProvidersForCategory").with(eq(firstDestinationCategory.proxy())).will(returnValue(allDestProviders));

 		

-		final Set<IDestinationsProviderDescription> allDestProviders_2 = new HashSet<IDestinationsProviderDescription>();

+		final List<IDestinationsProviderDescription> allDestProviders_2 = new ArrayList<IDestinationsProviderDescription>();

 		allDestProviders_2.add(secondDestProviderDescription.proxy());

 		searchProviderConfig.stubs().method("getDestinationProvidersForCategory").with(eq(secondDestinationCategory.proxy())).will(returnValue(allDestProviders_2));

 		

-		final Set<ISearchDestination> allDestinations = new HashSet<ISearchDestination>();

+		final List<ISearchDestination> allDestinations = new ArrayList<ISearchDestination>();

 		allDestinations.add(searchDestination.proxy());

 		searchProviderConfig.stubs().method("getSearchDestinations").with(eq(firstDestinationCategory.proxy()), eq(firstDestinationsProvider.proxy())).will(returnValue(allDestinations));

 		searchProviderConfig.stubs().method("getSearchDestinations").with(eq(secondDestinationCategory.proxy()), eq(secondDestinationsProvider.proxy())).will(returnValue(allDestinations));

@@ -103,7 +105,7 @@
 	{

 		firstDestinationsProvider.expects(once()).method("registerDestinationsChangeHandler").with(same(destinationsChangeHandler.proxy()));

 		selectionChangeHandlerChecker.stubs().method("handleSelectionChange");

-		selector.setInput(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{firstDestinationCategory.proxy()})));

+		selector.setInput(Arrays.asList(new IDestinationCategoryDescription[]{firstDestinationCategory.proxy()}));

 	}

 	

 	public void testChangingInputUnregistersChangeHandler()

@@ -116,7 +118,7 @@
 		secondDestinationsProvider.expects(once()).method("registerDestinationsChangeHandler").with(same(destinationsChangeHandler.proxy()));

 		

 		selectionChangeHandlerChecker.expects(once()).method("handleSelectionChange");

-		selector.setInput(new HashSet<IDestinationCategoryDescription>(Arrays.asList(new IDestinationCategoryDescription[]{secondDestinationCategory.proxy()})));

+		selector.setInput(Arrays.asList(new IDestinationCategoryDescription[]{secondDestinationCategory.proxy()}));

 	}

 	

 	public void testDisposeUnregistersListeners()

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleSelectionProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleSelectionProviderTest.java
index c1f7540..343f06a 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleSelectionProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchConsoleSelectionProviderTest.java
@@ -10,21 +10,21 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.lang.Thread.UncaughtExceptionHandler;

-import java.util.HashSet;

-import java.util.Set;

-

-import junit.framework.TestCase;

-

-import org.easymock.EasyMock;

-import org.easymock.IArgumentMatcher;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.ISelectionChangedListener;

-import org.eclipse.jface.viewers.SelectionChangedEvent;

-import org.eclipse.jface.viewers.StructuredSelection;

-import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;

-import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleSelectionProvider;

-import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleSelectionProvider.IViewCustomizationsObtainer;

+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+import org.easymock.IArgumentMatcher;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.platform.discovery.ui.api.IGenericViewCustomization;
+import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleSelectionProvider;
+import org.eclipse.platform.discovery.ui.internal.view.impl.SearchConsoleSelectionProvider.IViewCustomizationsObtainer;
 

 

 public class SearchConsoleSelectionProviderTest extends TestCase

@@ -34,7 +34,7 @@
 	private ISelection selection;

 	private IViewCustomizationsObtainer custObtainer;

 	private IGenericViewCustomization viewCustomization;

-	private Set<IGenericViewCustomization> allCustomizations;

+	private List<IGenericViewCustomization> allCustomizations;

 

 	@Override

 	protected void setUp() throws Exception

@@ -42,7 +42,7 @@
 		selectionListener = EasyMock.createMock(ISelectionChangedListener.class);

 		viewCustomization = EasyMock.createMock(IGenericViewCustomization.class);

 		custObtainer = EasyMock.createMock(IViewCustomizationsObtainer.class);

-		allCustomizations = new HashSet<IGenericViewCustomization>();

+		allCustomizations = new ArrayList<IGenericViewCustomization>();

 		EasyMock.expect(custObtainer.viewCustomizations()).andStubReturn(allCustomizations);

 		EasyMock.replay(custObtainer);

 		selProvider = new SearchConsoleSelectionProvider(custObtainer);

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchFavoritesItemsAdderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchFavoritesItemsAdderTest.java
index 71a0192..5ea85d3 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchFavoritesItemsAdderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchFavoritesItemsAdderTest.java
@@ -10,19 +10,21 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.IStructuredSelection;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;

-import org.eclipse.platform.discovery.ui.internal.view.SearchFavoritesItemsAdder;

-import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;

-import org.jmock.core.Invocation;

-import org.jmock.core.Stub;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
+import org.eclipse.platform.discovery.ui.internal.view.SearchFavoritesItemsAdder;
+import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
+import org.jmock.core.Invocation;
+import org.jmock.core.Stub;
 

 

 public class SearchFavoritesItemsAdderTest extends MockObjectTestCase

@@ -44,7 +46,7 @@
 

 		structuredSelection = mock(IStructuredSelection.class);

 

-		final Set<ISearchFavoritesViewCustomization> customizations = new HashSet<ISearchFavoritesViewCustomization>();

+		final List<ISearchFavoritesViewCustomization> customizations = new ArrayList<ISearchFavoritesViewCustomization>();

 		customizations.add(viewCustomization.proxy());

 

 		adder = new SearchFavoritesItemsAdder(customizations, opRunner.proxy())

diff --git a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchForListContentProviderTest.java b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchForListContentProviderTest.java
index bd137e8..39154be 100644
--- a/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchForListContentProviderTest.java
+++ b/tests/org.eclipse.platform.discovery.ui.test.unit/src/org/eclipse/platform/discovery/ui/test/unit/internal/SearchForListContentProviderTest.java
@@ -10,15 +10,17 @@
  *******************************************************************************/
 package org.eclipse.platform.discovery.ui.test.unit.internal;

 

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;

-import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;

-import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;

-import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;

-import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectsContentProvider;

+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
+import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
+import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
+import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
+import org.eclipse.platform.discovery.ui.internal.view.impl.DisplayableObjectsContentProvider;
 

 

 public class SearchForListContentProviderTest extends MockObjectTestCase

@@ -34,7 +36,7 @@
 	protected void setUp() throws Exception

 	{

 		searchProviderConfig = mock(ISearchProviderConfiguration.class);

-		final Set<IObjectTypeDescription> objects = new HashSet<IObjectTypeDescription>();

+		final List<IObjectTypeDescription> objects = new ArrayList<IObjectTypeDescription>();

 		objects.add(createObjectTypeWithId(OBJECT_TYPE1));

 		objects.add(createObjectTypeWithId(OBJECT_TYPE2));

 		objects.add(createObjectTypeWithId(OBJECT_TYPE3));