/* * org.openmicroscopy.shoola.util.ui.ShutDownDialog * *------------------------------------------------------------------------------ * Copyright (C) 2006-2012 University of Dundee & Open Microscopy Environment. * All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.util.ui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.Timer; import omero.gateway.Gateway; /** * Window uses to let the user know the time before the application will shut * down. At any point, the user can decide to cancel. * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @since Beta4.4 */ public class ShutDownDialog extends NotificationDialog implements ActionListener { /** The time to wait before shutting down.*/ private static final int DEFAULT_TIME = 120;//2mins /** The default shutdown message.*/ private static final String SHUTDOWN_MESSAGE = "If the connection cannot be re-established,\n"+ "the application will shut down in "; /** The time used to indicates the remaining time.*/ private Timer timer; /** The remaining time before shutting down.*/ private int remainingTime; /** Use to check if the network is up.*/ private Gateway gateway; /** The type of shutdown windows.*/ private int index; /** The time to wait before checking if the network is up.*/ private int checkupTime; /** * Formats the displayed text. * * @param time The time to format. */ private void formatText(int time) { StringBuffer buffer = new StringBuffer(); buffer.append(message); buffer.append(SHUTDOWN_MESSAGE); buffer.append(UIUtilities.formatTimeInSeconds(time)); buffer.append("."); contentPanel.setDescription(buffer.toString()); repaint(); } /** * Initializes the component. * * @param time The time to wait before shutting down. */ private void initialize(int time) { checkupTime = 5; removeWindowListener(windowAdapter); setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); remainingTime = time; okButton.setText("Shut Down"); okButton.setToolTipText("Shut down the application."); int speed = 1000; int pause = 1000; timer = new Timer(speed, this); timer.setInitialDelay(pause); timer.start(); if (index == -1) { formatText(time); setSize(400, 200); } else pack(); setResizable(false); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. * @param time The time to wait before shutting down. * @param index <code>-1</code> or indicate the type of shutdown error. */ public ShutDownDialog(JDialog owner, String title, String message, int time, int index) { super(owner, title, message, null); this.index = index; initialize(time); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. * @param time The time to wait before shutting down. * @param index <code>-1</code> or indicate the type of shutdown error. */ public ShutDownDialog(JFrame owner, String title, String message, int time, int index) { super(owner, title, message, null); this.index = index; initialize(time); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. The default time is set to {@link #DEFAULT_TIME} * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. * @param index <code>-1</code> or indicate the type of shutdown error. */ public ShutDownDialog(JDialog owner, String title, String message, int index) { this(owner, title, message, DEFAULT_TIME, index); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. The default time is set to {@link #DEFAULT_TIME} * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. */ public ShutDownDialog(JDialog owner, String title, String message) { this(owner, title, message, DEFAULT_TIME, -1); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. The default time is set to {@link #DEFAULT_TIME} * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. * @param index <code>-1</code> or indicate the type of shutdown error. */ public ShutDownDialog(JFrame owner, String title, String message, int index) { this(owner, title, message, DEFAULT_TIME, index); } /** * Creates a new dialog. * You have to call {@link #setVisible(boolean)} to actually display it * on screen. The default time is set to {@link #DEFAULT_TIME} * * @param owner The parent window. * @param title The title to display on the title bar. * @param message The notification message. */ public ShutDownDialog(JFrame owner, String title, String message) { this(owner, title, message, DEFAULT_TIME, -1); } /** * Sets the gateway. * * @param gateway The value to set. */ public void setGateway(Gateway gateway) { this.gateway = gateway; } /** * Sets how often to check if the network is still down. * * @param time The value to set. */ public void setCheckupTime(int time) { if (time <= 0) time = 1; checkupTime = time; } /** * Overridden to stop the timer. */ protected void close() { if (timer != null) timer.stop(); super.close(); } /** * Overridden to stop the timer. */ protected void cancel() { if (timer != null) timer.stop(); setVisible(false); dispose(); firePropertyChange(CANCEL_NOTIFICATION_PROPERTY, -2, index); } /** * Decreases the time remaining before shutting down. * * @param e The action to handle. */ public void actionPerformed(ActionEvent e) { remainingTime--; if (index == -1) formatText(remainingTime); if (remainingTime %checkupTime == 0) { try { if(gateway.isNetworkUp(false)) { cancel(); return; } } catch (Exception ex) { //continue the network is still down. } } if (remainingTime == 0) close(); } }