/* ExportBookWorker.java created 2008-01-27
*
*/
package org.signalml.app.worker.document;
import java.io.File;
import java.util.List;
import javax.swing.SwingWorker;
import org.apache.log4j.Logger;
import org.signalml.app.view.common.dialogs.PleaseWaitDialog;
import org.signalml.domain.book.DefaultBookBuilder;
import org.signalml.domain.book.IncrementalBookWriter;
import org.signalml.domain.book.StandardBook;
import org.signalml.domain.book.StandardBookSegment;
/** ExportBookWorker
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class ExportBookWorker extends SwingWorker<Void,Integer> {
protected static final Logger logger = Logger.getLogger(ExportBookWorker.class);
private File bookFile;
private StandardBook book;
private PleaseWaitDialog pleaseWaitDialog;
public ExportBookWorker(StandardBook book, File bookFile, PleaseWaitDialog pleaseWaitDialog) {
this.book = book;
this.bookFile = bookFile;
this.pleaseWaitDialog = pleaseWaitDialog;
}
@Override
protected Void doInBackground() throws Exception {
DefaultBookBuilder bookBuilder = DefaultBookBuilder.getInstance();
IncrementalBookWriter incrementalBookWriter = bookBuilder.writeBookIncremental(book, bookFile);
int segmentCount = book.getSegmentCount();
StandardBookSegment[] segments;
for (int i=0; i<segmentCount; i++) {
segments = book.getSegmentAt(i);
incrementalBookWriter.writeSegment(segments);
publish(new Integer(i+1));
}
incrementalBookWriter.close();
return null;
}
public PleaseWaitDialog getPleaseWaitDialog() {
synchronized (pleaseWaitDialog) {
return pleaseWaitDialog;
}
}
@Override
protected void done() {
if (pleaseWaitDialog != null) {
pleaseWaitDialog.releaseIfOwnedBy(this);
}
}
@Override
protected void process(List<Integer> chunks) {
if (pleaseWaitDialog != null && !chunks.isEmpty()) {
synchronized (pleaseWaitDialog) {
pleaseWaitDialog.setProgress((int) chunks.get(0));
}
}
}
}