/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.gui.operation; import net.codjo.gui.toolkit.swing.SwingWorker; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.operation.OperationInterruptedException; import net.codjo.utils.sql.DataFormater; import net.codjo.utils.sql.GenericTable; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * Classe g�rant l'export et sa progression. * * @author $Author: blazart $ * @version $Revision: 1.3 $ */ public class ExportManager { private int lengthOfTask; private int current = 0; private GenericTable genericTable; private String filename; private SwingWorker taskWorker; private DataFormater dataFormater; private boolean doReloadAtEnd; /** * Constructeur. * * @param g La GenericTable. * @param filename Le nom du fichier d'export. * @param doReload TODO * * @throws IllegalArgumentException TODO */ ExportManager(GenericTable g, String filename, boolean doReload) { if (g == null || filename == null) { throw new IllegalArgumentException(); } genericTable = g; this.filename = filename; doReloadAtEnd = doReload; lengthOfTask = genericTable.getNumberOfRows(); } /** * Retourne le SwingWorker. * * @return Le SwingWorker. */ SwingWorker getTaskWorker() { return taskWorker; } /** * Retourne le nombre de lignes � exporter. * * @return Le nombre de lignes � exporter. */ int getLengthOfTask() { return lengthOfTask; } /** * Retourne le num�ro de la ligne export�e. * * @return Le num�ro de la ligne export�e. */ int getCurrent() { return dataFormater.getCurrentLine(); } /** * Retourne le message � afficher sur le ProgressMonitor. * * @return Le message � afficher sur le ProgressMonitor. */ String getMessage() { return "Enregistrement " + getCurrent() + " / " + getLengthOfTask() + "."; } /** * Lance l'export. * * @param endOperationListener Runner dont la m�thode run sera appel�e en fin de t�che (dans le thread * Event). */ void go(Runnable endOperationListener) { current = 0; try { File outputFile = new File(filename); FileWriter out = new FileWriter(outputFile); dataFormater = new DataFormater(genericTable); taskWorker = new TaskWorker(out, dataFormater, endOperationListener, doReloadAtEnd); taskWorker.start(); } catch (IOException ex) { ex.printStackTrace(); ErrorDialog.show(genericTable, "L'export a �chou� !", ex); } } /** * Arr�te le ProgressMonitor. */ void stop() { current = lengthOfTask; } /** * Indique si l'export est termin�. * * @return true si termin� false sinon. */ boolean done() { return current >= lengthOfTask; } /** * Execute l'export dans un thread de type SwingWorker. * * @author $Author: blazart $ * @version $Revision: 1.3 $ */ private class TaskWorker extends SwingWorker { private FileWriter out; private DataFormater dataFormater; private Runnable endOperationListener; private boolean doReloadAtEnd; /** * Constructeur. * * @param out Le FileWriter utilis� pour l'�criture. * @param dataFormater L'objet qui g�re l'�criture. * @param endOperationListener Runner dont la m�thode run sera appel�e en fin de t�che (dans le thread * Event). * @param doReload TODO */ private TaskWorker(FileWriter out, DataFormater dataFormater, Runnable endOperationListener, boolean doReload) { this.out = out; this.dataFormater = dataFormater; this.endOperationListener = endOperationListener; doReloadAtEnd = doReload; } /** * Execute l'export. * * @return - */ @Override public Object construct() { try { dataFormater.buildDataForExport(out); out.close(); } catch (IOException ex) { ex.printStackTrace(); ErrorDialog.show(genericTable, "L'export a �chou� !", ex); } catch (OperationInterruptedException ex) { ex.printStackTrace(); ErrorDialog.show(genericTable, "L'export a �chou� !", ex); } return null; } /** * Previent l'IHM et recharge les donn�es (on revient sur la 1�re page). */ @Override public void finished() { if (doReloadAtEnd) { endOperationListener.run(); } } } }