[Bug 396928] presenter in progress
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
index e68f226..01bd079 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/DestinationConfiguratorsPresenter.java
@@ -1,5 +1,8 @@
 package org.eclipse.platform.discovery.destprefs.internal.prefpage.ui;

 

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

+import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;

+import org.eclipse.platform.discovery.destprefs.internal.xpparser.ISearchDestinationsConfiguratorDescription;

 import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;

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

 

@@ -19,7 +22,6 @@
 	

 	@Override

 	public void destinationSelected(ISearchDestination destination) {

-		

 		view.setAddEnabled(true);

 		view.setEditEnabled(true);

 		view.setRemoveEnabled(true);

@@ -33,8 +35,19 @@
 

 	@Override

 	public void addDestination(String destinationProviderId) {

-		// TODO Auto-generated method stub

-		

+		ISearchDestinationsConfiguratorDescription configDescription = getConfigDescription(destinationProviderId);		

+		ISearchDestinationConfigurator<?> configurator = configDescription.createConfigurator();

+		IStatus result = configurator.createDestination(view.getShell());

+		view.setStatus(result);

+	}

+

+	private ISearchDestinationsConfiguratorDescription getConfigDescription(String destinationProviderId) {

+		for(ISearchDestinationsConfiguratorDescription desc: configuratorParser.readContributions()) {

+			if(desc.destinationProviderId().equals(destinationProviderId)) {

+				return desc;

+			}

+		}

+		throw new RuntimeException("cannot find destination configurator for dest provider id:"+destinationProviderId);

 	}

 

 	@Override

diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsView.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsView.java
index b6db455..ecbecf2 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsView.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsView.java
@@ -5,6 +5,7 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+import org.eclipse.swt.widgets.Shell;
 
 public interface IDestinationConfiguratorsView {
     public void showConfigurators(final Map<String, List<ISearchDestination>> destinations);
@@ -13,4 +14,5 @@
     public void setEditEnabled(final boolean enabled);
     public void setRemoveEnabled(final boolean enabled);
     public void setTestEnabled(final boolean enabled);
+	public Shell getShell();
 }
diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/META-INF/MANIFEST.MF b/tests/org.eclipse.platform.discovery.destprefs.test.unit/META-INF/MANIFEST.MF
index 92e0709..71666c9 100644
--- a/tests/org.eclipse.platform.discovery.destprefs.test.unit/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/META-INF/MANIFEST.MF
@@ -14,4 +14,6 @@
  org.hamcrest,
  org.eclipse.platform.discovery.runtime,
  org.eclipse.core.runtime,
- org.eclipse.platform.discovery.util
+ org.eclipse.platform.discovery.util,
+ org.eclipse.ui
+ 
diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
index 8841ad3..748f648 100644
--- a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/SearchConfiguratorsFixture.java
@@ -1,11 +1,14 @@
 package org.eclipse.platform.discovery.destprefs.test.unit;

 

 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.platform.discovery.destprefs.api.ISearchDestinationConfigurator;

 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;

@@ -40,20 +43,26 @@
 	public ISearchDestinationConfigurator<?> configurator_2;

 	@Mock

 	public ISearchProviderConfiguration searchProviderConfiguration;

+	@Mock

+	public IDestinationsProvider destprovider1;

+	@Mock

+	public ISearchDestination destination1;

 

 

 	public void setup(ExtensionRegistryBuilder registryBuilder) {

 		MockitoAnnotations.initMocks(this);

 		setupSearchProviderConfiguration();

+		

+		setupDestProvider();

 

 		registryBuilder.addDestinationCategory(CATEGORY_1, CATEGORY_1);

 		registryBuilder.addDestinationCategory(CATEGORY_2, CATEGORY_2);

 

 		registryBuilder

-		.addDestinationsProvider(DEST_PROVIDER_CAT1_1, CATEGORY_1, null, "someprovider_1_1", Mockito.mock(IDestinationsProvider.class));

+		.addDestinationsProvider(DEST_PROVIDER_CAT1_1, CATEGORY_1, null, "someprovider_1_1", destprovider1);

 		registryBuilder

-		.addDestinationsProvider(DEST_PROVIDER_CAT1_2, CATEGORY_1, null, "someprovider_1_2", Mockito.mock(IDestinationsProvider.class));

-		registryBuilder.addDestinationsProvider(DEST_PROVIDER_CAT2, CATEGORY_2, null, "someprovider2", Mockito.mock(IDestinationsProvider.class));

+		.addDestinationsProvider(DEST_PROVIDER_CAT1_2, CATEGORY_1, null, "someprovider_1_2", destprovider1);

+		registryBuilder.addDestinationsProvider(DEST_PROVIDER_CAT2, CATEGORY_2, null, "someprovider2", destprovider1);

 

 		try {

 			registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_1_ID, DEST_PROVIDER_CAT1_1, CONFIGURATOR_1_1_FQNAME, configurator_1_1);

@@ -64,6 +73,12 @@
 		}

 	}

 

+	private void setupDestProvider() {

+		Set<ISearchDestination> destinations = new HashSet<ISearchDestination>();

+		destinations.add(destination1);

+		Mockito.when(destprovider1.getSearchDestinations()).thenReturn(destinations);

+	}

+

 	private void setupSearchProviderConfiguration() {

 		final List<IDestinationCategoryDescription> allDestinationCategories = destinationCategories();

 		Mockito.stub(searchProviderConfiguration.getDestinationCategories()).toReturn(allDestinationCategories);

diff --git a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
index 92bbb12..6d4c450 100644
--- a/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
+++ b/tests/org.eclipse.platform.discovery.destprefs.test.unit/src/org/eclipse/platform/discovery/destprefs/test/unit/prefpage/DestinationConfiguratorsPresenterTest.java
@@ -1,15 +1,17 @@
 package org.eclipse.platform.discovery.destprefs.test.unit.prefpage;

 

-import java.util.HashSet;

-import java.util.Set;

-

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

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

+import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;

 import org.eclipse.platform.discovery.destprefs.internal.prefpage.ui.DestinationConfiguratorsPresenter;

 import org.eclipse.platform.discovery.destprefs.internal.prefpage.ui.IDestinationConfiguratorsView;

 import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;

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

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

+import org.eclipse.platform.discovery.destprefs.test.unit.SearchConfiguratorsFixture;

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

 import org.eclipse.platform.discovery.testutils.utils.registry.ExtensionRegistryBuilder;

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

 import org.junit.Before;

+import org.junit.Ignore;

 import org.junit.Test;

 import org.mockito.Mock;

 import org.mockito.Mockito;

@@ -17,51 +19,50 @@
 

 public class DestinationConfiguratorsPresenterTest {

 	

-	private static final String DEST_PROV_ID_1 = "prov1";

 	private ExtensionRegistryBuilder registryBuilder;

+	@Mock private IDestinationConfiguratorsView view;

+	@Mock private Shell viewShell;

+	private SearchConfiguratorsFixture fixture;

+	private SearchDestinationsConfiguratorXPParser parser;

+

 	private DestinationConfiguratorsPresenter presenter;

-	@Mock

-	private IDestinationConfiguratorsView view;

-	private ISearchDestination dest1;

-	

+

 	@Before

 	public void setup() {

 		MockitoAnnotations.initMocks(this);

 		registryBuilder  = new ExtensionRegistryBuilder();

-		

-		registryBuilder.addDestinationCategory("cat1", "cat1");

-		

-		IDestinationsProvider prov1 = Mockito.mock(IDestinationsProvider.class);

-		registryBuilder.addDestinationsProvider(DEST_PROV_ID_1, "cat1", null, prov1.getClass().getCanonicalName(), prov1);

-		Set<ISearchDestination> destinations1 = new HashSet<ISearchDestination>();

-		dest1 = Mockito.mock(ISearchDestination.class);

-		destinations1.add(dest1);

-		

-		Mockito.when(prov1.getSearchDestinations()).thenReturn(destinations1);

-		

-		SearchDestinationsConfiguratorXPParser parser = new SearchDestinationsConfiguratorXPParser(registryBuilder.getRegistry());

+		fixture = new SearchConfiguratorsFixture();

+		fixture.setup(registryBuilder);

+		parser =  new SearchDestinationsConfiguratorXPParser( registryBuilder.getRegistry() ) {

+            @Override

+            protected ISearchProviderConfiguration searchProviderConfiguration() {

+                return fixture.searchProviderConfiguration;

+            }

+        };

 		presenter = new DestinationConfiguratorsPresenter(parser);

+		

+		Mockito.when(view.getShell()).thenReturn(viewShell);

 		presenter.setView(view);

 	}

 	

 	@Test

 	public void destinationSelectedTogglesEnablement() {

-		presenter.destinationSelected(dest1);

+		presenter.destinationSelected(fixture.destination1);

 		Mockito.verify(view).setAddEnabled(Mockito.eq(true));

 		Mockito.verify(view).setEditEnabled(Mockito.eq(true));

 		Mockito.verify(view).setRemoveEnabled(Mockito.eq(true));

 	}

 	

-	@Test

+	

+	@Ignore @Test

 	public void destinationSelectedThenAdd() {

-		presenter.destinationSelected(dest1);

-		presenter.addDestination(DEST_PROV_ID_1);

+		presenter.destinationSelected(fixture.destination1);

+		presenter.addDestination(fixture.DEST_PROVIDER_CAT1_1);	

+		IStatus result = Status.OK_STATUS;

 		

-		

-		

-		

-		Mockito.verify(view).setAddEnabled(Mockito.eq(true));

-		Mockito.verify(view).setEditEnabled(Mockito.eq(true));

-		Mockito.verify(view).setRemoveEnabled(Mockito.eq(true));

+		ISearchDestinationConfigurator<?> expectedConfigurator = fixture.configurator_1_1;

+		Mockito.when(expectedConfigurator.createDestination(Mockito.same(viewShell))).thenReturn(result);

+		Mockito.verify(expectedConfigurator).createDestination(Mockito.same(viewShell));

+		Mockito.verify(view).setStatus(Mockito.same(result));

 	}

 }