/*
* 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
* 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
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
* Portions Copyright 2013 ForgeRock AS.
*/
/**
* This class represents the dialog used by quicksetup applications.
*
* In its constructor it gets as parameters an object describing the current
* installation status and the default values to be proposed to the user
* in the panels.
*
* If we are installing Open DS and the server has already been installed it
* will display an error message. In the other cases it will display a wizard.
*
*/
public class QuickSetupDialog
{
new HashSet<ButtonActionListener>();
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
*/
{
throw new IllegalArgumentException("application cannot be null");
}
this.application = app;
this.installStatus = installStatus;
this.quickSetup = qs;
public void windowClosing(WindowEvent e) {
}
});
}
/**
* Packs and displays this dialog.
*
*/
public void packAndShow()
{
frame.setVisible(true);
}
/**
* 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.forceToDisplay = true;
framePanel = null;
}
/**
* Displays the panel corresponding to the provided step. The panel contents
* are updated with the contents of the UserData object.
* @param step the step that we want to display.
* @param userData the UserData object that must be used to populate
* the panels.
*/
{
// First call the panels to do the required updates on their layout
}
/**
* Returns the currently displayed step.
* @return the currently displayed step.
*/
{
return displayedStep;
}
/**
* Forwards to the displayed panel the ProgressDescriptor so that they
* can update their contents accordingly.
* @param descriptor the descriptor of the Installation progress.
*/
{
}
}
/**
* Displays an error message dialog.
*
* @param msg
* the error message.
* @param title
* the title for the dialog.
*/
{
}
/**
* Displays a confirmation message dialog.
*
* @param msg
* the confirmation message.
* @param title
* the title of the dialog.
* @return <CODE>true</CODE> if the user confirms the message, or
* <CODE>false</CODE> if not.
*/
{
}
/**
* Returns the value corresponding to the provided FieldName.
* @param fieldName the FieldName for which we want to obtain the value.
* @return the value corresponding to the provided FieldName.
*/
{
}
/**
* Marks as invalid (or valid depending on the value of the invalid parameter)
* a field corresponding to FieldName. This basically implies udpating the
* style of the JLabel associated with fieldName (the association is done
* using the LabelFieldDescriptor class).
* @param fieldName the FieldName to be marked as valid or invalid.
* @param invalid whether to mark the field as valid or invalid.
*/
{
}
/**
* Adds a button listener. All the button listeners will be notified when
* the buttons are clicked (by the user or programatically).
* @param l the ButtonActionListener to be added.
*/
{
buttonListeners.add(l);
}
/**
* This method is called to inform that a worker has started (the QuickSetup
* is doing some data validation). The worker is doing its tasks outside
* the event thread to avoid blocking of the painting and this class is
* notified of this fact. The method basically simply the Next and Previous
* buttons.
*
* This method can be called from the event thread or outside the event
* thread.
*
*/
public void workerStarted()
{
{
public void run()
{
displayWorkingProgressImage(true);
}
};
runOnEventThread(r);
}
/**
* This method is called to inform that a worker has finished. The method just
* enables the Next and Previous buttons.
*
* This method can be called from the event thread or outside the event
* thread.
*
*/
public void workerFinished()
{
{
public void run()
{
displayWorkingProgressImage(false);
}
};
runOnEventThread(r);
}
/**
* Notification telling that the installation/uninstallation is finished.
* @param successful a boolean telling whether the setup was successful or
* not.
*/
{
if (!successful)
{
// Do nothing... all the error messages
}
}
/**
* Returns the frame containing the dialog.
* @return the frame containing the dialog.
*/
{
return frame;
}
/**
* Enables a button associated with the given Button Name.
* @param buttonName the button name of the button.
* @param enable boolean indicating to enable or to disable the button.
*/
{
}
/**
* Returns the panel of the dialog.
* @return the panel of the dialog.
*/
{
if (framePanel == null) {
}
return framePanel;
}
/**
* Returns the steps panel.
* @return the steps panel.
*/
{
if (stepsPanel == null)
{
}
return stepsPanel;
}
/**
* Returns the current step panel.
* @return the current step panel.
*/
{
if (currentStepPanel == null)
{
}
return currentStepPanel;
}
/**
* Returns the buttons panel.
* @return the buttons panel.
*/
{
if (buttonsPanel == null)
{
}
return buttonsPanel;
}
/**
* Returns the button corresponding to the buttonName.
* @param buttonName the ButtonName for which we want to get the button.
* @return the button corresponding to the buttonName.
*/
{
if (isInstalled() && !forceToDisplay)
{
{
{
} else
{
}
} else
{
}
return button;
}
/**
* Sets the focus in the button associated with the ButtonName.
* @param buttonName the ButtonName associated with the button.
*/
{
} else {
buttonName + "'");
}
}
/**
* Sets the default button for the frame.
* @param buttonName the ButtonName associated with the button.
*/
{
}
/**
* Method used to execute a Runnable in the event thread. If we are in the
* event thread it will be called synchronously and if we are not it will
* be executed asynchronously.
*
* @param r the Runnable to be executed.
*/
{
{
r.run();
} else
{
}
}
/**
* Returns <CODE>true</CODE> if the server is already installed and
* <CODE>false</CODE> otherwise.
* @return <CODE>true</CODE> if the server is already installed and
* <CODE>false</CODE> otherwise.
*/
private boolean isInstalled()
{
return installStatus.isInstalled();
}
/**
* Returns (and creates if it is not already created) the panel that
* informs the user that the server is already installed when the
* installation has been launched.
* @return the panel that is used
* to inform the user that the server is already installed when the
* installation has been launched.
*/
{
if (installedPanel == null)
{
}
return installedPanel;
}
/**
* Notifies the ButtonActionListener objects that an ButtonEvent has occurred
* in the button associated with buttonName.
* @param buttonName the ButtonName associated with the button.
*/
{
{
}
}
{
}
}