/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2007 Sun Microsystems, Inc.
*/
package org.opends.quicksetup.ui;
import org.opends.quicksetup.*;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.util.Set;
import java.util.logging.Logger;
/**
* This class represents an application with a wizard GUI that can be run in the
* context of QuickSetup. Examples of applications might be 'installer',
* 'uninstaller' and 'upgrader'.
*/
public abstract class GuiApplication extends Application {
static private final Logger LOG =
Logger.getLogger(GuiApplication.class.getName());
/** The currently displayed wizard step. */
private WizardStep displayedStep;
/**
* Constructs an instance of an application. Subclasses
* of this application must have a default constructor.
*/
public GuiApplication() {
this.displayedStep = getFirstWizardStep();
}
/**
* Gets the frame title of the GUI application that will be used
* in some operating systems.
* @return internationalized String representing the frame title
*/
abstract public String getFrameTitle();
/**
* Returns the initial wizard step.
* @return Step representing the first step to show in the wizard
*/
public abstract WizardStep getFirstWizardStep();
/**
* Called by the quicksetup controller when the user advances to
* a new step in the wizard. Applications are expected to manipulate
* the QuickSetupDialog to reflect the current step.
*
* @param step Step indicating the new current step
* @param userData UserData representing the data specified by the user
* @param dlg QuickSetupDialog hosting the wizard
*/
public void setDisplayedWizardStep(WizardStep step,
UserData userData,
QuickSetupDialog dlg) {
this.displayedStep = step;
// First call the panels to do the required updates on their layout
dlg.setDisplayedStep(step, userData);
setWizardDialogState(dlg, userData, step);
}
/**
* Called when the user advances to new step in the wizard. Applications
* are expected to manipulate the QuickSetupDialog to reflect the current
* step.
* @param dlg QuickSetupDialog hosting the wizard
* @param userData UserData representing the data specified by the user
* @param step Step indicating the new current step
*/
protected abstract void setWizardDialogState(QuickSetupDialog dlg,
UserData userData,
WizardStep step);
/**
* Returns the tab formatted.
* @return the tab formatted.
*/
protected String getTab()
{
return formatter.getTab();
}
/**
* Called by the controller when the window is closing. The application
* can take application specific actions here.
* @param dlg QuickSetupDialog that will be closing
* @param evt The event from the Window indicating closing
*/
abstract public void windowClosing(QuickSetupDialog dlg, WindowEvent evt);
/**
* This method is called when we detected that there is something installed
* we inform of this to the user and the user wants to proceed with the
* installation destroying the contents of the data and the configuration
* in the current installation.
*/
public void forceToDisplay() {
// This is really only appropriate for Installer.
// The default implementation is to do nothing.
// The Installer application overrides this with
// whatever it needs.
}
/**
* Get the name of the button that will receive initial focus.
* @return ButtonName of the button to receive initial focus
*/
abstract public ButtonName getInitialFocusButtonName();
/**
* Creates the main panel for the wizard dialog.
* @param dlg QuickSetupDialog used
* @return JPanel frame panel
*/
public JPanel createFramePanel(QuickSetupDialog dlg) {
return new FramePanel(dlg.getStepsPanel(),
dlg.getCurrentStepPanel(),
dlg.getButtonsPanel());
}
/**
* Returns the set of wizard steps used in this application's wizard.
* @return Set of Step objects representing wizard steps
*/
abstract public Set extends WizardStep> getWizardSteps();
/**
* Creates a wizard panel given a specific step.
* @param step for which a panel representation should be created
* @return QuickSetupStepPanel for representing the step
*/
abstract public QuickSetupStepPanel createWizardStepPanel(WizardStep step);
/**
* Gets the next step in the wizard given a current step.
* @param step Step the current step
* @return Step the next step
*/
abstract public WizardStep getNextWizardStep(WizardStep step);
/**
* Gets the previous step in the wizard given a current step.
* @param step Step the current step
* @return Step the previous step
*/
abstract public WizardStep getPreviousWizardStep(WizardStep step);
/**
* Indicates whether or not the user is allowed to return to a previous
* step from step.
* @param step WizardStep for which the the return value indicates whether
* or not the user can return to a previous step
* @return boolean where true indicates the user can return to a previous
* step from step
*/
public boolean canGoBack(WizardStep step) {
return !getFirstWizardStep().equals(step);
}
/**
* Indicates whether or not the user is allowed to move to a new
* step from step.
* @param step WizardStep for which the the return value indicates whether
* or not the user can move to a new step
* @return boolean where true indicates the user can move to a new
* step from step
*/
public boolean canGoForward(WizardStep step) {
return getNextWizardStep(step) != null;
}
/**
* Inidicates whether or not the user is allowed to finish the wizard from
* step.
* @param step WizardStep for which the the return value indicates whether
* or not the user can finish the wizard
* @return boolean where true indicates the user can finish the wizard
*/
public boolean canFinish(WizardStep step) {
return getNextWizardStep(step) != null;
}
/**
* Inidicates whether or not the user is allowed to quit the wizard from
* step.
* @param step WizardStep for which the the return value indicates whether
* or not the user can quit the wizard
* @return boolean where true indicates the user can quit the wizard
*/
public boolean canQuit(WizardStep step) {
return false;
}
/**
* Inidicates whether or not the user is allowed to close the wizard from
* step.
* @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
* step.
* @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
*/
public abstract void previousClicked(WizardStep cStep, QuickSetup qs);
/**
* Called when the user has clicked the 'finish' button.
* @param cStep WizardStep at which the user clicked the previous button
* @param qs QuickSetup controller
*/
public abstract void finishClicked(final WizardStep cStep,
final QuickSetup qs);
/**
* Called when the user has clicked the 'next' button.
* @param cStep WizardStep at which the user clicked the next button
* @param qs QuickSetup controller
*/
public abstract void nextClicked(WizardStep cStep, QuickSetup qs);
/**
* Called when the user has clicked the 'close' button.
* @param cStep WizardStep at which the user clicked the close button
* @param qs QuickSetup controller
*/
public abstract void closeClicked(WizardStep cStep, QuickSetup qs);
/**
* 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 abstract void cancelClicked(WizardStep cStep, QuickSetup qs);
/**
* Called when the user has clicked the 'quit' button.
* @param step WizardStep at which the user clicked the quit button
* @param qs QuickSetup controller
*/
abstract public void quitClicked(WizardStep step, QuickSetup qs);
/**
* Called whenever this application should update its user data from
* values found in QuickSetup.
* @param cStep current wizard step
* @param qs QuickSetup controller
* @throws org.opends.quicksetup.UserDataException if there is a problem with
* the data
*/
public abstract void updateUserData(WizardStep cStep, QuickSetup qs)
throws UserDataException;
/**
* Gets the key for the close button's tool tip text.
* @return String key of the text in the resource bundle
*/
public String getCloseButtonToolTip() {
return "close-button-tooltip";
}
/**
* Gets the key for the finish button's tool tip text.
* @return String key of the text in the resource bundle
*/
public String getFinishButtonToolTip() {
return "finish-button-tooltip";
}
/**
* Gets the key for the finish button's label.
* @return String key of the text in the resource bundle
*/
public String getFinishButtonLabel() {
return "finish-button-label";
}
}