core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/view/InstallExtensionsPortalExtension.java
changeset 1734 bf670d38123a
parent 1727 743cc54fdffe
child 1810 2ccd3660a736
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/view/InstallExtensionsPortalExtension.java	Thu Jul 29 15:31:29 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/view/InstallExtensionsPortalExtension.java	Mon Aug 02 08:44:45 2010 -0500
@@ -16,338 +16,24 @@
 */
 package com.nokia.carbide.internal.discovery.ui.view;
 
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
-import org.eclipse.equinox.internal.p2.discovery.Catalog;
-import org.eclipse.equinox.internal.p2.discovery.DiscoveryCore;
-import org.eclipse.equinox.internal.p2.discovery.compatibility.BundleDiscoveryStrategy;
-import org.eclipse.equinox.internal.p2.discovery.compatibility.RemoteBundleDiscoveryStrategy;
-import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
-import org.eclipse.equinox.internal.p2.ui.discovery.DiscoveryUi;
-import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogConfiguration;
-import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.operations.ProvisioningSession;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.layout.GridLayoutFactory;
-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.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.BaseSelectionListenerAction;
-import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
-
-import com.nokia.carbide.discovery.ui.Activator;
-import com.nokia.carbide.discovery.ui.Messages;
-import com.nokia.carbide.internal.discovery.ui.extension.IPortalPageLayer;
-import com.nokia.carbide.internal.discovery.ui.extension.OpenPreferencePageAction;
-import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
-
-@SuppressWarnings("restriction")
-public class InstallExtensionsPortalExtension implements IPortalPageLayer {
-
-	private static final String INSTALL_ACTION_ID = InstallExtensionsPortalExtension.class.getName() + ".install"; //$NON-NLS-1$
-
-	private final class RunnableContextDialog extends ProgressMonitorDialog {
-		private final String title;
-
-		private RunnableContextDialog(Shell parent, String title) {
-			super(parent);
-			this.title = title;
-		}
-
-		@Override
-		protected void configureShell(Shell shell) {
-			super.configureShell(shell);
-			shell.setText(title);
-		}
-		
-	}
-
-	private final class ActionBar implements IActionBar {
-		private IAction[] actions;
-
-		public ActionBar(IEditorPart part) {
-			actions = makeActions(part);
-		}
-		
-		@Override
-		public String getTitle() {
-			return Messages.InstallExtensionsPortalExtension_InstallExtensionsTitle;
-		}
 
-		@Override
-		public IAction[] getActions() {
-			return actions;
-		}
-
-		@Override
-		public String[] getHighlightedActionIds() {
-			return new String[] {INSTALL_ACTION_ID};
-		}
-	}
-	
-	private class SettingsBar implements IActionBar {
-		@Override
-		public String getTitle() {
-			return "Settings";
-		}
+import com.nokia.carbide.internal.discovery.ui.extension.AbstractDiscoveryPortalPageLayer;
 
-		@Override
-		public IAction[] getActions() {
-			List<IAction> actions = new ArrayList<IAction>();
-			actions.add(new OpenPreferencePageAction(
-					"Capabilities", 
-					"org.eclipse.sdk.capabilities"));
-			actions.add(new OpenPreferencePageAction(
-					"Code Style", 
-					"org.eclipse.cdt.ui.preferences.CodeFormatterPreferencePage"));
-			actions.add(new OpenPreferencePageAction(
-					"Key bindings", 
-					"org.eclipse.ui.preferencePages.Keys"));
-			actions.add(new OpenPreferencePageAction(
-					"Proxies", 
-					"org.eclipse.ui.net.NetPreferences"));
-			return (IAction[]) actions.toArray(new IAction[actions.size()]);
-		}
-
-		@Override
-		public String[] getHighlightedActionIds() {
-			return null;
-		}
-	}
-
-	private static final String DIRECTORY_KEY = "com.nokia.carbide.discovery.directory"; //$NON-NLS-1$
-
-	private CatalogViewer viewer;
-	private List<ISelectionChangedListener> selectionListeners;
-	private IActionUIUpdater updater;
-
-	public InstallExtensionsPortalExtension() {
-	}
+public class InstallExtensionsPortalExtension extends AbstractDiscoveryPortalPageLayer {
 
 	@Override
 	public Control createControl(Composite parent, IEditorPart part) {
-		Composite c = new Composite(parent, SWT.NONE);
-		GridLayoutFactory.swtDefaults().applyTo(c);
-		viewer = new CatalogViewer(getCatalog(), part.getEditorSite(), 
-				new RunnableContextDialog(part.getEditorSite().getShell(), 
-						Messages.InstallExtensionsPage_GatherExtensionsTitle), 
-				getConfiguration());
-		viewer.createControl(c);
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(viewer.getControl());
-		
-		// Create the help context id for the viewer's control
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), 
-				"com.nokia.carbide.discovery.ui.view.DiscoveryView.catalogviewer"); //$NON-NLS-1$
-		return c;
-	}
-
-	@Override
-	public void init() {
-		if (!WorkbenchUtils.isJUnitRunning()) { // do not initialize the catalog if JUnit is running
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					for (ISelectionChangedListener listener : selectionListeners) {
-						viewer.addSelectionChangedListener(listener);
-					}
-					viewer.updateCatalog();
-				}
-			});
-		}
-	}
-	
-	@Override
-	public IActionBar[] createCommandBars(IEditorPart part, IActionUIUpdater updater) {
-		this.updater = updater;
-		return new IActionBar[] { new ActionBar(part), new SettingsBar() };
-	}
-
-	private CatalogConfiguration getConfiguration() {
-		CatalogConfiguration configuration = new CatalogConfiguration();
-		configuration.setShowTagFilter(false);
-		return configuration;
-	}
-
-	private Catalog getCatalog() {
-		Catalog catalog = new Catalog();
-		catalog.setEnvironment(DiscoveryCore.createEnvironment());
-		catalog.setVerifyUpdateSiteAvailability(false);
-		
-		// look for remote descriptor
-		RemoteBundleDiscoveryStrategy remoteDiscoveryStrategy = new RemoteBundleDiscoveryStrategy();
-		String url = Activator.getFromServerProperties(DIRECTORY_KEY);
-		if (url != null) {
-			remoteDiscoveryStrategy.setDirectoryUrl(url);
-			catalog.getDiscoveryStrategies().add(remoteDiscoveryStrategy);
-		}
-		else // look for descriptors from installed bundles
-			catalog.getDiscoveryStrategies().add(new BundleDiscoveryStrategy());
-
-		return catalog;
-	}
+		Control control = super.createControl(parent, part);
 
-	private IAction[] makeActions(final IEditorPart part) {
-		selectionListeners = new ArrayList<ISelectionChangedListener>();
-		List<IAction> actions = new ArrayList<IAction>();
-		IAction action;
-		
-		// install
-		action = new BaseSelectionListenerAction(Messages.InstallExtensionsPage_InstallLabel) {
-			public void run() {
-				DiscoveryUi.install(viewer.getCheckedItems(), 
-						new RunnableContextDialog(part.getEditorSite().getShell(), 
-								Messages.InstallExtensionsPage_GatheringInstallInfoTitle));
-			};
-			
-			protected boolean updateSelection(IStructuredSelection selection) {
-				scheduleUpdateAllActionUIs();
-				return !selection.isEmpty();
-			};
-		};
-		action.setToolTipText(Messages.InstallExtensionsPage_InstallTip);
-		action.setId(INSTALL_ACTION_ID);
-		selectionListeners.add((ISelectionChangedListener) action);
-		actions.add(action);
-		
-		// refresh
-		action = new Action(Messages.InstallExtensionsPage_RefreshLabel) {
-			public void run() {
-				viewer.setSelection(StructuredSelection.EMPTY);
-				viewer.updateCatalog();
-				viewer.refresh();
-			}
-		};
-		actions.add(action);
-		
-		// check all
-		action = new BaseSelectionListenerAction(Messages.InstallExtensionsPage_CheckAllLabel) {
-			public void run() {
-				viewer.setSelection(StructuredSelection.EMPTY);
-				viewer.setSelection(getAllItemsSelection());
-				viewer.refresh();
-			}
-
-			private IStructuredSelection getAllItemsSelection() {
-				List<CatalogItem> catalogItems = new ArrayList<CatalogItem>();
-				for (CatalogItem catalogItem : viewer.getCatalog().getItems()) {
-					if (!catalogItem.isInstalled())
-						catalogItems.add(catalogItem);
-				}	
-				return new StructuredSelection(catalogItems);
-			}
+		// Create the help context id for the viewer's control
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(control, 
+				"com.nokia.carbide.discovery.ui.view.DiscoveryView.catalogviewer"); //$NON-NLS-1$
 
-			protected boolean updateSelection(IStructuredSelection selection) {
-				scheduleUpdateAllActionUIs();
-				return !getAllItemsSelection().equals(selection);
-			}
-		};
-		action.setId(InstallExtensionsPortalExtension.class.getName() + ".checkAll"); //$NON-NLS-1$
-		selectionListeners.add((ISelectionChangedListener) action);
-		actions.add(action);
-		
-		// uncheck all
-		action = new BaseSelectionListenerAction(Messages.InstallExtensionsPage_UncheckAllLabel) {
-			public void run() {
-				viewer.setSelection(StructuredSelection.EMPTY);
-				viewer.refresh();
-			};
-			
-			protected boolean updateSelection(IStructuredSelection selection) {
-				scheduleUpdateAllActionUIs();
-				return !selection.isEmpty();
-			};
-		};
-		action.setId(InstallExtensionsPortalExtension.class.getName() + ".uncheckAll"); //$NON-NLS-1$
-		selectionListeners.add((ISelectionChangedListener) action);
-		actions.add(action);
-		
-		// advanced install
-		action = new Action(Messages.InstallExtensionsPage_AdvancedInstallLabel) {
-			public void run() {
-				showInstallWizard();
-			}
-		};
-		actions.add(action);
-		
-		ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-				IActionBars bars = part.getEditorSite().getActionBars();
-				bars.getStatusLineManager().setMessage(
-						selection.isEmpty() ? null : MessageFormat.format(
-								Messages.InstallExtensionsPage_StatusLineFmt, selection.size()));
-			}
-		};
-		selectionListeners.add(selectionListener);
-		
-		return (IAction[]) actions.toArray(new IAction[actions.size()]);
+		return control;
 	}
-	
-	@Override
-	public void dispose() {
-		for (ISelectionChangedListener listener : selectionListeners) {
-			viewer.removeSelectionChangedListener(listener);
-		}
-	}
-
-	private void showInstallWizard() {
-		ProvisioningUI defaultUI = ProvisioningUI.getDefaultUI();
-		ProvisioningSession session = defaultUI.getSession();
-		IProvisioningAgent agent = session.getProvisioningAgent();
-		IMetadataRepositoryManager metadataManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-		IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
-		for (URI uri : getCatalogURIs()) {
-			metadataManager.addRepository(uri);
-			artifactManager.addRepository(uri);
-		}
-		defaultUI.openInstallWizard(null, null, null);
-	}
-
-	private Collection<URI> getCatalogURIs() {
-		Set<URI> uris = new HashSet<URI>();
-		for (CatalogItem catalogItem : viewer.getCatalog().getItems()) {
-			try {
-				uris.add(new URI(catalogItem.getSiteUrl()));
-			} catch (URISyntaxException e) {
-				// ignore bad URIs
-			}
-		}
-		return uris;
-	};
-
-	private void scheduleUpdateAllActionUIs() {
-		Display.getDefault().asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				updater.updateAll();
-			}
-		});
-	};
 }