Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2009-03-06 23:14:53 +0000
committerSusan Franklin2009-03-06 23:14:53 +0000
commit97d2f11a9cc05abf81ce05a676c5523f982dfd8c (patch)
treef22f7bbca63b26b93ababb5672ccfc242e0d7421 /bundles
parentab3beeff90497e915f1e9e3f909bb420e2bb32f4 (diff)
downloadrt.equinox.p2-97d2f11a9cc05abf81ce05a676c5523f982dfd8c.tar.gz
rt.equinox.p2-97d2f11a9cc05abf81ce05a676c5523f982dfd8c.tar.xz
rt.equinox.p2-97d2f11a9cc05abf81ce05a676c5523f982dfd8c.zip
Bug 266939 - [ui] "Install New Software" should only contact the selected sites when resolving an install
Diffstat (limited to 'bundles')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/AbstractProvisioningUITest.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/dialogs/InstallWizardTest.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/operations/SizingTest.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java9
-rw-r--r--bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/UpdateHandler.java7
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java101
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java40
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionWizardPage.java49
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java14
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties4
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/ProfileModificationAction.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AvailableIUGroup.java23
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstallWizard.java5
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RevertProfilePage.java6
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/PlannerResolutionOperation.java13
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProfileModificationOperation.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java35
19 files changed, 266 insertions, 74 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/AbstractProvisioningUITest.java b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/AbstractProvisioningUITest.java
index 00e9f242c..758bc3333 100644
--- a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/AbstractProvisioningUITest.java
+++ b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/AbstractProvisioningUITest.java
@@ -107,7 +107,7 @@ public abstract class AbstractProvisioningUITest extends AbstractProvisioningTes
ProvisioningPlan plan = ProvisioningUtil.getProvisioningPlan(req, new ProvisioningContext(new URI[] {}), getMonitor());
if (plan.getStatus().getSeverity() == IStatus.ERROR || plan.getStatus().getSeverity() == IStatus.CANCEL)
return plan.getStatus();
- return ProvisioningUtil.performProvisioningPlan(plan, new DefaultPhaseSet(), profile, getMonitor());
+ return ProvisioningUtil.performProvisioningPlan(plan, new DefaultPhaseSet(), profile, new ProvisioningContext(), getMonitor());
}
protected IInstallableUnit createNamedIU(String id, String name, Version version, boolean isCategory) {
diff --git a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/dialogs/InstallWizardTest.java b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/dialogs/InstallWizardTest.java
index 51b304c72..cddb8a73c 100644
--- a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/dialogs/InstallWizardTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/dialogs/InstallWizardTest.java
@@ -61,10 +61,12 @@ public class InstallWizardTest extends AbstractProvisioningUITest {
// Start reaching in...
AvailableIUGroup group = page1.testGetAvailableIUGroup();
+ group.setRepositoryFilter(AvailableIUGroup.AVAILABLE_ALL, null);
// Now manipulate the tree itself. we are reaching way in.
DeferredQueryContentProvider provider = (DeferredQueryContentProvider) group.getCheckboxTreeViewer().getContentProvider();
provider.setSynchronous(true);
group.getCheckboxTreeViewer().refresh();
+ group.getCheckboxTreeViewer().expandAll();
Tree tree = (Tree) group.getCheckboxTreeViewer().getControl();
TreeItem[] items = tree.getItems();
HashSet ids = new HashSet();
diff --git a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/operations/SizingTest.java b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/operations/SizingTest.java
index 61a2e8476..91b84d30b 100644
--- a/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/operations/SizingTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests.ui/src/org/eclipse/equinox/p2/tests/ui/operations/SizingTest.java
@@ -37,7 +37,7 @@ public class SizingTest extends AbstractProvisioningUITest {
}
long size = IIUElement.SIZE_NOTAPPLICABLE;
try {
- size = ProvisioningUtil.getSize(plan, profileId, getMonitor());
+ size = ProvisioningUtil.getSize(plan, profileId, new ProvisioningContext(), getMonitor());
} catch (ProvisionException e) {
fail("1.99", e);
}
@@ -62,7 +62,7 @@ public class SizingTest extends AbstractProvisioningUITest {
}
long size = IIUElement.SIZE_NOTAPPLICABLE;
try {
- size = ProvisioningUtil.getSize(plan, profileId, getMonitor());
+ size = ProvisioningUtil.getSize(plan, profileId, new ProvisioningContext(), getMonitor());
} catch (ProvisionException e) {
fail("1.99", e);
}
diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java b/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
index 9958e36b5..039513ec7 100644
--- a/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
+++ b/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
@@ -91,15 +91,17 @@ public class AutomaticUpdater implements IUpdateListener {
new Updates(event.getProfileId(), event
.getIUs()));
Collection results = descriptor.performQuery(null);
- IInstallableUnit[] replacements = (IInstallableUnit[]) results.toArray(new IInstallableUnit[results.size()]);
+ IInstallableUnit[] replacements = (IInstallableUnit[]) results
+ .toArray(new IInstallableUnit[results.size()]);
if (replacements.length > 0) {
ProfileChangeRequest request = ProfileChangeRequest
.createByProfileId(event.getProfileId());
request.removeInstallableUnits(iusWithUpdates);
request.addInstallableUnits(replacements);
final PlannerResolutionOperation operation = new PlannerResolutionOperation(
- AutomaticUpdateMessages.AutomaticUpdater_ResolutionOperationLabel, iusWithUpdates,
- event.getProfileId(), request, new MultiStatus(
+ AutomaticUpdateMessages.AutomaticUpdater_ResolutionOperationLabel,
+ iusWithUpdates, event.getProfileId(), request,
+ null, new MultiStatus(
AutomaticUpdatePlugin.PLUGIN_ID, 0, null,
null), false);
if ((operation.execute(new NullProgressMonitor())).isOK()) {
@@ -109,6 +111,7 @@ public class AutomaticUpdater implements IUpdateListener {
AutomaticUpdateMessages.AutomaticUpdater_AutomaticDownloadOperationName,
event.getProfileId(), operation
.getProvisioningPlan(),
+ new ProvisioningContext(),
new DownloadPhaseSet(), false),
StatusManager.LOG);
job.addJobChangeListener(new JobChangeAdapter() {
diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/UpdateHandler.java b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/UpdateHandler.java
index 6d7bfcf3f..924632b7d 100644
--- a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/UpdateHandler.java
+++ b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/UpdateHandler.java
@@ -47,10 +47,9 @@ public class UpdateHandler extends PreloadingRepositoryHandler {
}
// get the profile roots
ElementQueryDescriptor queryDescriptor = Policy.getDefault().getQueryProvider().getQueryDescriptor(new ProfileElement(null, profileId));
- // Collector collector = queryDescriptor.queryable.query(queryDescriptor.query, queryDescriptor.collector, null);
- Collection collector = queryDescriptor.performQuery(null);
- final IInstallableUnit[] roots = new IInstallableUnit[collector.size()];
- Iterator iter = collector.iterator();
+ Collection collection = queryDescriptor.performQuery(null);
+ final IInstallableUnit[] roots = new IInstallableUnit[collection.size()];
+ Iterator iter = collection.iterator();
int i = 0;
while (iter.hasNext()) {
roots[i] = (IInstallableUnit) ProvUI.getAdapter(iter.next(), IInstallableUnit.class);
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
index d03013341..2ea580ee1 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
@@ -147,6 +147,7 @@ public class ProvUIMessages extends NLS {
public static String ResolutionReport_SummaryStatus;
public static String ResolutionWizardPage_Canceled;
public static String ResolutionWizardPage_ErrorStatus;
+ public static String ResolutionWizardPage_NoSelections;
public static String ResolutionWizardPage_WarningInfoStatus;
public static String AddColocatedRepositoryAction_Label;
@@ -171,6 +172,7 @@ public class ProvUIMessages extends NLS {
public static String AvailableIUsPage_NoSites;
public static String AvailableIUsPage_RepoFilterInstructions;
public static String AvailableIUsPage_RepoFilterLabel;
+ public static String AvailableIUsPage_ResolveAllCheckbox;
public static String AvailableIUsPage_ShowLatestVersions;
public static String AvailableIUsPage_Title;
public static String DefaultQueryProvider_ErrorRetrievingProfile;
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
index e095831cf..6111dc9ad 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
@@ -20,6 +20,7 @@ import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepositoryManager;
import org.eclipse.equinox.internal.provisional.p2.core.repository.RepositoryEvent;
+import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.internal.provisional.p2.ui.*;
import org.eclipse.equinox.internal.provisional.p2.ui.dialogs.AddRepositoryDialog;
@@ -50,6 +51,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
private static final String AVAILABLE_VIEW_TYPE = "AvailableViewType"; //$NON-NLS-1$
private static final String SHOW_LATEST_VERSIONS_ONLY = "ShowLatestVersionsOnly"; //$NON-NLS-1$
private static final String HIDE_INSTALLED_IUS = "HideInstalledContent"; //$NON-NLS-1$
+ private static final String RESOLVE_ALL = "ResolveInstallWithAllSites"; //$NON-NLS-1$
private static final String LINKACTION = "linkAction"; //$NON-NLS-1$
private static final int DEFAULT_WIDTH = 300;
private static final String SITE_NONE = ProvUIMessages.AvailableIUsPage_NoSites;
@@ -68,7 +70,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
Composite availableIUButtonBar;
Combo repoCombo;
Link repoLink, installLink;
- Button useCategoriesCheckbox, hideInstalledCheckbox, showLatestVersionsCheckbox;
+ Button useCategoriesCheckbox, hideInstalledCheckbox, showLatestVersionsCheckbox, resolveAllCheckbox;
Text detailsArea;
StructuredViewerProvisioningListener profileListener;
ProvUIProvisioningListener comboRepoListener;
@@ -110,7 +112,11 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
createRepoArea(composite);
// Now the available group
- availableIUGroup = new AvailableIUGroup(policy, composite, JFaceResources.getDialogFont(), manager, queryContext, ProvUI.getIUColumnConfig());
+ // If we have a repository manipulator, we want to default to showing no repos. Otherwise all.
+ int filterConstant = AvailableIUGroup.AVAILABLE_NONE;
+ if (policy.getRepositoryManipulator() == null)
+ filterConstant = AvailableIUGroup.AVAILABLE_ALL;
+ availableIUGroup = new AvailableIUGroup(policy, composite, JFaceResources.getDialogFont(), manager, queryContext, ProvUI.getIUColumnConfig(), filterConstant);
// Selection listeners must be registered on both the normal selection
// events and the check mark events. Must be done after buttons
@@ -213,6 +219,15 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
}
}, ProvUIMessages.AvailableIUsPage_GotoInstallInfo);
installLink.setLayoutData(gd);
+
+ if (policy.getRepositoryManipulator() != null) {
+ // Checkbox
+ resolveAllCheckbox = new Button(parent, SWT.CHECK);
+ resolveAllCheckbox.setText(ProvUIMessages.AvailableIUsPage_ResolveAllCheckbox);
+ gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+ gd.horizontalSpan = 2;
+ resolveAllCheckbox.setLayoutData(gd);
+ }
}
private void createRepoArea(Composite parent) {
@@ -398,8 +413,24 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
updateDetails();
iuDetailsGroup.enablePropertyLink(availableIUGroup.getSelectedIUElements().length == 1);
validateNextButton();
- fillRepoCombo(SITE_NONE);
- setRepoComboDecoration(null);
+
+ if (repoCombo != null) {
+ fillRepoCombo(SITE_NONE);
+ setRepoComboDecoration(null);
+ }
+
+ if (resolveAllCheckbox != null) {
+ IDialogSettings settings = ProvUIActivator.getDefault().getDialogSettings();
+ IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION);
+ String value = null;
+ if (section != null)
+ value = section.get(RESOLVE_ALL);
+ // no section or no value in the section
+ if (value == null)
+ resolveAllCheckbox.setSelection(true);
+ else
+ resolveAllCheckbox.setSelection(section.getBoolean(RESOLVE_ALL));
+ }
}
public boolean performFinish() {
@@ -455,6 +486,8 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
section.put(AVAILABLE_VIEW_TYPE, queryContext.getViewType());
section.put(SHOW_LATEST_VERSIONS_ONLY, showLatestVersionsCheckbox.getSelection());
section.put(HIDE_INSTALLED_IUS, hideInstalledCheckbox.getSelection());
+ if (resolveAllCheckbox != null)
+ section.put(RESOLVE_ALL, resolveAllCheckbox.getSelection());
}
void updateDetails() {
@@ -608,22 +641,27 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
void fillRepoCombo(final String selection) {
if (repoCombo == null || policy.getRepositoryManipulator() == null)
return;
- comboRepos = policy.getRepositoryManipulator().getKnownRepositories();
- boolean hasLocalSites = localSitesAvailable();
+ URI[] sites = policy.getRepositoryManipulator().getKnownRepositories();
+ boolean hasLocalSites = getLocalSites().length > 0;
final String[] items;
- if (hasLocalSites)
+ if (hasLocalSites) {
// None, All, repo1, repo2....repo n, Local
- items = new String[comboRepos.length + 3];
- else
+ comboRepos = new URI[sites.length + 3];
+ items = new String[sites.length + 3];
+ } else {
// None, All, repo1, repo2....repo n
- items = new String[comboRepos.length + 2];
+ comboRepos = new URI[sites.length + 2];
+ items = new String[sites.length + 2];
+ }
items[INDEX_SITE_NONE] = SITE_NONE;
items[INDEX_SITE_ALL] = SITE_ALL;
- for (int i = 0; i < comboRepos.length; i++)
- items[i + 2] = comboRepos[i].toString();
+ for (int i = 0; i < sites.length; i++) {
+ items[i + 2] = sites[i].toString();
+ comboRepos[i + 2] = sites[i];
+ }
if (hasLocalSites)
items[items.length - 1] = SITE_LOCAL;
- display.asyncExec(new Runnable() {
+ Runnable runnable = new Runnable() {
public void run() {
if (repoCombo == null || repoCombo.isDisposed())
return;
@@ -643,17 +681,23 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
repoCombo.select(INDEX_SITE_NONE);
repoComboSelectionChanged();
}
- });
+ };
+ // Only run the UI code async if we have to. If we always async the code,
+ // the automated tests (which are in the UI thread) can get out of sync
+ if (Display.getCurrent() == null)
+ display.asyncExec(runnable);
+ else
+ runnable.run();
}
- private boolean localSitesAvailable() {
+ private URI[] getLocalSites() {
// use our current visibility flags plus the local filter
int flags = queryContext.getMetadataRepositoryFlags() | IRepositoryManager.REPOSITORIES_LOCAL;
try {
- return ProvisioningUtil.getMetadataRepositories(flags).length > 0;
+ return ProvisioningUtil.getMetadataRepositories(flags);
} catch (ProvisionException e) {
- return false;
+ return null;
}
}
@@ -672,17 +716,19 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
void repoComboSelectionChanged() {
int selection = repoCombo.getSelectionIndex();
+ int localIndex = getLocalSites().length == 0 ? repoCombo.getItemCount() : repoCombo.getItemCount() - 1;
if (comboRepos == null || selection < 0)
selection = INDEX_SITE_NONE;
if (selection == INDEX_SITE_NONE) {
availableIUGroup.setRepositoryFilter(AvailableIUGroup.AVAILABLE_NONE, null);
} else if (selection == INDEX_SITE_ALL) {
availableIUGroup.setRepositoryFilter(AvailableIUGroup.AVAILABLE_ALL, null);
- } else if (selection - 2 >= comboRepos.length) {
+ } else if (selection >= localIndex) {
availableIUGroup.setRepositoryFilter(AvailableIUGroup.AVAILABLE_LOCAL, null);
} else {
- availableIUGroup.setRepositoryFilter(AvailableIUGroup.AVAILABLE_SPECIFIED, comboRepos[selection - 2]);
+ availableIUGroup.setRepositoryFilter(AvailableIUGroup.AVAILABLE_SPECIFIED, comboRepos[selection]);
}
+ validateNextButton();
}
void addViewerProvisioningListeners() {
@@ -771,6 +817,23 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
// since we passed the default column config to the available iu group,
// we know that this label provider matches the one used there.
return CopyUtils.getIndentedClipboardText(getSelectedIUElements(), new IUDetailsLabelProvider());
+ }
+ public ProvisioningContext getProvisioningContext() {
+ // If the user can't manipulate repos, always resolve against everything
+ if (policy.getRepositoryManipulator() == null)
+ return new ProvisioningContext();
+ // Consult the checkbox to see if we should resolve against everything,
+ // or use the combo to determine what to do.
+ if (resolveAllCheckbox.getSelection())
+ return new ProvisioningContext();
+ int siteSel = repoCombo.getSelectionIndex();
+ if (siteSel == INDEX_SITE_ALL || siteSel == INDEX_SITE_NONE)
+ return new ProvisioningContext();
+ URI[] locals = getLocalSites();
+ // If there are local sites, the last item in the combo is "Local Sites"
+ if (locals.length > 0 && siteSel == repoCombo.getItemCount() - 1)
+ return new ProvisioningContext(locals);
+ return new ProvisioningContext(new URI[] {comboRepos[siteSel]});
}
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
index 64dc62141..cc459fca7 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
@@ -12,8 +12,10 @@ package org.eclipse.equinox.internal.p2.ui.dialogs;
import java.util.Arrays;
import java.util.HashSet;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.ui.ProvisioningOperationRunner;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation;
import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy;
@@ -34,6 +36,7 @@ public abstract class ProvisioningOperationWizard extends Wizard {
private Object[] planSelections;
protected ISelectableIUsPage mainPage;
protected ResolutionWizardPage resolutionPage;
+ private ProvisioningContext provisioningContext;
private PlannerResolutionOperation resolutionOperation;
boolean waitingForOtherJobs = false;
@@ -104,26 +107,41 @@ public abstract class ProvisioningOperationWizard extends Wizard {
if (shouldRecomputePlan()) {
// any initial plan that was passed in is no longer valid, no need to hang on to it
resolutionOperation = null;
+ // record the provisioning context so we'll know if it's different next time
+ provisioningContext = getProvisioningContext();
planSelections = mainPage.getCheckedIUElements();
- resolutionPage.recomputePlan(makeResolutionElementRoot(planSelections));
+ root = makeResolutionElementRoot(planSelections);
+ resolutionPage.recomputePlan(root, provisioningContext, getContainer());
planChanged();
}
} else {
if (resolutionOperation != null && shouldRecomputePlan())
resolutionOperation = null;
- resolutionPage = createResolutionPage(makeResolutionElementRoot(mainPage.getCheckedIUElements()), resolutionOperation);
+ provisioningContext = getProvisioningContext();
+ root = makeResolutionElementRoot(mainPage.getCheckedIUElements());
+ resolutionPage = createResolutionPage(root, resolutionOperation);
+ if (resolutionOperation == null)
+ resolutionPage.recomputePlan(root, provisioningContext, getContainer());
planChanged();
addPage(resolutionPage);
}
- return resolutionPage;
+ IStatus status = resolutionPage.getCurrentStatus();
+ // Normally, resolution errors are reported on the next page.
+ // But if the user canceled the resolution, we don't want to move
+ // to the next page. In the future we may have other reasons not to
+ // move to the next page (providing selection quick fixes on the first
+ // page, etc.)
+ if (status.getSeverity() != IStatus.CANCEL)
+ return resolutionPage;
}
return null;
}
private boolean shouldRecomputePlan() {
boolean previouslyWaiting = waitingForOtherJobs;
+ boolean previouslyCanceled = resolutionPage != null && resolutionPage.getCurrentStatus().getSeverity() == IStatus.CANCEL;
waitingForOtherJobs = ProvisioningOperationRunner.hasScheduledOperationsFor(profileId);
- return waitingForOtherJobs || previouslyWaiting || mainPageSelectionsHaveChanged();
+ return waitingForOtherJobs || previouslyWaiting || previouslyCanceled || mainPageSelectionsHaveChanged() || provisioningContextChanged();
}
private boolean mainPageSelectionsHaveChanged() {
@@ -134,9 +152,23 @@ public abstract class ProvisioningOperationWizard extends Wizard {
return !(selectedIUs.equals(lastIUSelections));
}
+ private boolean provisioningContextChanged() {
+ ProvisioningContext currentProvisioningContext = getProvisioningContext();
+ if (currentProvisioningContext == null && provisioningContext == null)
+ return false;
+ if (currentProvisioningContext != null && provisioningContext != null)
+ return provisioningContext.getMetadataRepositories() != getProvisioningContext().getMetadataRepositories();
+ // One is null and the other is not
+ return true;
+ }
+
protected void planChanged() {
// hook for subclasses. Default is to do nothing
}
protected abstract IUElementListRoot makeResolutionElementRoot(Object[] selectedElements);
+
+ protected ProvisioningContext getProvisioningContext() {
+ return null;
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionWizardPage.java
index 7c27e6a77..de293072f 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionWizardPage.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionWizardPage.java
@@ -29,6 +29,7 @@ import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy;
import org.eclipse.equinox.internal.provisional.p2.ui.viewers.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
@@ -112,12 +113,12 @@ public abstract class ResolutionWizardPage extends ProvisioningWizardPage {
labelProvider = new IUDetailsLabelProvider(null, getColumnConfig(), getShell());
treeViewer.setLabelProvider(labelProvider);
- if (resolvedOperation == null)
- // this will also set the input on the viewer
- recomputePlan(input);
- else {
+ if (resolvedOperation != null) {
treeViewer.setInput(input);
resolutionResult = resolvedOperation.getResolutionResult();
+ } else {
+ // Just record the fact that we haven't resolved yet
+ couldNotResolve(null);
}
// Optional area to show the size
@@ -183,28 +184,36 @@ public abstract class ResolutionWizardPage extends ProvisioningWizardPage {
}
- public void recomputePlan(IUElementListRoot root) {
+ /**
+ * Recompute the provisioning plan based on the items in the IUElementListRoot and the given provisioning context.
+ * Report progress using the specified runnable context. This method may be called before the page is created.
+ *
+ * @param root
+ * @param provisioningContext
+ * @param runnableContext
+ */
+ public void recomputePlan(IUElementListRoot root, final ProvisioningContext provisioningContext, IRunnableContext runnableContext) {
this.input = root;
final Object[] elements = root.getChildren(root);
final IInstallableUnit[] ius = ElementUtils.elementsToIUs(elements);
couldNotResolve = false;
try {
if (elements.length == 0) {
- couldNotResolve();
+ couldNotResolve(ProvUIMessages.ResolutionWizardPage_NoSelections);
} else
- getContainer().run(true, true, new IRunnableWithProgress() {
+ runnableContext.run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) {
resolvedOperation = null;
resolutionResult = null;
MultiStatus status = PlanAnalyzer.getProfileChangeAlteredStatus();
ProfileChangeRequest request = computeProfileChangeRequest(elements, status, monitor);
if (request != null) {
- resolvedOperation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationWizardPage_ResolutionOperationLabel, ius, getProfileId(), request, status, false);
+ resolvedOperation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationWizardPage_ResolutionOperationLabel, ius, getProfileId(), request, provisioningContext, status, false);
try {
resolvedOperation.execute(monitor);
} catch (ProvisionException e) {
ProvUI.handleException(e, null, StatusManager.SHOW | StatusManager.LOG);
- couldNotResolve();
+ couldNotResolve(null);
}
if (resolvedOperation.getProvisioningPlan() != null) {
resolutionResult = resolvedOperation.getResolutionResult();
@@ -224,16 +233,23 @@ public abstract class ResolutionWizardPage extends ProvisioningWizardPage {
// Nothing to report if thread was interrupted
} catch (InvocationTargetException e) {
ProvUI.handleException(e.getCause(), null, StatusManager.SHOW | StatusManager.LOG);
- couldNotResolve();
+ couldNotResolve(null);
+ }
+ // If we've already been created (and not disposed), update the widgets. If not, nothing to do.
+ if (treeViewer != null && !treeViewer.getTree().isDisposed()) {
+ treeViewer.setInput(input);
+ updateStatus();
}
- treeViewer.setInput(input);
- updateStatus();
}
- private void couldNotResolve() {
+ void couldNotResolve(String message) {
resolvedOperation = null;
resolutionResult = null;
couldNotResolve = true;
+ if (message != null) {
+ IStatus status = new MultiStatus(ProvUIActivator.PLUGIN_ID, IStatusCodes.UNEXPECTED_NOTHING_TO_DO, message, null);
+ StatusManager.getManager().handle(status, StatusManager.LOG);
+ }
}
private ProfileModificationOperation createProfileModificationOperation(ProvisioningPlan plan) {
@@ -289,6 +305,13 @@ public abstract class ResolutionWizardPage extends ProvisioningWizardPage {
detailsArea.setText(getDetailText());
}
+ public IStatus getCurrentStatus() {
+ if (couldNotResolve || resolutionResult == null) {
+ return PlanAnalyzer.getStatus(IStatusCodes.UNEXPECTED_NOTHING_TO_DO, null);
+ }
+ return resolutionResult.getSummaryStatus();
+ }
+
String getDetailText() {
String detail = null;
IInstallableUnit iu = getSelectedIU();
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
index 297953a40..9fe9c709d 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
@@ -18,10 +18,12 @@ import org.eclipse.equinox.internal.p2.ui.model.IIUElement;
import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan;
+import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.query.IQueryable;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil;
import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy;
+import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@@ -39,7 +41,7 @@ public abstract class SizeComputingWizardPage extends ResolutionWizardPage {
// Compute size immediately if a plan is available. This may or may not finish before
// the widgetry is created.
if (initialResolution != null)
- computeSizing(initialResolution.getProvisioningPlan(), profileID);
+ computeSizing(initialResolution.getProvisioningPlan(), profileID, initialResolution.getProvisioningContext());
else
// Set the size to indicate there is no size yet.
size = IIUElement.SIZE_NOTAPPLICABLE;
@@ -49,14 +51,14 @@ public abstract class SizeComputingWizardPage extends ResolutionWizardPage {
protected long size;
Job sizingJob;
- protected void computeSizing(final ProvisioningPlan plan, final String profileId) {
+ protected void computeSizing(final ProvisioningPlan plan, final String profileId, final ProvisioningContext provisioningContext) {
size = IIUElement.SIZE_UNKNOWN;
if (sizingJob != null)
sizingJob.cancel();
sizingJob = new Job(ProvUIMessages.SizeComputingWizardPage_SizeJobTitle) {
protected IStatus run(IProgressMonitor monitor) {
try {
- size = ProvisioningUtil.getSize(plan, profileId, monitor);
+ size = ProvisioningUtil.getSize(plan, profileId, provisioningContext, monitor);
} catch (ProvisionException e) {
return e.getStatus();
}
@@ -118,10 +120,10 @@ public abstract class SizeComputingWizardPage extends ResolutionWizardPage {
}
}
- public void recomputePlan(IUElementListRoot root) {
- super.recomputePlan(root);
+ public void recomputePlan(IUElementListRoot root, ProvisioningContext provisioningContext, IRunnableContext runnableContext) {
+ super.recomputePlan(root, provisioningContext, runnableContext);
if (getCurrentPlan() != null)
- computeSizing(getCurrentPlan(), getProfileId());
+ computeSizing(getCurrentPlan(), getProfileId(), provisioningContext);
}
protected IQueryable getQueryable(ProvisioningPlan plan) {
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
index f85015a3a..bf1a3b7c8 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
@@ -108,6 +108,7 @@ RepositoryManipulatorDropTarget_DragSourceNotValid={0} was not accepted as a val
ResolutionReport_SummaryStatus=Operation details
ResolutionWizardPage_Canceled=The operation was cancelled.
ResolutionWizardPage_ErrorStatus=The operation cannot be completed. See the details.
+ResolutionWizardPage_NoSelections=There were no installable units selected when the plan was computed.
ResolutionWizardPage_WarningInfoStatus=Your original request has been modified. See the details.
AcceptLicensesWizardPage_AcceptMultiple=I &accept the terms of the license agreements
@@ -166,7 +167,7 @@ PlannerResolutionOperation_UnexpectedError=Unexpected error. Unable to calculat
PlanStatusHelper_IgnoringImpliedDowngrade="{0}" will be ignored because a newer version is already installed.
PlanStatusHelper_ImpliedUpdate="{0}" is already installed, so an update will be performed instead.
PlanStatusHelper_Items=Items
-PlanStatusHelper_NothingToDo=Cannot complete the request.
+PlanStatusHelper_NothingToDo=Cannot complete the request. See the error log for details.
PlanStatusHelper_AlreadyInstalled="{0}" will be ignored because it is already installed.
PlanStatusHelper_AnotherOperationInProgress=Cannot continue the operation. There is another install operation in progress.
PlanStatusHelper_Launch=Launch...
@@ -206,6 +207,7 @@ AvailableIUsPage_LocalSites=Only Local Sites
AvailableIUsPage_NoSites=type or select a site
AvailableIUsPage_RepoFilterInstructions=You can type a new site name and press 'Enter' to view software from that site.
AvailableIUsPage_RepoFilterLabel=&Work with:
+AvailableIUsPage_ResolveAllCheckbox=&Contact all update sites during install to find required software
AvailableIUsPage_ShowLatestVersions=Show only the &latest versions of available software
AvailableIUsPage_Title=Available Software
DefaultQueryProvider_ErrorRetrievingProfile=Error retrieving profile {0}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
index 44f1e8430..93c096f13 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
@@ -10,10 +10,12 @@
*******************************************************************************/
package org.eclipse.equinox.internal.p2.ui.model;
+import java.net.URI;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
+import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository;
import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan;
import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
@@ -88,7 +90,7 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
try {
SubMonitor mon = SubMonitor.convert(monitor, 100);
ProvisioningPlan plan = getSizingPlan(mon.newChild(50));
- size = ProvisioningUtil.getSize(plan, profileID, mon.newChild(50));
+ size = ProvisioningUtil.getSize(plan, profileID, getProvisioningContext(), mon.newChild(50));
} catch (ProvisionException e) {
handleException(e, ProvUIMessages.AvailableIUElement_ProfileNotFound);
size = IIUElement.SIZE_UNAVAILABLE;
@@ -102,7 +104,7 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
protected ProvisioningPlan getSizingPlan(IProgressMonitor monitor) throws ProvisionException {
ProfileChangeRequest request = ProfileChangeRequest.createByProfileId(profileID);
request.addInstallableUnits(new IInstallableUnit[] {getIU()});
- return ProvisioningUtil.getProvisioningPlan(request, new ProvisioningContext(), monitor);
+ return ProvisioningUtil.getProvisioningPlan(request, getProvisioningContext(), monitor);
}
public IInstallableUnit getIU() {
@@ -177,4 +179,10 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
public boolean isUpdate() {
return isUpdate;
}
+
+ private ProvisioningContext getProvisioningContext() {
+ if (hasQueryable() && getQueryable() instanceof IRepository)
+ return new ProvisioningContext(new URI[] {((IRepository) getQueryable()).getLocation()});
+ return new ProvisioningContext();
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/ProfileModificationAction.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/ProfileModificationAction.java
index d837603c5..d49f8093f 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/ProfileModificationAction.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/ProfileModificationAction.java
@@ -97,12 +97,12 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
// No explanation for failure was provided. It shouldn't happen, but...
failureStatus = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, ProvUIMessages.ProfileModificationAction_NoExplanationProvided);
}
- ProvUI.reportStatus(failureStatus, StatusManager.SHOW);
+ ProvUI.reportStatus(failureStatus, StatusManager.SHOW | StatusManager.LOG);
runCanceled();
return;
}
// We have a profile change request, let's get a plan for it. This could take awhile.
- final PlannerResolutionOperation operation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationAction_ResolutionOperationLabel, ius, id, request[0], additionalStatus, isResolveUserVisible());
+ final PlannerResolutionOperation operation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationAction_ResolutionOperationLabel, ius, id, request[0], null, additionalStatus, isResolveUserVisible());
// Since we are resolving asynchronously, our job is done. Setting this allows
// callers to decide to close the launching window.
// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=236495
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AvailableIUGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AvailableIUGroup.java
index a5a381a55..36a8b364a 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AvailableIUGroup.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AvailableIUGroup.java
@@ -44,7 +44,8 @@ import org.eclipse.ui.PlatformUI;
/**
* An AvailableIUGroup is a reusable UI component that displays the
- * IU's available for installation.
+ * IU's available for installation. By default, content from all available
+ * repositories is shown.
*
* @since 3.4
*/
@@ -74,13 +75,14 @@ public class AvailableIUGroup extends StructuredIUGroup {
Job lastRequestedLoadJob;
/**
- * Create a group that represents the available IU's but does not use any of the
- * view menu or check box capabilities.
+ * Create a group that represents the available IU's from all available
+ * repositories. The default policy controls the visibility flags for
+ * repositories and IU's.
*
* @param parent the parent composite for the group
*/
public AvailableIUGroup(final Composite parent) {
- this(Policy.getDefault(), parent, parent.getFont(), null, null, ProvUI.getIUColumnConfig());
+ this(Policy.getDefault(), parent, parent.getFont(), null, null, ProvUI.getIUColumnConfig(), AVAILABLE_ALL);
}
/**
@@ -96,8 +98,9 @@ public class AvailableIUGroup extends StructuredIUGroup {
* information about what is shown, such as the visible repositories
* @param columnConfig the description of the columns that should be shown. If <code>null</code>, a default
* will be used.
+ * @param filterConstant a constant specifying which repositories are used when showing content
*/
- public AvailableIUGroup(Policy policy, final Composite parent, Font font, QueryableMetadataRepositoryManager queryable, IUViewQueryContext queryContext, IUColumnConfig[] columnConfig) {
+ public AvailableIUGroup(Policy policy, final Composite parent, Font font, QueryableMetadataRepositoryManager queryable, IUViewQueryContext queryContext, IUColumnConfig[] columnConfig, int filterConstant) {
super(policy, parent, font, columnConfig);
this.display = parent.getDisplay();
if (queryContext == null)
@@ -108,6 +111,7 @@ public class AvailableIUGroup extends StructuredIUGroup {
this.queryableManager = new QueryableMetadataRepositoryManager(this.queryContext, false);
else
this.queryableManager = queryable;
+ this.filterConstant = filterConstant;
this.filter = new AvailableIUPatternFilter(getColumnConfig());
createGroupComposite(parent);
}
@@ -407,6 +411,15 @@ public class AvailableIUGroup extends StructuredIUGroup {
}
public void setRepositoryFilter(int filterFlag, URI repoLocation) {
+ // If there has been no change, don't do anything. We will be
+ // clearing out selection caches in this method and should not do
+ // so if there's really no change.
+ if (filterConstant == filterFlag) {
+ if (filterConstant != AVAILABLE_SPECIFIED)
+ return;
+ if (repoLocation != null && repoLocation.equals(repositoryFilter))
+ return;
+ }
filterConstant = filterFlag;
switch (filterFlag) {
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstallWizard.java
index ddf5f98f8..d15756fc4 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstallWizard.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstallWizard.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
import org.eclipse.equinox.internal.p2.ui.dialogs.*;
import org.eclipse.equinox.internal.p2.ui.model.*;
+import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.internal.provisional.p2.ui.ProvUIImages;
import org.eclipse.equinox.internal.provisional.p2.ui.QueryableMetadataRepositoryManager;
@@ -79,4 +80,8 @@ public class InstallWizard extends WizardWithLicenses {
mainPage.performFinish();
return super.performFinish();
}
+
+ protected ProvisioningContext getProvisioningContext() {
+ return mainPage.getProvisioningContext();
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RevertProfilePage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RevertProfilePage.java
index e1769d040..da8cd6ec0 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RevertProfilePage.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RevertProfilePage.java
@@ -21,7 +21,7 @@ import org.eclipse.equinox.internal.p2.ui.viewers.DeferredQueryContentProvider;
import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan;
-import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
+import org.eclipse.equinox.internal.provisional.p2.engine.*;
import org.eclipse.equinox.internal.provisional.p2.ui.*;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.*;
import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy;
@@ -251,7 +251,9 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
boolean reverted = false;
if (plan[0] != null) {
if (plan[0].getStatus().isOK()) {
- ProvisioningOperation op = new ProfileModificationOperation(ProvUIMessages.RevertDialog_RevertOperationLabel, profileId, plan[0]);
+ // We use a default provisioning context (all repos) because we have no other
+ // way currently to figure out which sites the user wants to contact
+ ProvisioningOperation op = new ProfileModificationOperation(ProvUIMessages.RevertDialog_RevertOperationLabel, profileId, plan[0], new ProvisioningContext(), new DefaultPhaseSet(), true);
ProvisioningOperationRunner.schedule(op, StatusManager.SHOW | StatusManager.LOG);
ProvisioningOperationRunner.requestRestart(true);
reverted = true;
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/PlannerResolutionOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/PlannerResolutionOperation.java
index d883b4de6..2bf99b0fa 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/PlannerResolutionOperation.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/PlannerResolutionOperation.java
@@ -34,13 +34,18 @@ public class PlannerResolutionOperation extends ProvisioningOperation {
MultiStatus additionalStatus;
ResolutionResult report;
IInstallableUnit[] iusInvolved;
+ ProvisioningContext provisioningContext;
- public PlannerResolutionOperation(String label, IInstallableUnit[] iusInvolved, String profileId, ProfileChangeRequest request, MultiStatus additionalStatus, boolean isUser) {
+ public PlannerResolutionOperation(String label, IInstallableUnit[] iusInvolved, String profileId, ProfileChangeRequest request, ProvisioningContext provisioningContext, MultiStatus additionalStatus, boolean isUser) {
super(label);
this.request = request;
this.profileId = profileId;
this.isUser = isUser;
this.iusInvolved = iusInvolved;
+ if (provisioningContext == null)
+ this.provisioningContext = new ProvisioningContext();
+ else
+ this.provisioningContext = provisioningContext;
Assert.isNotNull(additionalStatus);
this.additionalStatus = additionalStatus;
}
@@ -53,8 +58,12 @@ public class PlannerResolutionOperation extends ProvisioningOperation {
return request;
}
+ public ProvisioningContext getProvisioningContext() {
+ return provisioningContext;
+ }
+
protected IStatus doExecute(IProgressMonitor monitor) throws ProvisionException {
- plan = ProvisioningUtil.getProvisioningPlan(request, new ProvisioningContext(), monitor);
+ plan = ProvisioningUtil.getProvisioningPlan(request, provisioningContext, monitor);
if (plan == null)
return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, IStatusCodes.UNEXPECTED_NOTHING_TO_DO, ProvUIMessages.PlannerResolutionOperation_UnexpectedError, null);
// We are reporting on our ability to get a plan, not on the status of the plan itself.
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProfileModificationOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProfileModificationOperation.java
index 8ce92a87f..2f022ec22 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProfileModificationOperation.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProfileModificationOperation.java
@@ -27,15 +27,17 @@ public class ProfileModificationOperation extends ProvisioningOperation {
String profileId;
PhaseSet phaseSet;
boolean isUser = true;
+ ProvisioningContext provisioningContext;
public ProfileModificationOperation(String label, String profileId, ProvisioningPlan plan) {
- this(label, profileId, plan, null, true);
+ this(label, profileId, plan, null, null, true);
}
- public ProfileModificationOperation(String label, String profileId, ProvisioningPlan plan, PhaseSet set, boolean isUser) {
+ public ProfileModificationOperation(String label, String profileId, ProvisioningPlan plan, ProvisioningContext context, PhaseSet set, boolean isUser) {
super(label);
this.plan = plan;
this.profileId = profileId;
+ this.provisioningContext = context;
this.isUser = isUser;
if (set == null)
phaseSet = new DefaultPhaseSet();
@@ -56,7 +58,7 @@ public class ProfileModificationOperation extends ProvisioningOperation {
}
protected IStatus doExecute(IProgressMonitor monitor) throws ProvisionException {
- return ProvisioningUtil.performProvisioningPlan(plan, phaseSet, getProfile(), monitor);
+ return ProvisioningUtil.performProvisioningPlan(plan, phaseSet, getProfile(), provisioningContext, monitor);
}
public boolean runInBackground() {
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java
index eca565b84..01ae4b074 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java
@@ -268,7 +268,11 @@ public class ProvisioningUtil {
* Get the plan for the specified install operation
*/
public static ProvisioningPlan getProvisioningPlan(ProfileChangeRequest request, ProvisioningContext context, IProgressMonitor monitor) throws ProvisionException {
- return getPlanner().getProvisioningPlan(request, context, monitor);
+ try {
+ return getPlanner().getProvisioningPlan(request, context, monitor);
+ } catch (OperationCanceledException e) {
+ return null;
+ }
}
/*
@@ -277,32 +281,53 @@ public class ProvisioningUtil {
public static ProvisioningPlan getRevertPlan(IProfile currentProfile, IProfile snapshot, IProgressMonitor monitor) throws ProvisionException {
Assert.isNotNull(currentProfile);
Assert.isNotNull(snapshot);
- return getPlanner().getRevertPlan(currentProfile, snapshot, new ProvisioningContext(), monitor);
+ return getPlanner().getDiffPlan(currentProfile, snapshot, monitor);
}
/*
* Get sizing info for the specified plan
*/
- public static long getSize(ProvisioningPlan plan, String profileId, IProgressMonitor monitor) throws ProvisionException {
+ public static long getSize(ProvisioningPlan plan, String profileId, ProvisioningContext context, IProgressMonitor monitor) throws ProvisionException {
// If there is nothing to size, return 0
if (plan == null)
return IIUElement.SIZE_NOTAPPLICABLE;
if (plan.getOperands().length == 0)
return 0;
SizingPhaseSet set = new SizingPhaseSet();
- IStatus status = getEngine().perform(getProfile(profileId), set, plan.getOperands(), null, monitor);
+ IStatus status = getEngine().perform(getProfile(profileId), set, plan.getOperands(), context, monitor);
if (status.isOK())
return set.getSizing().getDiskSize();
return IIUElement.SIZE_UNAVAILABLE;
}
+ public static IStatus performProvisioningPlan(ProvisioningPlan plan, PhaseSet phaseSet, IProfile profile, ProvisioningContext context, IProgressMonitor monitor) throws ProvisionException {
+ PhaseSet set;
+ if (phaseSet == null)
+ set = new DefaultPhaseSet();
+ else
+ set = phaseSet;
+ return getEngine().perform(profile, set, plan.getOperands(), context, monitor);
+ }
+
+ /**
+ * Perform the provisioning plan using a default context that contacts all repositories.
+ * @param plan the plan to perform
+ * @param phaseSet the phase set to use
+ * @param profile the profile to be changed
+ * @param monitor the progress monitor
+ * @return a status indicating the success of the plan
+ * @throws ProvisionException
+ *
+ * @deprecated clients should use {@linkplain #performProvisioningPlan(ProvisioningPlan, PhaseSet, IProfile, ProvisioningContext, IProgressMonitor)}
+ * to explicitly establish a provisioning context. Otherwise all repositories will be contacted
+ */
public static IStatus performProvisioningPlan(ProvisioningPlan plan, PhaseSet phaseSet, IProfile profile, IProgressMonitor monitor) throws ProvisionException {
PhaseSet set;
if (phaseSet == null)
set = new DefaultPhaseSet();
else
set = phaseSet;
- return getEngine().perform(profile, set, plan.getOperands(), null, monitor);
+ return getEngine().perform(profile, set, plan.getOperands(), new ProvisioningContext(), monitor);
}
private static IEngine getEngine() throws ProvisionException {

Back to the top