diff options
author | Alena Laskavaia | 2016-06-08 17:25:55 +0000 |
---|---|---|
committer | Pascal Rapicault | 2016-09-27 18:23:57 +0000 |
commit | aeb345776d36877dd5026e9152d5217e17fdfea9 (patch) | |
tree | d6e80b58c5152e522fd8d5ba8d1df7614566c060 | |
parent | a7b241bbc77416c8f40d8767a78e0cb0ef3bc357 (diff) | |
download | rt.equinox.p2-aeb345776d36877dd5026e9152d5217e17fdfea9.tar.gz rt.equinox.p2-aeb345776d36877dd5026e9152d5217e17fdfea9.tar.xz rt.equinox.p2-aeb345776d36877dd5026e9152d5217e17fdfea9.zip |
Bug 495726 - API: InstallWizardPage ui elements do not respect policy
P2 UI Wizard pages do not respect provisioning ui which is passed to
them when
it comes to querying elements, because IUElementListRoot which is the
root of all elements does not
extend QueriedElement so getProvisioningUI() on the elments defaults
to ProvisioningUI.getDefaultUI()
Fix is to add an API to accept ProvisioningUI as an argument. All places
that were creating IUElementListRoot now pass appropriate ui to the
constructor. For backward compatibility if ui is not set or set to null
it will return default UI as before.
Change-Id: I1d8d87339812c874eeee7127e762731b600cb4bf
Signed-off-by: Alena Laskavaia <elaskavaia.cdt@gmail.com>
9 files changed, 37 insertions, 17 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/migration/MigrationPage.java b/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/migration/MigrationPage.java index 0c6f8763f..9d446d270 100644 --- a/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/migration/MigrationPage.java +++ b/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/migration/MigrationPage.java @@ -689,7 +689,7 @@ public class MigrationPage extends WizardPage implements ISelectableIUsPage, Lis protected Object getInput() { - IUElementListRoot root = new IUElementListRoot(); + IUElementListRoot root = new IUElementListRoot(ui); List<AvailableIUElement> elements = new ArrayList<AvailableIUElement>(unitsToMigrate.size()); for (IInstallableUnit unit : unitsToMigrate) { elements.add(new AvailableIUElement(root, unit, toImportFrom.getProfileId(), false)); @@ -756,10 +756,8 @@ public class MigrationPage extends WizardPage implements ISelectableIUsPage, Lis // Both checkedElements and checkedElementsUpdates and the logic inside the getCheckedIUElements method // are used to prevent unnecessary call to getUpdates method due to computational cost. - @SuppressWarnings("rawtypes") - private Set checkedElements; - @SuppressWarnings("rawtypes") - private Set checkedElementsUpdates; + @SuppressWarnings("rawtypes") private Set checkedElements; + @SuppressWarnings("rawtypes") private Set checkedElementsUpdates; private boolean getUpdatesCanceled; public Object[] getCheckedIUElements() { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizard.java index dce1d523b..b94b06a7e 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizard.java @@ -63,7 +63,7 @@ public class InstallWizard extends WizardWithLicenses { protected void initializeResolutionModelElements(Object[] selectedElements) { if (selectedElements == null) return; - root = new IUElementListRoot(); + root = new IUElementListRoot(ui); if (operation instanceof RemediationOperation) { AvailableIUElement[] elements = ElementUtils.requestToElement(((RemediationOperation) operation).getCurrentRemedy(), true); root.setChildren(elements); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java index 8c1dcb9e8..83f09d7f0 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java @@ -61,7 +61,7 @@ public class PreselectedIUInstallWizard extends WizardWithLicenses { } protected void initializeResolutionModelElements(Object[] selectedElements) { - root = new IUElementListRoot(); + root = new IUElementListRoot(ui); ArrayList<AvailableIUElement> list = new ArrayList<AvailableIUElement>(selectedElements.length); ArrayList<AvailableIUElement> selected = new ArrayList<AvailableIUElement>(selectedElements.length); for (int i = 0; i < selectedElements.length; i++) { 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 86777edbb..4920d4ff2 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 @@ -59,7 +59,7 @@ public abstract class ResolutionResultsWizardPage extends ResolutionStatusPage { super("ResolutionPage", ui, wizard); //$NON-NLS-1$ this.resolvedOperation = operation; if (input == null) - this.input = new IUElementListRoot(); + this.input = new IUElementListRoot(ui); else this.input = input; } 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 a2bddf191..93cec8be5 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 @@ -59,7 +59,7 @@ public class SelectableIUsPage extends ResolutionStatusPage implements IResoluti super("IUSelectionPage", ui, wizard); //$NON-NLS-1$ this.root = root; if (root == null) - root = new IUElementListRoot(); + root = new IUElementListRoot(ui); if (initialSelections == null) this.initialSelections = new IInstallableUnit[0]; else diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java index 9743c96f8..bfcb6334f 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java @@ -48,7 +48,7 @@ public class UninstallWizard extends ProvisioningOperationWizard { } protected void initializeResolutionModelElements(Object[] selectedElements) { - root = new IUElementListRoot(); + root = new IUElementListRoot(ui); ArrayList<InstalledIUElement> list = new ArrayList<InstalledIUElement>(selectedElements.length); ArrayList<InstalledIUElement> selections = new ArrayList<InstalledIUElement>(selectedElements.length); for (int i = 0; i < selectedElements.length; i++) { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java index 1f6c53449..fa252f22c 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java @@ -116,7 +116,7 @@ public class UpdateWizard extends WizardWithLicenses { protected void initializeResolutionModelElements(Object[] selectedElements) { if (selectedElements == null) return; - root = new IUElementListRoot(); + root = new IUElementListRoot(ui); if (operation instanceof RemediationOperation) { AvailableIUElement[] elements = ElementUtils.requestToElement(((RemediationOperation) operation).getCurrentRemedy(), false); root.setChildren(elements); @@ -176,7 +176,7 @@ public class UpdateWizard extends WizardWithLicenses { private IUElementListRoot getAllPossibleUpdatesRoot() { if (firstPageRoot == null) { - firstPageRoot = new IUElementListRoot(); + firstPageRoot = new IUElementListRoot(ui); if (operation != null && operation instanceof UpdateOperation) { Update[] updates; if (getPolicy().getShowLatestVersionsOnly()) { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java index 255bef63e..366bcc552 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java @@ -129,12 +129,13 @@ public class ElementUtils { if (remedy == null) return new AvailableIUElement[0]; ArrayList<AvailableIUElement> temp = new ArrayList<AvailableIUElement>(); - IUElementListRoot root = new IUElementListRoot(); + ProvisioningUI ui = ProvisioningUI.getDefaultUI(); + IUElementListRoot root = new IUElementListRoot(ui); for (Iterator<RemedyIUDetail> iterator = remedy.getIusDetails().iterator(); iterator.hasNext();) { RemedyIUDetail iuDetail = iterator.next(); if (iuDetail.getStatus() == RemedyIUDetail.STATUS_NOT_ADDED) continue; - AvailableIUElement element = new AvailableIUElement(root, iuDetail.getIu(), ProvisioningUI.getDefaultUI().getProfileId(), true); + AvailableIUElement element = new AvailableIUElement(root, iuDetail.getIu(), ui.getProfileId(), true); if (iuDetail.getBeingInstalledVersion() != null && iuDetail.getRequestedVersion() != null && iuDetail.getBeingInstalledVersion().compareTo(iuDetail.getRequestedVersion()) < 0 && !installMode) element.setImageOverlayId(ProvUIImages.IMG_INFO); else if (iuDetail.getStatus() == RemedyIUDetail.STATUS_REMOVED) 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/p2/ui/model/IUElementListRoot.java index efe0cc92b..99897e4ba 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/p2/ui/model/IUElementListRoot.java @@ -10,7 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.model; - +import org.eclipse.equinox.p2.ui.Policy; +import org.eclipse.equinox.p2.ui.ProvisioningUI; /** * Element class representing a fixed set of IU's. This element should @@ -18,9 +19,9 @@ package org.eclipse.equinox.internal.p2.ui.model; * * @since 3.5 */ -public class IUElementListRoot extends ProvElement { - +public class IUElementListRoot extends QueriedElement { Object[] children; + private ProvisioningUI ui; public IUElementListRoot(Object[] children) { super(null); @@ -31,6 +32,11 @@ public class IUElementListRoot extends ProvElement { this(new Object[0]); } + public IUElementListRoot(ProvisioningUI ui) { + this(new Object[0]); + this.ui = ui; + } + public void setChildren(Object[] children) { this.children = children; } @@ -54,4 +60,19 @@ public class IUElementListRoot extends ProvElement { public Object[] getChildren(Object o) { return children; } + + @Override + protected int getDefaultQueryType() { + throw new UnsupportedOperationException(); + } + + public Policy getPolicy() { + return getProvisioningUI().getPolicy(); + } + + public ProvisioningUI getProvisioningUI() { + if (ui != null) + return ui; + return super.getProvisioningUI(); + } } |