495715: Install All Favorites might only select first item

Set selection in bulk and only update the viewer at the end

Bug: 495715
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=495715
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
index ee9b92e..abbd2c9 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
@@ -15,6 +15,7 @@
 import org.eclipse.epp.internal.mpc.ui.catalog.MarketplaceNodeCatalogItem;
 import org.eclipse.epp.mpc.ui.Operation;
 import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
+import org.eclipse.jface.viewers.StructuredSelection;
 
 public class InstallAllActionLink extends ActionLink {
 
@@ -36,15 +37,21 @@
 	protected void installAll() {
 		MarketplaceViewer viewer = marketplacePage.getViewer();
 		List<CatalogItem> items = viewer.getCatalog().getItems();
+		//We need to first select the items in the selection model and then
+		//set the selection to the viewer. Otherwise the MarketplacePage listener
+		//will advance the wizard on the first selected item.
 		SelectionModel selectionModel = viewer.getSelectionModel();
 		for (CatalogItem catalogItem : items) {
 			if (catalogItem instanceof MarketplaceNodeCatalogItem) {
 				MarketplaceNodeCatalogItem nodeItem = (MarketplaceNodeCatalogItem) catalogItem;
 				if (selectionModel.getSelectedOperation(nodeItem) != Operation.INSTALL
 						&& nodeItem.getAvailableOperations().contains(Operation.INSTALL)) {
-					viewer.modifySelection(nodeItem, Operation.INSTALL);
+					selectionModel.select(nodeItem, Operation.INSTALL);
 				}
 			}
 		}
+		//viewer.getCheckedItems() is based on the SelectionModel state, so it already has the
+		//updated selection. Just let the viewer synchronize its remaining selection state with it.
+		viewer.setSelection(new StructuredSelection(viewer.getCheckedItems()));
 	}
 }
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
index d948425..4bba862 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
@@ -291,7 +291,7 @@
 				// sets the empty selection whenever the catalog is updated.
 				if (!event.getSelection().isEmpty()) {
 
-					if (previousSelectionSize == 0 && newSelectionSize == 1
+					if (previousSelectionSize == 0 && newSelectionSize > 0
 							&& selectionModel.computeProvisioningOperationViableForFeatureSelection()) {
 						showNextPage();
 					}