[Bug 396928] presenter WIP
- edit and delete
- refresh input on success
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 2372ed9..1195ae0 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
@@ -87,10 +87,17 @@
 

 	@Override

 	public void addDestination() {

-		ISearchDestinationsConfiguratorDescription configDescription = getConfigDescription(destinationProviderId);		

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

+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");

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

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

+		updateView(result);

+	}

+

+	private void updateView(IStatus result) {

 		view.setStatus(result);

+		if(result.isOK()) {

+			view.setInput(buildInput());

+		}

 	}

 

 	private ISearchDestinationsConfiguratorDescription getConfigDescription(String destinationProviderId) {

@@ -103,21 +110,29 @@
 	}

 

 	@Override

-	public void editDestination() {

-		// TODO Auto-generated method stub

+	 public <T extends ISearchDestination> void editDestination() {

+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");

+		ContractChecker.nullCheckField(destination, "destination");

+		

+		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();

+		@SuppressWarnings("unchecked") IStatus result = configurator.editDestination(view.getShell(), (T)destination);

+		updateView(result);

 		

 	}

 

 	@Override

-	public void removeDestination() {

-		// TODO Auto-generated method stub

+	public <T extends ISearchDestination> void removeDestination() {

+		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");

+		ContractChecker.nullCheckField(destination, "destination");

 		

+		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();

+		@SuppressWarnings("unchecked") IStatus result = configurator.deleteDestination(view.getShell(), (T)destination);

+		updateView(result);		

 	}

 

 	@Override

 	public void testDestination() {

-		// TODO Auto-generated method stub

-		

+		throw new RuntimeException("not implemented");

 	}

 

 }

diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
index 9b54729..6a1cfc0 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/prefpage/ui/IDestinationConfiguratorsPresenter.java
@@ -1,10 +1,12 @@
 package org.eclipse.platform.discovery.destprefs.internal.prefpage.ui;
 
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
+
 public interface IDestinationConfiguratorsPresenter {
     public void selectionChanged(final DestinationConfiguratorSelection selection);
     public void addDestination();
-    public void editDestination();
-    public void removeDestination();
-    public void testDestination();
+    public <T extends ISearchDestination> void editDestination();
+    public <T extends ISearchDestination> void removeDestination();
+    public <T extends ISearchDestination> void testDestination();
     public void setView(final IDestinationConfiguratorsView view);
 }
diff --git a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
index d35b8f7..a81366b 100644
--- a/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
+++ b/bundles/org.eclipse.platform.discovery.destprefs/src/org/eclipse/platform/discovery/destprefs/internal/xpparser/ISearchDestinationsConfiguratorDescription.java
@@ -11,6 +11,7 @@
 package org.eclipse.platform.discovery.destprefs.internal.xpparser;
 
 import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;
+import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
 
 /**
  * Wrapper interface for {@link ISearchDestinationConfigurator}
@@ -18,7 +19,7 @@
  *
  */
 public interface ISearchDestinationsConfiguratorDescription {
-    public ISearchDestinationConfigurator<?> createConfigurator();
+    public <T extends ISearchDestination> ISearchDestinationConfigurator<T> createConfigurator();
     public String destinationProviderId();
     public String destinationCategoryId();
 }
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 3213d2e..ce62534 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
@@ -36,11 +36,11 @@
 	public final String CONFIGURATOR_2_FQNAME = "org.eclipse.platform.discovery.destprefs.configurator_2";

 

 	@Mock

-	public ISearchDestinationConfigurator<?> configurator_1_1;

+	public ISearchDestinationConfigurator<ISearchDestination> configurator_1_1;

 	@Mock

-	public ISearchDestinationConfigurator<?> configurator_1_2;

+	public ISearchDestinationConfigurator<ISearchDestination> configurator_1_2;

 	@Mock

-	public ISearchDestinationConfigurator<?> configurator_2;

+	public ISearchDestinationConfigurator<ISearchDestination> configurator_2;

 	@Mock

 	public ISearchProviderConfiguration searchProviderConfiguration;

 	@Mock

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 be1c790..388b23d 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
@@ -13,6 +13,7 @@
 import org.eclipse.platform.discovery.destprefs.internal.prefpage.ui.IDestinationConfiguratorsView;

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

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

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

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

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

 import org.eclipse.swt.widgets.Shell;

@@ -60,6 +61,7 @@
 

 			private Collection<CategoryDestinationProviderPair> actual;

 

+			@SuppressWarnings("unchecked")

 			@Override

 			public boolean matches(Object item) {

 				actual = (Collection<CategoryDestinationProviderPair>)item;

@@ -95,7 +97,7 @@
 	}

 	

 	@Test

-	public void destinationSelectedThenAdd() {

+	public void add() {

 		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));

 

 		ISearchDestinationConfigurator<?> expectedConfigurator = fixture.configurator_1_1;

@@ -106,6 +108,24 @@
 		

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

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

+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));

+

+	}

+	

+	@Test

+	public void addNotOkDoesNotSetInput() {

+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));

+

+		ISearchDestinationConfigurator<?> expectedConfigurator = fixture.configurator_1_1;

+		IStatus result = Status.CANCEL_STATUS;

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

+		

+		presenter.addDestination();	

+		

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

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

+		Mockito.verify(view, Mockito.times(1)).setInput(Mockito.argThat(matchesFixture()));

+

 	}

 	

 	@Test

@@ -118,4 +138,37 @@
 		Mockito.verify(view).setTestEnabled(Mockito.eq(false));

 

 	}

+	

+	@Test

+	public void edit() {

+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));

+

+		ISearchDestinationConfigurator<ISearchDestination> expectedConfigurator = fixture.configurator_1_1;

+		IStatus result = Status.OK_STATUS;

+		Mockito.when(expectedConfigurator.editDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1))).thenReturn(result);

+		

+		presenter.editDestination();	

+		

+		Mockito.verify(expectedConfigurator).editDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1));

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

+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));

+

+	}

+	

+	@Test

+	public void remove() {

+		presenter.selectionChanged(new DestinationConfiguratorSelection(fixture.DEST_PROVIDER_CAT1_1, fixture.destination1));

+

+		ISearchDestinationConfigurator<ISearchDestination> expectedConfigurator = fixture.configurator_1_1;

+		IStatus result = Status.OK_STATUS;

+		Mockito.when(expectedConfigurator.deleteDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1))).thenReturn(result);

+		

+		presenter.removeDestination();	

+		

+		Mockito.verify(expectedConfigurator).deleteDestination(Mockito.same(viewShell), Mockito.same(fixture.destination1));

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

+		Mockito.verify(view, Mockito.times(2)).setInput(Mockito.argThat(matchesFixture()));

+

+	}

+	

 }