/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.gui.operation;
//Lib
import net.codjo.utils.sql.GenericTable;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.ProgressMonitor;
import javax.swing.Timer;
/**
* Classe permettant d'executer l'export dans un thread s�par� avec une progress barre.
*
* @author $Author: blazart $
* @version $Revision: 1.2 $
*
*
*/
public class ExportProgress extends JFrame {
private static final int ONE_SECOND = 1000;
private ProgressMonitor progressMonitor;
private ExportManager manager;
private Timer timer;
private GenericTable genericTable;
private String filename;
private boolean doReload;
/**
* Constructeur.
*
* @param g La GenericTable sur laquelle on r�cup�re les donn�es � exporter.
* @param filename Le nom du fichier d'export.
* @param reloadAtEnd TODO
*
* @throws IllegalArgumentException TODO
*/
public ExportProgress(GenericTable g, String filename, boolean reloadAtEnd) {
super("Op�ration en cours...");
if (g == null || filename == null) {
throw new IllegalArgumentException();
}
genericTable = g;
this.filename = filename;
doReload = reloadAtEnd;
}
/**
* Lance l'op�ration d'export.
*
* @param endOperationListener Runner dont la m�thode run sera appel�e en fin de
* t�che (dans le thread Event).
*/
public void go(Runnable endOperationListener) {
manager = new ExportManager(genericTable, filename, doReload);
timer = new Timer(ONE_SECOND, new TimerListener());
progressMonitor =
new ProgressMonitor(ExportProgress.this,
"Export de la table " + genericTable.getTable().getTableName()
+ " en cours...", "", 0, manager.getLengthOfTask());
progressMonitor.setProgress(0);
progressMonitor.setMillisToDecideToPopup(ONE_SECOND / 10);
manager.go(endOperationListener);
timer.start();
}
/**
* Rafraichit le ProgressMonitor en fonction de l'�tat de l'export.
*
* @author $Author: blazart $
* @version $Revision: 1.2 $
*/
class TimerListener implements ActionListener {
/**
* DOCUMENT ME!
*
* @param evt Description of Parameter
*/
public void actionPerformed(ActionEvent evt) {
if (manager.done()) {
progressMonitor.close();
manager.stop();
Toolkit.getDefaultToolkit().beep();
}
else if (progressMonitor.isCanceled()) {
timer.stop();
Object[] choix = {"Non je continue", "Oui je veux arr�ter"};
int answer = -1;
while (answer == -1) {
answer =
JOptionPane.showOptionDialog(null,
"Etes-vous s�r(e) de vouloir annuler l'export en cours ?",
"Arr�t de l'export", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, choix, null);
}
if (answer == 1) {
manager.getTaskWorker().interrupt();
manager.stop();
Toolkit.getDefaultToolkit().beep();
}
else {
progressMonitor =
new ProgressMonitor(ExportProgress.this,
"Export de la table "
+ genericTable.getTable().getTableName() + " en cours...",
"", 0, manager.getLengthOfTask());
timer.start();
}
}
else {
progressMonitor.setNote(manager.getMessage());
progressMonitor.setProgress(manager.getCurrent());
}
}
}
}