core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/extension/AbstractDiscoveryPortalPageLayer.java
author dadubrow
Mon, 09 Aug 2010 09:15:52 -0500
changeset 1793 b3fa776e81bd
parent 1734 bf670d38123a
child 1810 2ccd3660a736
permissions -rw-r--r--
make discovery layer more amenable to customization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     1
/*
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     3
* All rights reserved.
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     8
*
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    11
*
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    12
* Contributors:
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    13
*
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    14
* Description: 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    15
*
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    16
*/
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    17
package com.nokia.carbide.internal.discovery.ui.extension;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    18
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    19
import java.net.URI;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    20
import java.net.URISyntaxException;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    21
import java.text.MessageFormat;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    22
import java.util.ArrayList;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    23
import java.util.Collection;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    24
import java.util.HashSet;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    25
import java.util.List;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    26
import java.util.Set;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    27
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    28
import org.eclipse.equinox.internal.p2.discovery.Catalog;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    29
import org.eclipse.equinox.internal.p2.discovery.DiscoveryCore;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    30
import org.eclipse.equinox.internal.p2.discovery.compatibility.BundleDiscoveryStrategy;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    31
import org.eclipse.equinox.internal.p2.discovery.compatibility.RemoteBundleDiscoveryStrategy;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    32
import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    33
import org.eclipse.equinox.internal.p2.ui.discovery.DiscoveryUi;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    34
import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogConfiguration;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    35
import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    36
import org.eclipse.equinox.p2.core.IProvisioningAgent;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    37
import org.eclipse.equinox.p2.operations.ProvisioningSession;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    38
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    39
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    40
import org.eclipse.equinox.p2.ui.ProvisioningUI;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    41
import org.eclipse.jface.action.Action;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    42
import org.eclipse.jface.action.IAction;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    43
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    44
import org.eclipse.jface.layout.GridDataFactory;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    45
import org.eclipse.jface.layout.GridLayoutFactory;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    46
import org.eclipse.jface.viewers.ISelectionChangedListener;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    47
import org.eclipse.jface.viewers.IStructuredSelection;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    48
import org.eclipse.jface.viewers.SelectionChangedEvent;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    49
import org.eclipse.jface.viewers.StructuredSelection;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    50
import org.eclipse.swt.SWT;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    51
import org.eclipse.swt.widgets.Composite;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    52
import org.eclipse.swt.widgets.Control;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    53
import org.eclipse.swt.widgets.Display;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    54
import org.eclipse.swt.widgets.Shell;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    55
import org.eclipse.ui.IActionBars;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    56
import org.eclipse.ui.IEditorPart;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    57
import org.eclipse.ui.actions.BaseSelectionListenerAction;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    58
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    59
import com.nokia.carbide.discovery.ui.Activator;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    60
import com.nokia.carbide.discovery.ui.Messages;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    61
import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    62
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    63
@SuppressWarnings("restriction")
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    64
public abstract class AbstractDiscoveryPortalPageLayer implements IPortalPageLayer {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    65
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    66
	private class RunnableContextDialog extends ProgressMonitorDialog {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    67
		private final String title;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    68
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    69
		private RunnableContextDialog(Shell parent, String title) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    70
			super(parent);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    71
			this.title = title;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    72
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    73
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    74
		@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    75
		protected void configureShell(Shell shell) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    76
			super.configureShell(shell);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    77
			shell.setText(title);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    78
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    79
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    80
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    81
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    82
	protected class ActionBar implements IActionBar {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    83
		private IAction[] actions;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    84
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    85
		public ActionBar(IEditorPart part) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    86
			actions = makeActions(part);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    87
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    88
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    89
		@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    90
		public String getTitle() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    91
			return Messages.AbstractDiscoveryPortalPageLayer_Title;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    92
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    93
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    94
		@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    95
		public IAction[] getActions() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    96
			return actions;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    97
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    98
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
    99
		@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   100
		public String[] getHighlightedActionIds() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   101
			return new String[] {INSTALL_ACTION_ID};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   102
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   103
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   104
	
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   105
	protected static final String INSTALL_ACTION_ID = 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   106
		AbstractDiscoveryPortalPageLayer.class.getName() + ".install"; //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   107
	protected static final String UNCHECK_ALL_ACTION_ID = 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   108
		AbstractDiscoveryPortalPageLayer.class.getName() + ".uncheckAll"; //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   109
	protected static final String CHECK_ALL_ACTION_ID = 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   110
		AbstractDiscoveryPortalPageLayer.class.getName() + ".checkAll"; //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   111
	protected static final String ADV_INSTALL_ACTION_ID = 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   112
		AbstractDiscoveryPortalPageLayer.class.getName() + ".advancedInstall"; //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   113
	protected static final String REFRESH_ACTION_ID = 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   114
		AbstractDiscoveryPortalPageLayer.class.getName() + ".refresh"; //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   115
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   116
	private IEditorPart part;
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   117
	private CatalogViewer viewer;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   118
	private List<ISelectionChangedListener> selectionListeners;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   119
	private IActionUIUpdater updater;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   120
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   121
	@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   122
	public Control createControl(Composite parent, IEditorPart part) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   123
		Composite c = new Composite(parent, SWT.NONE);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   124
		GridLayoutFactory.swtDefaults().applyTo(c);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   125
		viewer = new CatalogViewer(getCatalog(), part.getEditorSite(), 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   126
				new RunnableContextDialog(part.getEditorSite().getShell(), 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   127
						Messages.AbstractDiscoveryPortalPageLayer_GatheringExtensionsDesc), 
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   128
				getConfiguration());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   129
		viewer.createControl(c);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   130
		GridDataFactory.fillDefaults().grab(true, true).applyTo(viewer.getControl());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   131
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   132
		return c;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   133
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   134
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   135
	@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   136
	public void init() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   137
		if (!WorkbenchUtils.isJUnitRunning()) { // do not initialize the catalog if JUnit is running
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   138
			Display.getDefault().asyncExec(new Runnable() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   139
				@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   140
				public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   141
					for (ISelectionChangedListener listener : selectionListeners) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   142
						viewer.addSelectionChangedListener(listener);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   143
					}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   144
					viewer.updateCatalog();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   145
				}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   146
			});
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   147
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   148
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   149
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   150
	@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   151
	public IActionBar[] createCommandBars(IEditorPart part, IActionUIUpdater updater) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   152
		this.updater = updater;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   153
		return new IActionBar[] { new ActionBar(part) };
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   154
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   155
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   156
	protected CatalogConfiguration getConfiguration() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   157
		CatalogConfiguration configuration = new CatalogConfiguration();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   158
		configuration.setShowTagFilter(false);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   159
		return configuration;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   160
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   161
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   162
	protected Catalog getCatalog() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   163
		Catalog catalog = new Catalog();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   164
		catalog.setEnvironment(DiscoveryCore.createEnvironment());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   165
		catalog.setVerifyUpdateSiteAvailability(false);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   166
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   167
		// look for remote descriptor
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   168
		RemoteBundleDiscoveryStrategy remoteDiscoveryStrategy = new RemoteBundleDiscoveryStrategy();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   169
		String url = getDirectoryURL();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   170
		if (url != null) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   171
			remoteDiscoveryStrategy.setDirectoryUrl(url);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   172
			catalog.getDiscoveryStrategies().add(remoteDiscoveryStrategy);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   173
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   174
		else // look for descriptors from installed bundles
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   175
			catalog.getDiscoveryStrategies().add(new BundleDiscoveryStrategy());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   176
	
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   177
		return catalog;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   178
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   179
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   180
	protected String getDirectoryURL() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   181
		return Activator.getFromServerProperties(getClass().getName());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   182
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   183
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   184
	protected IAction[] makeActions(final IEditorPart part) {
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   185
		this.part = part;
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   186
		selectionListeners = new ArrayList<ISelectionChangedListener>();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   187
		List<IAction> actions = new ArrayList<IAction>();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   188
		IAction action;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   189
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   190
		// install
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   191
		action = new BaseSelectionListenerAction(Messages.AbstractDiscoveryPortalPageLayer_InstallActionLabel) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   192
			public void run() {
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   193
				installCatalogItems(viewer.getCheckedItems());
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   194
			};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   195
			
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   196
			protected boolean updateSelection(IStructuredSelection selection) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   197
				scheduleUpdateAllActionUIs();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   198
				return !selection.isEmpty();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   199
			};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   200
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   201
		action.setToolTipText(Messages.AbstractDiscoveryPortalPageLayer_InstallActionTooltip);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   202
		action.setId(INSTALL_ACTION_ID);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   203
		selectionListeners.add((ISelectionChangedListener) action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   204
		actions.add(action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   205
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   206
		// refresh
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   207
		action = new Action(Messages.AbstractDiscoveryPortalPageLayer_RefreshActionLabel) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   208
			public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   209
				viewer.setSelection(StructuredSelection.EMPTY);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   210
				viewer.updateCatalog();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   211
				viewer.refresh();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   212
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   213
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   214
		action.setId(REFRESH_ACTION_ID);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   215
		actions.add(action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   216
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   217
		// check all
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   218
		action = new BaseSelectionListenerAction(Messages.AbstractDiscoveryPortalPageLayer_CheckAllActionLabel) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   219
			public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   220
				viewer.setSelection(StructuredSelection.EMPTY);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   221
				viewer.setSelection(getAllItemsSelection());
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   222
				viewer.refresh();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   223
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   224
	
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   225
			private IStructuredSelection getAllItemsSelection() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   226
				List<CatalogItem> catalogItems = new ArrayList<CatalogItem>();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   227
				for (CatalogItem catalogItem : viewer.getCatalog().getItems()) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   228
					if (!catalogItem.isInstalled())
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   229
						catalogItems.add(catalogItem);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   230
				}	
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   231
				return new StructuredSelection(catalogItems);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   232
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   233
	
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   234
			protected boolean updateSelection(IStructuredSelection selection) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   235
				scheduleUpdateAllActionUIs();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   236
				return !getAllItemsSelection().equals(selection);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   237
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   238
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   239
		action.setId(CHECK_ALL_ACTION_ID);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   240
		selectionListeners.add((ISelectionChangedListener) action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   241
		actions.add(action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   242
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   243
		// uncheck all
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   244
		action = new BaseSelectionListenerAction(Messages.AbstractDiscoveryPortalPageLayer_UncheckAllActionLabel) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   245
			public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   246
				viewer.setSelection(StructuredSelection.EMPTY);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   247
				viewer.refresh();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   248
			};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   249
			
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   250
			protected boolean updateSelection(IStructuredSelection selection) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   251
				scheduleUpdateAllActionUIs();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   252
				return !selection.isEmpty();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   253
			};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   254
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   255
		action.setId(UNCHECK_ALL_ACTION_ID);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   256
		selectionListeners.add((ISelectionChangedListener) action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   257
		actions.add(action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   258
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   259
		// advanced install
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   260
		action = new Action(Messages.AbstractDiscoveryPortalPageLayer_AdvancedInstallActionLabel) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   261
			public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   262
				showInstallWizard();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   263
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   264
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   265
		action.setId(ADV_INSTALL_ACTION_ID);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   266
		actions.add(action);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   267
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   268
		ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   269
			@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   270
			public void selectionChanged(SelectionChangedEvent event) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   271
				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   272
				IActionBars bars = part.getEditorSite().getActionBars();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   273
				bars.getStatusLineManager().setMessage(
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   274
						selection.isEmpty() ? null : MessageFormat.format(
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   275
								Messages.AbstractDiscoveryPortalPageLayer_CheckedItemsStatusMessage, selection.size()));
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   276
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   277
		};
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   278
		selectionListeners.add(selectionListener);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   279
		
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   280
		return (IAction[]) actions.toArray(new IAction[actions.size()]);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   281
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   282
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   283
	protected void installCatalogItems(List<CatalogItem> items) {
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   284
		DiscoveryUi.install(items, 
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   285
				new RunnableContextDialog(part.getEditorSite().getShell(), 
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   286
						Messages.AbstractDiscoveryPortalPageLayer_GatheringInstallInfoDesc));
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   287
	}
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   288
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   289
	@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   290
	public void dispose() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   291
		for (ISelectionChangedListener listener : selectionListeners) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   292
			viewer.removeSelectionChangedListener(listener);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   293
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   294
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   295
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   296
	protected void showInstallWizard() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   297
		ProvisioningUI defaultUI = ProvisioningUI.getDefaultUI();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   298
		ProvisioningSession session = defaultUI.getSession();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   299
		IProvisioningAgent agent = session.getProvisioningAgent();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   300
		IMetadataRepositoryManager metadataManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   301
		IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   302
		for (URI uri : getSiteURIs(viewer.getCatalog().getItems())) {
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   303
			metadataManager.addRepository(uri);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   304
			artifactManager.addRepository(uri);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   305
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   306
		defaultUI.openInstallWizard(null, null, null);
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   307
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   308
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   309
	protected static Collection<URI> getSiteURIs(List<CatalogItem> catalogItems) {
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   310
		Set<URI> uris = new HashSet<URI>();
1793
b3fa776e81bd make discovery layer more amenable to customization
dadubrow
parents: 1734
diff changeset
   311
		for (CatalogItem catalogItem : catalogItems) {
1734
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   312
			try {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   313
				uris.add(new URI(catalogItem.getSiteUrl()));
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   314
			} catch (URISyntaxException e) {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   315
				// ignore bad URIs
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   316
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   317
		}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   318
		return uris;
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   319
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   320
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   321
	protected void scheduleUpdateAllActionUIs() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   322
		Display.getDefault().asyncExec(new Runnable() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   323
			@Override
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   324
			public void run() {
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   325
				updater.updateAll();
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   326
			}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   327
		});
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   328
	}
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   329
bf670d38123a More portal framework changes:
dadubrow
parents:
diff changeset
   330
}