opends/src/quicksetup/org/opends/quicksetup/Application.java
@@ -526,6 +526,33 @@ abstract public boolean isFinished(); /** * Indicates whether or not this application is capable of cancelling * the operation performed in the run method. A cancellable operation * should leave its environment in the same state as it was prior to * running the operation (files deleted, changes backed out etc.). * * Marking an <code>Application</code> as cancellable may control UI * elements like the presense of a cancel button while the operation * is being performed. * * Applications marked as cancellable should override the * <code>cancel</code> method in such a way as to undo whatever * actions have taken place in the run method up to that point. * * @return boolean where true inidcates that the operation is cancellable */ abstract public boolean isCancellable(); /** * Signals that the application should cancel a currently running * operation as soon as possible and return the environment to the * state prior to running the operation. When finished backing * out changes the application should make sure that <code>isFinished</code> * returns true so that the application can complete. */ abstract public void cancel(); /** * This class is used to notify the ProgressUpdateListeners of events * that are written to the standard error. It is used in WebStartInstaller * and in OfflineInstaller. These classes just create a ErrorPrintStream and opends/src/quicksetup/org/opends/quicksetup/ButtonName.java
@@ -58,10 +58,6 @@ */ FINISH, /** * The Cancel button. */ CANCEL, /** * The Launch Status Panel button. */ LAUNCH_STATUS_PANEL opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -152,6 +152,13 @@ /** * {@inheritDoc} */ public boolean isCancellable() { return false; // TODO: have installer delete installed files upon cancel } /** * {@inheritDoc} */ public UserData createUserData() { UserData ud = new UserData(); ud.setServerLocation(Utils.getDefaultServerLocation()); @@ -198,20 +205,6 @@ /** * {@inheritDoc} */ public boolean canClose(WizardStep step) { return step == PROGRESS; } /** * {@inheritDoc} */ public boolean canCancel(WizardStep step) { return false; } /** * {@inheritDoc} */ public boolean isSubStep(WizardStep step) { return SUBSTEPS.contains(step); @@ -321,8 +314,8 @@ /** * {@inheritDoc} */ public void cancelClicked(WizardStep cStep, QuickSetup qs) { // do nothing; public void cancel() { // do nothing; not cancellable } /** @@ -489,16 +482,11 @@ if (step == REVIEW) { dlg.setFocusOnButton(ButtonName.FINISH); dlg.setDefaultButton(ButtonName.FINISH); } else if (step == PROGRESS) { dlg.setDefaultButton(ButtonName.CLOSE); } else if (step == WELCOME) { dlg.setDefaultButton(ButtonName.NEXT); dlg.setFocusOnButton(ButtonName.NEXT); } else if (step == REVIEW) { dlg.setDefaultButton(ButtonName.NEXT); } else if (step == PROGRESS) { dlg.setFocusOnButton(ButtonName.CLOSE); dlg.setButtonEnabled(ButtonName.CLOSE, false); } else { dlg.setDefaultButton(ButtonName.NEXT); } opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
@@ -215,6 +215,7 @@ quit-button-install-tooltip=Quit Setup quit-button-upgrade-tooltip=Quit Upgrade cancel-button-label=Cancel cancel-button-tooltip=Cancel the currently running operation cancel-button-uninstall-tooltip=Cancel Uninstall shutdown-button-label=Shutdown continue-button-label=Continue @@ -227,14 +228,14 @@ confirm-close-install-title=Confirmation Required confirm-close-install-msg=OpenDS QuickSetup has not yet completed.\nAre you \ sure you want to close the QuickSetup Window? confirm-quit-install-title=Confirmation Required confirm-quit-install-msg=Are you sure you want to quit OpenDS \ confirm-cancel-install-title=Confirmation Required confirm-cancel-install-msg=Are you sure you want to cancel OpenDS \ QuickSetup?\nIf you click 'Yes' nothing will be installed on your system. confirm-close-uninstall-title=Confirmation Required confirm-close-uninstall-msg=OpenDS Uninstall has not yet completed.\nAre you \ sure you want to close the Uninstall Window? confirm-close-upgrade-title=Confirmation Required confirm-close-upgrade-msg=OpenDS QuickUpgrade has not yet completed.\nIf you \ confirm-cancel-upgrade-title=Confirmation Required confirm-cancel-upgrade-msg=OpenDS QuickUpgrade has not yet completed.\nIf you \ click 'Yes' any changes that have been\nmade to the server being upgraded \ will\nbe backed out.\n\nAre you sure you want to close the QuickUpgrade Window?\n confirm-quit-upgrade-title=Confirmation Required @@ -250,6 +251,8 @@ the server for you and continue with the uninstall? If you click\n\ No, you will need to stop the server manually to continue. confirm-uninstall-server-running-title=Server is Running confirm-cancel-title=Confirmation Required confirm-cancel-prompt=Cancel the running operation? # @@ -820,7 +823,7 @@ summary-upgrade-abort=Canceling Upgrade... summary-upgrade-finished-successfully=<b>OpenDS QuickUpgrade Completed \ Successfully.</b><br>The OpenDS installation at {0} has now been upgraded \ to version {1}. to version {1}.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT> summary-upgrade-finished-successfully-cli=OpenDS QuickUpgrade Completed \ Successfully. The OpenDS installation at {0} has now been upgraded \ to version {1}. @@ -828,7 +831,7 @@ The upgrade operation could not complete successfully due to errors and \ the installation has been restored to the state it was in before the upgrade \ operation. See the 'Details' text for more information on why the upgrade \ operation failed. operation failed.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT> summary-upgrade-finished-with-errors-cli=OpenDS QuickUpgrade Failed. \ The upgrade operation could not complete successfully due to errors and \ the installation has been restored to the state it was in before the upgrade \ @@ -836,12 +839,18 @@ summary-upgrade-finished-with-warnings=<b>OpenDS QuickUpgrade Succeeded With \ Warnings</b><br>The upgrade operation completed successfully but the upgrader \ had problems that require attention. See the 'Details' text for more \ information on the problems. information on the problems.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT> summary-upgrade-finished-with-warnings-cli=OpenDS QuickUpgrade Succeeded With \ Warnings. The upgrade operation completed successfully but the upgrader \ had problems that require attention. See the logs for details on the \ problems. summary-upgrade-finished-canceled=<b>OpenDS QuickUpgrade Canceled.</b> \ <br>The upgrade operation was canceled and the installation has been \ restored to the state it was in before the upgrade operation.\ <br><br><INPUT type="submit" value="Launch Status Panel"></INPUT> summary-upgrade-finished-canceled-cli=<b>OpenDS QuickUpgrade Canceled. \ The upgrade operation was canceled and the installation has been \ restored to the state it was in before the upgrade operation. # # Progress messages # opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
@@ -64,8 +64,6 @@ private JButton finishButton; private JButton cancelButton; /** * Default constructor. * @param application Application running in QuickSetup @@ -103,7 +101,7 @@ * * @param step the step in the wizard. */ public void setDisplayedStep(WizardStep step) public void updateButtons(WizardStep step) { GuiApplication application = getApplication(); previousButton.setVisible(application.canGoBack(step)); @@ -114,9 +112,15 @@ finishButton.setVisible(false); nextButton.setVisible(application.canGoForward(step)); } quitButton.setVisible(application.canQuit(step)); closeButton.setVisible(application.canClose(step)); cancelButton.setVisible(application.canCancel(step)); // The quit button appears on all the panels leading up // to the progress panel quitButton.setVisible(!step.isProgressStep()); // The close button is only used on the progress panel and // is only enabled once progress has finished or cancelled. closeButton.setVisible(step.isProgressStep()); closeButton.setEnabled(application.getCurrentProgressStep().isLast()); } /** @@ -149,10 +153,6 @@ b = finishButton; break; case CANCEL: b = cancelButton; break; default: throw new IllegalArgumentException("Unknown button name: " + buttonName); @@ -191,9 +191,6 @@ tooltip = application.getFinishButtonToolTipKey(); finishButton = createButton(label, tooltip, ButtonName.FINISH); cancelButton = createButton("cancel-button-label", "cancel-button-uninstall-tooltip", ButtonName.CANCEL); } /** @@ -263,21 +260,19 @@ gbc.weightx = 0.0; gbc.fill = GridBagConstraints.NONE; gbc.insets.left = 0; JPanel quitCloseCancelPanel = new JPanel(new GridBagLayout()); JPanel quitClosePanel = new JPanel(new GridBagLayout()); // Set as opaque to inherit the background color of ButtonsPanel quitCloseCancelPanel.setOpaque(false); quitCloseCancelPanel.add( quitClosePanel.setOpaque(false); quitClosePanel.add( Box.createHorizontalStrut(UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS), gbcAux); quitCloseCancelPanel.add(quitButton, gbcAux); quitCloseCancelPanel.add(closeButton, gbcAux); quitCloseCancelPanel.add(cancelButton, gbcAux); quitClosePanel.add(quitButton, gbcAux); quitClosePanel.add(closeButton, gbcAux); width = (int) Math.max(quitButton.getPreferredSize().getWidth(), closeButton .getPreferredSize().getWidth()); width = (int) Math.max(width, cancelButton.getPreferredSize().getWidth()); quitCloseCancelPanel.add(Box.createHorizontalStrut(width), gbcAux); add(quitCloseCancelPanel, gbc); quitClosePanel.add(Box.createHorizontalStrut(width), gbcAux); add(quitClosePanel, gbc); } /** opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
@@ -62,10 +62,12 @@ /** * The constructor of this class. * @param app Application used to create panels for populating the layout * @param qs QuickSetup acting as controller */ public CurrentStepPanel(GuiApplication app) public CurrentStepPanel(GuiApplication app, QuickSetup qs) { super(app); setQuickSetup(qs); createLayout(app); } @@ -125,6 +127,7 @@ for (WizardStep step : steps) { QuickSetupStepPanel panel = app.createWizardStepPanel(step); if (panel != null) { panel.setQuickSetup(getQuickSetup()); panel.initialize(); hmPanels.put(step, panel); } opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
@@ -140,6 +140,19 @@ } /** * Called before the application cancels its operation, giving the * user a chance to confirm the cancellation action. * @param qs QuickSetup that can be used for confirming * @return boolean where true indicates that the user answered * affirmatively to the cancelation confirmation */ public boolean confirmCancel(QuickSetup qs) { return qs.displayConfirmation( getMsg("confirm-cancel-prompt"), getMsg("confirm-cancel-title")); } /** * Get the name of the button that will receive initial focus. * @return ButtonName of the button to receive initial focus */ @@ -184,6 +197,14 @@ abstract public WizardStep getPreviousWizardStep(WizardStep step); /** * Gets the currently displayed wizard step. * @return WizardStep being displayed. */ public WizardStep getCurrentWizardStep() { return displayedStep; } /** * Indicates whether or not the provided <code>step</code> is a sub step or * not. * @param step WizardStep for which the return value indicates whether @@ -276,28 +297,6 @@ } /** * Inidicates whether or not the user is allowed to close the wizard from * <code>step</code>. * @param step WizardStep for which the the return value indicates whether * or not the user can close the wizard * @return boolean where true indicates the user can close the wizard */ public boolean canClose(WizardStep step) { return false; } /** * Inidicates whether or not the user is allowed to cancel the wizard from * <code>step</code>. * @param step WizardStep for which the the return value indicates whether * or not the user can cancel the wizard * @return boolean where true indicates the user can cancel the wizard */ public boolean canCancel(WizardStep step) { return false; } /** * Called when the user has clicked the 'previous' button. * @param cStep WizardStep at which the user clicked the previous button * @param qs QuickSetup controller @@ -333,15 +332,6 @@ } /** * Called when the user has clicked the 'cancel' button. * @param cStep WizardStep at which the user clicked the cancel button * @param qs QuickSetup controller */ public void cancelClicked(WizardStep cStep, QuickSetup qs) { qs.quit(); } /** * Called when the user has clicked the 'quit' button. * @param step WizardStep at which the user clicked the quit button * @param qs QuickSetup controller opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
@@ -33,12 +33,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; @@ -59,6 +54,8 @@ private JProgressBar progressBar; private JButton btnCancel; private JEditorPane detailsTextArea; private String lastText; @@ -178,6 +175,7 @@ if (status.isLast()) { progressBar.setVisible(false); btnCancel.setVisible(false); if (!status.isError()) { summaryText = "<form>"+summaryText+"</form>"; } @@ -206,6 +204,20 @@ gbc.insets = UIFactory.getEmptyInsets(); gbc.fill = GridBagConstraints.HORIZONTAL; btnCancel = UIFactory.makeJButton( getMsg("cancel-button-label"), getMsg("cancel-button-tooltip")); btnCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GuiApplication app = getApplication(); QuickSetup qs = getQuickSetup(); if (app.confirmCancel(qs)) { app.cancel(); btnCancel.setEnabled(false); } } }); progressBar = new JProgressBar(); progressBar.setIndeterminate(true); // The ProgressDescriptor provides the ratio in % @@ -221,10 +233,48 @@ gbc.gridwidth = GridBagConstraints.RELATIVE; gbc.weightx = 0.0; panel.add(progressBar, gbc); if (getApplication().isCancellable()) { gbc.insets.left = 15; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.LINE_START; gbc.gridwidth = 1; panel.add(btnCancel, gbc); } gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 1.0; panel.add(Box.createHorizontalGlue(), gbc); return panel; } // public static void main(String[] args) { // final UserData ud = new UpgradeUserData(); // ud.setServerLocation("XXX/XXXXX/XX/XXXXXXXXXXXX/XXXX"); // Upgrader app = new Upgrader(); // app.setUserData(ud); // final ProgressPanel p = new ProgressPanel(app); // p.initialize(); // JFrame frame = new JFrame(); // frame.getContentPane().add(p); // frame.addComponentListener(new ComponentAdapter() { // public void componentHidden(ComponentEvent componentEvent) { // System.exit(0); // } // }); // frame.pack(); // frame.setVisible(true); // new Thread(new Runnable() { // public void run() { // p.beginDisplay(ud); // } // }).start(); // // } } opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
@@ -172,10 +172,6 @@ previousClicked(); break; case CANCEL: cancelClicked(); break; case LAUNCH_STATUS_PANEL: launchStatusPanelClicked(); break; @@ -362,16 +358,6 @@ application.closeClicked(cStep, this); } /** * Method called when user clicks 'Cancel' button of the wizard. * */ private void cancelClicked() { WizardStep cStep = getCurrentStep(); application.cancelClicked(cStep, this); } private void launchStatusPanelClicked() { BackgroundTask worker = new BackgroundTask() @@ -460,6 +446,8 @@ public void run() { runDisplayUpdater(); WizardStep ws = application.getCurrentWizardStep(); getDialog().getButtonsPanel().updateButtons(ws); } }); t.start(); @@ -531,7 +519,7 @@ if (dialog == null) { dialog = new QuickSetupDialog(application, installStatus); installStatus, this); dialog.addButtonActionListener(this); } return dialog; opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
@@ -85,22 +85,26 @@ private GuiApplication application; private QuickSetup quickSetup; private boolean forceToDisplay; /** * Constructor of QuickSetupDialog. * @param app Application to run in as a wizard * @param installStatus of the current environment * @param qs QuickSetup acting as controller */ public QuickSetupDialog(GuiApplication app, CurrentInstallStatus installStatus) CurrentInstallStatus installStatus, QuickSetup qs) { if (app == null) { throw new IllegalArgumentException("application cannot be null"); } this.application = app; this.installStatus = installStatus; this.quickSetup = qs; frame = new JFrame(application.getFrameTitle()); frame.getContentPane().add(getFramePanel()); frame.addWindowListener(new WindowAdapter() { @@ -176,7 +180,7 @@ { displayedStep = step; // First call the panels to do the required updates on their layout getButtonsPanel().setDisplayedStep(step); getButtonsPanel().updateButtons(step); getStepsPanel().setDisplayedStep(step, userData); getCurrentStepPanel().setDisplayedStep(step, userData); } @@ -393,6 +397,7 @@ if (stepsPanel == null) { stepsPanel = new StepsPanel(application); stepsPanel.setQuickSetup(quickSetup); } return stepsPanel; } @@ -405,7 +410,7 @@ { if (currentStepPanel == null) { currentStepPanel = new CurrentStepPanel(application); currentStepPanel = new CurrentStepPanel(application, quickSetup); } return currentStepPanel; } @@ -420,6 +425,7 @@ if (buttonsPanel == null) { buttonsPanel = new ButtonsPanel(application); buttonsPanel.setQuickSetup(quickSetup); } return buttonsPanel; } @@ -519,6 +525,7 @@ installedPanel = new QuickSetupErrorPanel( application, installStatus); installedPanel.setQuickSetup(quickSetup); } return installedPanel; } opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
@@ -46,6 +46,8 @@ private GuiApplication application; private QuickSetup quickSetup; /** * The basic constructor to be called by the subclasses. * @param application Application this panel represents @@ -58,6 +60,22 @@ } /** * Sets the instance of <code>QuickSetup</code> acting as controller. * @param qs QuickSetup instance */ void setQuickSetup(QuickSetup qs) { this.quickSetup = qs; } /** * Gets the instance of <code>QuickSetup</code> acting as controller. * @return QuickSetup instance */ protected QuickSetup getQuickSetup() { return this.quickSetup; } /** * Returns the frame or window containing this panel. * @return the frame or window containing this panel. */ opends/src/quicksetup/org/opends/quicksetup/uninstaller/Uninstaller.java
@@ -131,20 +131,6 @@ * {@inheritDoc} */ public boolean canQuit(WizardStep step) { return false; } /** * {@inheritDoc} */ public boolean canClose(WizardStep step) { return step == Step.PROGRESS; } /** * {@inheritDoc} */ public boolean canCancel(WizardStep step) { return step == Step.CONFIRM_UNINSTALL; } @@ -178,18 +164,6 @@ } /** * {@inheritDoc} */ public void cancelClicked(WizardStep cStep, QuickSetup qs) { if (cStep == Step.CONFIRM_UNINSTALL) { qs.quit(); } else { throw new IllegalStateException( "Cancel only can be clicked on CONFIRM_UNINSTALL step"); } } /** * Update the UserData object according to the content of the review * panel. */ @@ -633,6 +607,20 @@ /** * {@inheritDoc} */ public boolean isCancellable() { return false; } /** * {@inheritDoc} */ public void cancel() { // do nothing; not cancellable } /** * {@inheritDoc} */ public void windowClosing(QuickSetupDialog dlg, WindowEvent evt) { if (dlg.getDisplayedStep() == Step.PROGRESS) { // Simulate a close button event opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
@@ -205,4 +205,18 @@ public boolean isFinished() { return finished; } /** * {@inheritDoc} */ public boolean isCancellable() { return false; } /** * {@inheritDoc} */ public void cancel() { // do nothing; not cancellable } } opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -169,6 +169,8 @@ FINISHED_WITH_WARNINGS("summary-upgrade-finished-with-warnings", 100), FINISHED_CANCELED("summary-upgrade-finished-canceled", 100), FINISHED("summary-upgrade-finished-successfully", 100); private String summaryMsgKey; @@ -202,7 +204,8 @@ public boolean isLast() { return this == FINISHED || this == FINISHED_WITH_ERRORS || this == FINISHED_WITH_WARNINGS; this == FINISHED_WITH_WARNINGS || this == FINISHED_CANCELED; } /** @@ -442,6 +445,8 @@ String txt = null; if (step == UpgradeProgressStep.FINISHED) { txt = getFinalSuccessMessage(); } else if (step == UpgradeProgressStep.FINISHED_CANCELED) { txt = getFinalCanceledMessage(); } else if (step == UpgradeProgressStep.FINISHED_WITH_ERRORS) { txt = getFinalErrorMessage(); } else if (step == UpgradeProgressStep.FINISHED_WITH_WARNINGS) { @@ -527,13 +532,6 @@ /** * {@inheritDoc} */ public boolean canClose(WizardStep step) { return step == UpgradeWizardStep.PROGRESS; } /** * {@inheritDoc} */ public String getFinishButtonToolTipKey() { return "finish-button-upgrade-tooltip"; } @@ -548,33 +546,23 @@ /** * {@inheritDoc} */ public void closeClicked(WizardStep cStep, final QuickSetup qs) { if (cStep == UpgradeWizardStep.PROGRESS) { if (isFinished()) { qs.quit(); } else if (qs.displayConfirmation(getMsg("confirm-close-upgrade-msg"), getMsg("confirm-close-upgrade-title"))) { abort = true; JButton btnClose = qs.getDialog().getButtonsPanel(). getButton(ButtonName.CLOSE); btnClose.setEnabled(false); new Thread(new Runnable() { public void run() { while (!isFinished()) { try { Thread.sleep(100); } catch (InterruptedException e) { // do nothing } } qs.quit(); } }).start(); } } else { throw new IllegalStateException( "Close only can be clicked on PROGRESS step"); } public void cancel() { // The run() method checks that status of this variable // occasionally and aborts the operation if it discovers // a 'true' value. abort = true; } /** * {@inheritDoc} */ public boolean confirmCancel(QuickSetup qs) { return qs.displayConfirmation( getMsg("confirm-cancel-upgrade-msg"), getMsg("confirm-cancel-upgrade-title")); } /** @@ -592,6 +580,13 @@ /** * {@inheritDoc} */ public boolean isCancellable() { return true; } /** * {@inheritDoc} */ public void quitClicked(WizardStep cStep, final QuickSetup qs) { if (cStep == UpgradeWizardStep.PROGRESS) { throw new IllegalStateException( @@ -1076,7 +1071,16 @@ // skipped because the process has already exited by the time // processing messages has finished. Need to resolve these // issues. if (runError != null) { if (abort) { LOG.log(Level.INFO, "upgrade canceled by user"); if (!Utils.isCli()) { notifyListenersOfLog(); this.currentProgressStep = UpgradeProgressStep.FINISHED_CANCELED; notifyListeners(null); } else { setCurrentProgressStep(UpgradeProgressStep.FINISHED_CANCELED); } } else if (runError != null) { LOG.log(Level.INFO, "upgrade completed with errors", runError); if (!Utils.isCli()) { notifyListenersOfLog(); @@ -1120,38 +1124,7 @@ private void checkAbort() throws ApplicationException { if (abort) throw new ApplicationException( ApplicationException.Type.APPLICATION, "upgrade canceled by user", null); } /** * Stops and starts the server checking for serious errors. Also * has the side effect of having the server write schema.current * if it has never done so. */ private void checkServerHealth() throws ApplicationException { Installation installation = getInstallation(); ServerHealthChecker healthChecker = new ServerHealthChecker(installation); try { healthChecker.checkServer(); List<String> problems = healthChecker.getProblemMessages(); if (problems != null && problems.size() > 0) { throw new ApplicationException( ApplicationException.Type.APPLICATION, "The server currently starts with errors which must " + "be resolved before an upgrade can occur: \n\n" + Utils.listToString(problems, "\n\n"), null); } } catch (Exception e) { if (e instanceof ApplicationException) { throw (ApplicationException)e; } else { throw new ApplicationException(ApplicationException.Type.APPLICATION, "Server health check failed. Please resolve the following " + "before running the upgrade " + "tool: " + e.getLocalizedMessage(), e); } } "Upgrade canceled", null); } /** @@ -1616,6 +1589,17 @@ return txt; } private String getFinalCanceledMessage() { String txt; if (Utils.isCli()) { txt = getMsg("summary-upgrade-finished-canceled-cli"); } else { txt = getFormattedSuccess( getMsg("summary-upgrade-finished-canceled")); } return txt; } private String getFinalErrorMessage() { String txt; if (Utils.isCli()) {