diff options
author | Susan Franklin | 2009-04-09 23:01:31 +0000 |
---|---|---|
committer | Susan Franklin | 2009-04-09 23:01:31 +0000 |
commit | 7508abd7bbf9364d7c0204047c41f400fc10580f (patch) | |
tree | 51716ebcaad3323debebb8ea0212ab28231d8cd1 /bundles/org.eclipse.equinox.p2.ui/src/org/eclipse | |
parent | fb7c5b1a15fec6e82f4a41e7d7feb0d36d8fe78e (diff) | |
download | rt.equinox.p2-7508abd7bbf9364d7c0204047c41f400fc10580f.tar.gz rt.equinox.p2-7508abd7bbf9364d7c0204047c41f400fc10580f.tar.xz rt.equinox.p2-7508abd7bbf9364d7c0204047c41f400fc10580f.zip |
Bug 268205 - [ui] Accepting an update causes plan to be recomputed
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui/src/org/eclipse')
22 files changed, 124 insertions, 78 deletions
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 1e0a8b690..49563868e 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 @@ -62,6 +62,7 @@ public class ProvUIMessages extends NLS { public static String IULicensePropertyPage_ViewLicenseLabel; public static String ProfileChangeRequestBuildingRequest; public static String ProfileElement_InvalidProfile; + public static String ProfileModificationAction_InvalidSelections; public static String ProfileModificationAction_NoChangeRequestProvided; public static String ProfileModificationAction_NoExplanationProvided; public static String ProfileModificationAction_ResolutionOperationLabel; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java index 69d7c04ba..1646cea01 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java @@ -11,7 +11,8 @@ package org.eclipse.equinox.internal.p2.ui.dialogs; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; /** diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java index eb94f8375..5b3ee78e1 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java @@ -10,8 +10,9 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; 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 51dbc4f9f..87a95d855 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2009 IBM Corporation and others. + * Copyright (c) 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -16,12 +16,11 @@ import java.util.HashSet; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.*; 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.core.ProvisionException; import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest; 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.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.jface.operation.IRunnableContext; @@ -119,6 +118,9 @@ public abstract class ProvisioningOperationWizard extends Wizard { root = makeResolutionElementRoot(planSelections); recomputePlan(getContainer()); planChanged(); + } else { + planSelections = currentPage.getCheckedIUElements(); + root = makeResolutionElementRoot(planSelections); } return selectNextPage(page, getCurrentStatus()); } @@ -209,7 +211,6 @@ public abstract class ProvisioningOperationWizard extends Wizard { */ public void recomputePlan(IRunnableContext runnableContext) { final Object[] elements = root.getChildren(root); - final IInstallableUnit[] ius = ElementUtils.elementsToIUs(elements); couldNotResolve = false; try { if (elements.length == 0) { @@ -221,7 +222,7 @@ public abstract class ProvisioningOperationWizard extends Wizard { MultiStatus status = PlanAnalyzer.getProfileChangeAlteredStatus(); ProfileChangeRequest request = computeProfileChangeRequest(elements, status, monitor); if (request != null) { - resolutionOperation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationWizardPage_ResolutionOperationLabel, ius, profileId, request, provisioningContext, status, false); + resolutionOperation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationWizardPage_ResolutionOperationLabel, profileId, request, provisioningContext, status, false); try { resolutionOperation.execute(monitor); } catch (ProvisionException e) { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java index c5471123c..572c36afc 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java @@ -11,6 +11,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java index d3005da63..04f45bd0d 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java @@ -11,10 +11,11 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.ui.IUPropertyUtils; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java index f5db65e1b..2da9dcce4 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java @@ -15,10 +15,10 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.equinox.internal.p2.ui.*; import org.eclipse.equinox.internal.p2.ui.model.ElementUtils; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider; 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.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.equinox.internal.provisional.p2.ui.viewers.*; @@ -129,7 +129,7 @@ public class SelectableIUsPage extends ResolutionStatusPage implements IResoluti createSelectButtons(composite); // The text area shows a description of the selected IU, or error detail if applicable. - iuDetailsGroup = new IUDetailsGroup(sashForm, tableViewer, convertWidthInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_WIDTH), false); + iuDetailsGroup = new IUDetailsGroup(sashForm, tableViewer, convertWidthInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_WIDTH), true); detailsArea = iuDetailsGroup.getDetailsArea(); updateStatus(root, resolvedOperation); 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 f89825844..87db30ab2 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 @@ -10,12 +10,13 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.text.NumberFormat; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.*; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; 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; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java index 7efc99a6b..e245a3f8e 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java @@ -10,8 +10,9 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan; import org.eclipse.equinox.internal.provisional.p2.query.IQueryable; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java index 0ebe8792c..a8428ef43 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java @@ -10,8 +10,9 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.metadata.IUpdateDescriptor; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java index ca8f6b92b..487c9be71 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java @@ -10,8 +10,9 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + 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.director.ProvisioningPlan; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.ui.dialogs.AcceptLicensesWizardPage; 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 a6e306cfb..38f764406 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 @@ -11,6 +11,7 @@ ProfileChangeRequestBuildingRequest=Processing request ProfileElement_InvalidProfile=Invalid profile ID {0} +ProfileModificationAction_InvalidSelections=Problem determining user request. Profile id: {0}, Selection count: {1} ProfileModificationAction_NoChangeRequestProvided=Could not interpret the request ProfileModificationAction_NoExplanationProvided=Unexpected error while processing the request. ProfileModificationAction_ResolutionOperationLabel=Calculating Requirements diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java index 08f149a0d..a214daf52 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.model; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.util.*; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; 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 d49f8093f..0f4d527ac 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 @@ -11,6 +11,8 @@ package org.eclipse.equinox.internal.provisional.p2.ui.actions; +import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; + import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.*; @@ -62,7 +64,7 @@ public abstract class ProfileModificationAction extends ProvisioningAction { } protected IStatus getNoProfileOrSelectionStatus(String id, IInstallableUnit[] ius) { - return new Status(IStatus.WARNING, ProvUIActivator.PLUGIN_ID, NLS.bind("Problem determining user request. Profile id: {0}, Selection count: {1}", id, new Integer(ius.length))); + return new Status(IStatus.WARNING, ProvUIActivator.PLUGIN_ID, NLS.bind(ProvUIMessages.ProfileModificationAction_InvalidSelections, id, new Integer(ius.length))); } protected void run(final IInstallableUnit[] ius, final String id) { @@ -102,7 +104,7 @@ public abstract class ProfileModificationAction extends ProvisioningAction { 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], null, additionalStatus, isResolveUserVisible()); + final PlannerResolutionOperation operation = new PlannerResolutionOperation(ProvUIMessages.ProfileModificationAction_ResolutionOperationLabel, 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/actions/UpdateAction.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java index 9cbd4e228..9f3b4df7b 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java @@ -11,17 +11,15 @@ package org.eclipse.equinox.internal.provisional.p2.ui.actions; -import java.util.*; +import java.util.ArrayList; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.PlanAnalyzer; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.AvailableUpdateElement; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest; 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.UpdateWizard; -import org.eclipse.equinox.internal.provisional.p2.ui.model.Updates; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.jface.viewers.ISelectionProvider; @@ -30,8 +28,8 @@ import org.eclipse.ui.PlatformUI; public class UpdateAction extends ExistingIUInProfileAction { - IUElementListRoot root; // root that will be used to seed the wizard - HashMap latestReplacements; + protected IUElementListRoot root; // root that will be used to seed the wizard + protected ArrayList initialSelections; // the elements that should be selected in the wizard boolean resolveIsVisible = true; QueryableMetadataRepositoryManager manager; boolean skipSelectionPage = false; @@ -52,11 +50,11 @@ public class UpdateAction extends ExistingIUInProfileAction { protected int performAction(IInstallableUnit[] ius, String targetProfileId, PlannerResolutionOperation resolution) { // Caches should have been created while formulating the plan - Assert.isNotNull(latestReplacements); + Assert.isNotNull(initialSelections); Assert.isNotNull(root); Assert.isNotNull(resolution); - UpdateWizard wizard = new UpdateWizard(getPolicy(), targetProfileId, root, latestReplacements.values().toArray(), resolution, manager); + UpdateWizard wizard = new UpdateWizard(getPolicy(), targetProfileId, root, initialSelections.toArray(), resolution, manager); wizard.setSkipSelectionsPage(skipSelectionPage); WizardDialog dialog = new WizardDialog(getShell(), wizard); dialog.create(); @@ -66,50 +64,14 @@ public class UpdateAction extends ExistingIUInProfileAction { } protected ProfileChangeRequest getProfileChangeRequest(IInstallableUnit[] ius, String targetProfileId, MultiStatus status, IProgressMonitor monitor) { - // Here we create a profile change request by finding the latest version available for any replacement. - ArrayList toBeUpdated = new ArrayList(); - latestReplacements = new HashMap(); - ArrayList allReplacements = new ArrayList(); - SubMonitor sub = SubMonitor.convert(monitor, ProvUIMessages.ProfileChangeRequestBuildingRequest, ius.length); - for (int i = 0; i < ius.length; i++) { - ElementQueryDescriptor descriptor = getQueryProvider().getQueryDescriptor(new Updates(targetProfileId, new IInstallableUnit[] {ius[i]})); - Iterator iter = descriptor.performQuery(sub).iterator(); - if (iter.hasNext()) - toBeUpdated.add(ius[i]); - ArrayList currentReplacements = new ArrayList(); - root = new IUElementListRoot(); - while (iter.hasNext()) { - IInstallableUnit iu = (IInstallableUnit) ProvUI.getAdapter(iter.next(), IInstallableUnit.class); - if (iu != null) { - AvailableUpdateElement element = new AvailableUpdateElement(root, iu, ius[i], targetProfileId, true); - currentReplacements.add(element); - allReplacements.add(element); - } - } - root.setChildren(allReplacements.toArray()); - for (int j = 0; j < currentReplacements.size(); j++) { - AvailableUpdateElement replacementElement = (AvailableUpdateElement) currentReplacements.get(j); - AvailableUpdateElement latestElement = (AvailableUpdateElement) latestReplacements.get(replacementElement.getIU().getId()); - IInstallableUnit latestIU = latestElement == null ? null : latestElement.getIU(); - if (latestIU == null || replacementElement.getIU().getVersion().compareTo(latestIU.getVersion()) > 0) - latestReplacements.put(replacementElement.getIU().getId(), replacementElement); - } - sub.worked(1); - } - if (toBeUpdated.size() <= 0) { + initialSelections = new ArrayList(); + root = new IUElementListRoot(); + ProfileChangeRequest request = UpdateWizard.createProfileChangeRequest(ius, targetProfileId, root, initialSelections, monitor); + if (request == null) { status.add(PlanAnalyzer.getStatus(IStatusCodes.NOTHING_TO_UPDATE, null)); - sub.done(); return null; } - ProfileChangeRequest request = ProfileChangeRequest.createByProfileId(targetProfileId); - Iterator iter = toBeUpdated.iterator(); - while (iter.hasNext()) - request.removeInstallableUnits(new IInstallableUnit[] {(IInstallableUnit) iter.next()}); - iter = latestReplacements.values().iterator(); - while (iter.hasNext()) - request.addInstallableUnits(new IInstallableUnit[] {((AvailableUpdateElement) iter.next()).getIU()}); - sub.done(); return request; } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AcceptLicensesWizardPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AcceptLicensesWizardPage.java index 8fd829b2f..96fdd14f7 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AcceptLicensesWizardPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AcceptLicensesWizardPage.java @@ -10,10 +10,11 @@ *******************************************************************************/ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.util.*; import java.util.List; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider; import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan; import org.eclipse.equinox.internal.provisional.p2.engine.InstallableUnitOperand; 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 5882c6b8c..077867858 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 @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.util.ArrayList; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.MultiStatus; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/PreselectedIUInstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/PreselectedIUInstallWizard.java index 11ed812d3..a899f84db 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/PreselectedIUInstallWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/PreselectedIUInstallWizard.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.util.ArrayList; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.MultiStatus; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UninstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UninstallWizard.java index f562f92a4..511fc0eb7 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UninstallWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UninstallWizard.java @@ -10,13 +10,14 @@ *******************************************************************************/ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; + import java.util.ArrayList; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.internal.p2.ui.dialogs.*; 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.director.ProfileChangeRequest; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUIImages; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateWizard.java index cf03925b6..e05703253 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateWizard.java @@ -12,16 +12,15 @@ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; import java.util.*; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.internal.p2.ui.dialogs.*; import org.eclipse.equinox.internal.p2.ui.model.AvailableUpdateElement; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest; 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; +import org.eclipse.equinox.internal.provisional.p2.ui.*; +import org.eclipse.equinox.internal.provisional.p2.ui.model.IUElementListRoot; +import org.eclipse.equinox.internal.provisional.p2.ui.model.Updates; import org.eclipse.equinox.internal.provisional.p2.ui.operations.PlannerResolutionOperation; import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.jface.wizard.IWizardPage; @@ -56,6 +55,69 @@ public class UpdateWizard extends WizardWithLicenses { return (IInstallableUnit[]) replacements.toArray(new IInstallableUnit[replacements.size()]); } + /** + * Create a profile change request that represents an update of the specified IUs to their latest versions. + * If an element root and selection container are provided, update those elements so that a wizard could + * be opened on them to reflect the profile change request. + * + * @param iusToUpdate + * @param profileId + * @param root + * @param initialSelections + * @param monitor + * @return the profile change request describing an update, or null if there is nothing to update. + */ + public static ProfileChangeRequest createProfileChangeRequest(IInstallableUnit[] iusToUpdate, String profileId, IUElementListRoot root, Collection initialSelections, IProgressMonitor monitor) { + // Here we create a profile change request by finding the latest version available for any replacement. + ArrayList toBeUpdated = new ArrayList(); + HashMap latestReplacements = new HashMap(); + ArrayList allReplacements = new ArrayList(); + SubMonitor sub = SubMonitor.convert(monitor, ProvUIMessages.ProfileChangeRequestBuildingRequest, 100 * iusToUpdate.length); + for (int i = 0; i < iusToUpdate.length; i++) { + ElementQueryDescriptor descriptor = Policy.getDefault().getQueryProvider().getQueryDescriptor(new Updates(profileId, new IInstallableUnit[] {iusToUpdate[i]})); + Iterator iter = descriptor.performQuery(sub).iterator(); + if (iter.hasNext()) + toBeUpdated.add(iusToUpdate[i]); + ArrayList currentReplacements = new ArrayList(); + while (iter.hasNext()) { + IInstallableUnit iu = (IInstallableUnit) ProvUI.getAdapter(iter.next(), IInstallableUnit.class); + if (iu != null) { + AvailableUpdateElement element = new AvailableUpdateElement(root, iu, iusToUpdate[i], profileId, true); + currentReplacements.add(element); + allReplacements.add(element); + } + } + for (int j = 0; j < currentReplacements.size(); j++) { + AvailableUpdateElement replacementElement = (AvailableUpdateElement) currentReplacements.get(j); + AvailableUpdateElement latestElement = (AvailableUpdateElement) latestReplacements.get(replacementElement.getIU().getId()); + IInstallableUnit latestIU = latestElement == null ? null : latestElement.getIU(); + if (latestIU == null || replacementElement.getIU().getVersion().compareTo(latestIU.getVersion()) > 0) + latestReplacements.put(replacementElement.getIU().getId(), replacementElement); + } + sub.worked(100); + } + if (root != null) + root.setChildren(allReplacements.toArray()); + + if (initialSelections != null) + initialSelections.addAll(latestReplacements.values()); + + if (toBeUpdated.size() <= 0) { + sub.done(); + return null; + } + + ProfileChangeRequest request = ProfileChangeRequest.createByProfileId(profileId); + Iterator iter = toBeUpdated.iterator(); + while (iter.hasNext()) + request.removeInstallableUnits(new IInstallableUnit[] {(IInstallableUnit) iter.next()}); + iter = latestReplacements.values().iterator(); + while (iter.hasNext()) + request.addInstallableUnits(new IInstallableUnit[] {((AvailableUpdateElement) iter.next()).getIU()}); + sub.done(); + return request; + } + public UpdateWizard(Policy policy, String profileId, IUElementListRoot root, Object[] initialSelections, PlannerResolutionOperation initialResolution, QueryableMetadataRepositoryManager manager) { super(policy, profileId, root, initialSelections, initialResolution); setWindowTitle(ProvUIMessages.UpdateAction_UpdatesAvailableTitle); @@ -119,8 +181,9 @@ public class UpdateWizard extends WizardWithLicenses { } public IWizardPage getStartingPage() { - if (skipSelectionsPage) - return selectNextPage(mainPage, getCurrentStatus()); + if (skipSelectionsPage) { + return getNextPage(mainPage); + } return mainPage; } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/IUElementListRoot.java index 3e130ca6e..5f1c71910 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/IUElementListRoot.java @@ -8,7 +8,9 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.equinox.internal.p2.ui.model; +package org.eclipse.equinox.internal.provisional.p2.ui.model; + +import org.eclipse.equinox.internal.p2.ui.model.ProvElement; /** 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 2bf99b0fa..0eadc6190 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 @@ -16,7 +16,6 @@ import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; 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.ProvisioningContext; -import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.ui.IStatusCodes; import org.eclipse.equinox.internal.provisional.p2.ui.ResolutionResult; @@ -33,15 +32,13 @@ public class PlannerResolutionOperation extends ProvisioningOperation { ProvisioningPlan plan; MultiStatus additionalStatus; ResolutionResult report; - IInstallableUnit[] iusInvolved; ProvisioningContext provisioningContext; - public PlannerResolutionOperation(String label, IInstallableUnit[] iusInvolved, String profileId, ProfileChangeRequest request, ProvisioningContext provisioningContext, MultiStatus additionalStatus, boolean isUser) { + public PlannerResolutionOperation(String label, 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 |