/*
* 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
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.quicksetup.ui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.text.JTextComponent;
import org.opends.messages.Message;
import org.opends.quicksetup.ButtonName;
import org.opends.quicksetup.CurrentInstallStatus;
import org.opends.quicksetup.event.ButtonActionListener;
import org.opends.quicksetup.event.ButtonEvent;
import static org.opends.messages.QuickSetupMessages.*;
/**
* This class is a panel that contains an error message and a quit button.
* It is used for instance when we try to install Open DS but it is already
* installed.
*
*/
public class QuickSetupErrorPanel extends QuickSetupPanel
{
private static final long serialVersionUID = 1765037717593522233L;
private HashSet<ButtonActionListener> buttonListeners =
new HashSet<ButtonActionListener>();
private JButton quitButton;
private JButton continueButton;
/**
* Constructor of the QuickSetupErrorPanel.
* @param application Application this panel represents
* @param installStatus the current install status.
*/
public QuickSetupErrorPanel(GuiApplication application,
CurrentInstallStatus installStatus)
{
this(application, installStatus.getInstallationMsg());
continueButton.setVisible(installStatus.canOverwriteCurrentInstall());
}
/**
* Constructor of the QuickSetupErrorPanel.
* @param application Application this panel represents
* @param msg the error message to display formatted in HTML.
*/
public QuickSetupErrorPanel(GuiApplication application,
Message msg)
{
super(application);
JPanel p1 = new JPanel(new GridBagLayout());
p1.setBackground(UIFactory.CURRENT_STEP_PANEL_BACKGROUND);
p1.setBorder(UIFactory.DIALOG_PANEL_BORDER);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.insets = UIFactory.getCurrentStepPanelInsets();
p1.add(UIFactory.makeJLabel(UIFactory.IconType.WARNING_LARGE, null,
UIFactory.TextStyle.NO_STYLE), gbc);
gbc.weightx = 1.0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets.left = 0;
JTextComponent tf =
UIFactory.makeHtmlPane(msg,
UIFactory.INSTRUCTIONS_FONT);
tf.setOpaque(false);
tf.setEditable(false);
p1.add(tf, gbc);
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.VERTICAL;
p1.add(Box.createVerticalGlue(), gbc);
JPanel p2 = new JPanel(new GridBagLayout());
p2.setOpaque(false);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
gbc.insets = UIFactory.getEmptyInsets();
gbc.gridwidth = 3;
p2.add(Box.createHorizontalGlue(), gbc);
quitButton =
UIFactory.makeJButton(INFO_QUIT_BUTTON_LABEL.get(),
INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get());
final ButtonName fQuitButtonName = ButtonName.QUIT;
ActionListener quitListener = new ActionListener()
{
public void actionPerformed(ActionEvent ev)
{
ButtonEvent be = new ButtonEvent(ev.getSource(), fQuitButtonName);
for (ButtonActionListener li : buttonListeners)
{
li.buttonActionPerformed(be);
}
}
};
quitButton.addActionListener(quitListener);
continueButton =
UIFactory.makeJButton(INFO_CONTINUE_BUTTON_LABEL.get(),
INFO_CONTINUE_BUTTON_INSTALL_TOOLTIP.get());
final ButtonName fContinueButtonName = ButtonName.CONTINUE_INSTALL;
ActionListener continueListener = new ActionListener()
{
public void actionPerformed(ActionEvent ev)
{
ButtonEvent be = new ButtonEvent(ev.getSource(), fContinueButtonName);
for (ButtonActionListener li : buttonListeners)
{
li.buttonActionPerformed(be);
}
}
};
continueButton.addActionListener(continueListener);
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0.0;
gbc.gridwidth = GridBagConstraints.RELATIVE;
p2.add(continueButton, gbc);
continueButton.setVisible(false);
gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
gbc.gridwidth = GridBagConstraints.REMAINDER;
p2.add(quitButton, gbc);
setLayout(new GridBagLayout());
setBackground(UIFactory.DEFAULT_BACKGROUND);
setOpaque(true);
gbc.insets = UIFactory.getEmptyInsets();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
add(p1, gbc);
gbc.weighty = 0.0;
gbc.insets = UIFactory.getButtonsPanelInsets();
add(p2, gbc);
}
/**
* 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.
*/
public void addButtonActionListener(ButtonActionListener l)
{
buttonListeners.add(l);
}
/**
* Removes a button listener.
* @param l the ButtonActionListener to be removed.
*/
public void removeButtonActionListener(ButtonActionListener l)
{
buttonListeners.remove(l);
}
/**
* Returns the quit button.
* @return the quit button.
*/
public JButton getQuitButton()
{
return quitButton;
}
/**
* Returns the continue install button.
* @return the continue install button.
*/
public JButton getContinueInstallButton()
{
return continueButton;
}
}