From 9942b85792ec87ee14e615e6df00a08a0ed71d10 Mon Sep 17 00:00:00 2001 From: Susan Franklin Date: Sat, 25 Apr 2009 03:37:32 +0000 Subject: Bug 272336 - [ui] NPE in Profile Registry --- .../p2/ui/sdk/PreloadingRepositoryHandler.java | 2 ++ .../equinox/internal/p2/ui/sdk/SDKPolicy.java | 7 +++++-- .../equinox/internal/p2/ui/sdk/messages.properties | 2 +- .../equinox/internal/p2/ui/ProvUIMessages.java | 2 ++ .../equinox/internal/p2/ui/messages.properties | 2 ++ .../p2/ui/dialogs/InstalledSoftwarePage.java | 20 ++++++++++++++++++-- .../provisional/p2/ui/dialogs/RevertProfilePage.java | 12 ++++++++++++ .../internal/provisional/p2/ui/policy/Policy.java | 10 ++++++++++ 8 files changed, 52 insertions(+), 5 deletions(-) (limited to 'bundles') diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/PreloadingRepositoryHandler.java b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/PreloadingRepositoryHandler.java index 32c595be2..59ce01635 100644 --- a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/PreloadingRepositoryHandler.java +++ b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/PreloadingRepositoryHandler.java @@ -22,6 +22,7 @@ import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.statushandlers.StatusManager; /** * PreloadingRepositoryHandler provides background loading of @@ -54,6 +55,7 @@ abstract class PreloadingRepositoryHandler extends AbstractHandler { } catch (ProvisionException e) { MessageDialog.openInformation(null, ProvSDKMessages.Handler_SDKUpdateUIMessageTitle, ProvSDKMessages.Handler_CannotLaunchUI); + ProvUI.handleException(e, null, StatusManager.LOG); } return null; } diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/SDKPolicy.java b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/SDKPolicy.java index be43d8bd4..9a1a02d44 100644 --- a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/SDKPolicy.java +++ b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/SDKPolicy.java @@ -14,7 +14,6 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.p2.ui.sdk.prefs.PreferenceConstants; 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.IProfileRegistry; import org.eclipse.equinox.internal.provisional.p2.ui.IStatusCodes; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; import org.eclipse.equinox.internal.provisional.p2.ui.policy.*; @@ -39,7 +38,7 @@ public class SDKPolicy extends Policy { return ProvSDKUIActivator.getSelfProfileId(); } catch (ProvisionException e) { ProvUI.handleException(e, e.getStatus().getMessage(), StatusManager.LOG); - return IProfileRegistry.SELF; + return null; } } }); @@ -88,4 +87,8 @@ public class SDKPolicy extends Policy { setQueryContext(queryContext); ProvSDKUIActivator.getDefault().updateWithPreferences(queryContext); } + + public IStatus getNoProfileChosenStatus() { + return ProvSDKUIActivator.getNoSelfProfileStatus(); + } } diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties index b40a58c6e..eeccf56bb 100644 --- a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties +++ b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties @@ -11,7 +11,7 @@ Error_Saving_Preferences=Error saving update preferences -Handler_CannotLaunchUI=Cannot launch the Update UI. This installation has not been configured properly for Software Updates. +Handler_CannotLaunchUI=Cannot complete the request. This installation has not been configured properly for Software Updates. Handler_SDKUpdateUIMessageTitle=Software Updates InstallNewSoftwareHandler_LoadRepositoryJobLabel=Contacting Software Sites PreferenceInitializer_Error=Error accessing preferences. 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 78108b38b..59ac81154 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 @@ -42,6 +42,7 @@ public class ProvUIMessages extends NLS { public static String ColocatedRepositoryManipulator_GotoPrefs; public static String ColocatedRepositoryManipulator_ManageSites; public static String ColocatedRepositoryManipulator_RemoveSiteOperationLabel; + public static String RevertProfilePage_NoProfile; public static String RevertProfilePage_RevertLabel; public static String RevertProfilePage_RevertTooltip; public static String IUCopyrightPropertyPage_NoCopyright; @@ -90,6 +91,7 @@ public class ProvUIMessages extends NLS { public static String ProvisioningOperation_RedoErrorTitle; public static String ProvisioningOperation_UndoErrorTitle; public static String ProvisioningOperationRunner_ErrorExecutingOperation; + public static String InstalledSoftwarePage_NoProfile; public static String InstallIUOperationLabel; public static String InstallIUCommandLabel; public static String InstallIUCommandTooltip; 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 198fd41ff..510c0493b 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 @@ -32,6 +32,7 @@ ProvisioningOperation_ExecuteErrorTitle=Error while executing the "{0}" operatio ProvisioningOperation_RedoErrorTitle=Error while redoing the "{0}" operation ProvisioningOperation_UndoErrorTitle=Error while undoing the "{0}" operation ProvisioningOperationRunner_ErrorExecutingOperation=Unexpected error while trying to run {0} +InstalledSoftwarePage_NoProfile=This installation has not been configured for showing the installed software. See the error log for details. InstallIUOperationLabel=Install InstallIUCommandLabel=&Install... InstallIUCommandTooltip=Install the selected items @@ -159,6 +160,7 @@ ColocatedRepositoryManipulator_AddSiteOperationLabel=Add Site ColocatedRepositoryManipulator_GotoPrefs=Go to the Available Software Sites preferences ColocatedRepositoryManipulator_ManageSites=&Manage Sites... ColocatedRepositoryManipulator_RemoveSiteOperationLabel=Remove Site +RevertProfilePage_NoProfile=This installation has not been configured properly for accessing the installation history. See the error log for details. RevertProfilePage_RevertLabel=Re&vert RevertProfilePage_RevertTooltip=Revert to the selected install configuration. InstallWizardPage_NoCheckboxDescription=Review the items to be installed. diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstalledSoftwarePage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstalledSoftwarePage.java index 9bbc42174..c458c12d5 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstalledSoftwarePage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/InstalledSoftwarePage.java @@ -11,6 +11,7 @@ package org.eclipse.equinox.internal.provisional.p2.ui.dialogs; +import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.internal.p2.ui.dialogs.*; import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider; @@ -33,6 +34,7 @@ import org.eclipse.swt.widgets.*; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.about.InstallationPage; import org.eclipse.ui.menus.AbstractContributionFactory; +import org.eclipse.ui.statushandlers.StatusManager; /** * @since 3.4 @@ -50,6 +52,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable AbstractContributionFactory factory; Text detailsArea; InstalledIUGroup installedIUGroup; + String profileId; Button updateButton, uninstallButton, propertiesButton; /* (non-Javadoc) @@ -59,6 +62,18 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable initializeDialogUnits(parent); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IProvHelpContextIds.INSTALLED_SOFTWARE); + profileId = Policy.getDefault().getProfileChooser().getProfileId(ProvUI.getDefaultParentShell()); + if (profileId == null) { + IStatus status = Policy.getDefault().getNoProfileChosenStatus(); + if (status != null) + ProvUI.reportStatus(status, StatusManager.LOG); + Text text = new Text(parent, SWT.WRAP | SWT.READ_ONLY); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + text.setText(ProvUIMessages.InstalledSoftwarePage_NoProfile); + setControl(text); + return; + } + Composite composite = new Composite(parent, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.widthHint = convertHorizontalDLUsToPixels(DEFAULT_WIDTH); @@ -69,7 +84,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable composite.setLayout(layout); // Table of installed IU's - installedIUGroup = new InstalledIUGroup(Policy.getDefault(), composite, JFaceResources.getDialogFont(), Policy.getDefault().getProfileChooser().getProfileId(ProvUI.getDefaultParentShell()), getColumnConfig()); + installedIUGroup = new InstalledIUGroup(Policy.getDefault(), composite, JFaceResources.getDialogFont(), profileId, getColumnConfig()); // we hook selection listeners on the viewer in createPageButtons because we // rely on the actions we create there getting selection events before we use // them to update button enablement. @@ -88,7 +103,8 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable } public void createPageButtons(Composite parent) { - final String profileId = Policy.getDefault().getProfileChooser().getProfileId(getShell()); + if (profileId == null) + return; // For the update action, we create a custom selection provider that will interpret no // selection as checking for updates to everything. // We also override the run method to close the containing dialog 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 995a1cef0..4852b1a2b 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 @@ -60,12 +60,24 @@ public class RevertProfilePage extends InstallationPage implements ICopyable { InstalledIUGroup installedIUGroup; public void createPageButtons(Composite parent) { + if (profileId == null) + return; revertButton = createButton(parent, REVERT_ID, revertAction.getText()); revertButton.setEnabled(revertAction.isEnabled()); } public void createControl(Composite parent) { profileId = Policy.getDefault().getProfileChooser().getProfileId(ProvUI.getDefaultParentShell()); + if (profileId == null) { + IStatus status = Policy.getDefault().getNoProfileChosenStatus(); + if (status != null) + ProvUI.reportStatus(status, StatusManager.LOG); + Text text = new Text(parent, SWT.WRAP | SWT.READ_ONLY); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + text.setText(ProvUIMessages.RevertProfilePage_NoProfile); + setControl(text); + return; + } initializeDialogUnits(parent); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IProvHelpContextIds.REVERT_CONFIGURATION_WIZARD); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policy.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policy.java index 9907a921c..d39442c42 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policy.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policy.java @@ -276,4 +276,14 @@ public class Policy { private IUViewQueryContext getDefaultQueryContext() { return new IUViewQueryContext(IUViewQueryContext.AVAILABLE_VIEW_BY_REPO); } + + /** + * Return a status that can be used to describe the failure to + * retrieve a profile. + * @return a status describing a failure to retrieve a profile, + * or null if there is no such status. + */ + public IStatus getNoProfileChosenStatus() { + return null; + } } -- cgit v1.2.3