/* ExportBookAction.java created 2008-01-27
*
*/
package org.signalml.app.action.book;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.Component;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.concurrent.ExecutionException;
import org.apache.log4j.Logger;
import org.signalml.app.action.AbstractFocusableSignalMLAction;
import org.signalml.app.action.selector.BookDocumentFocusSelector;
import org.signalml.app.document.BookDocument;
import org.signalml.app.document.FileBackedDocument;
import org.signalml.app.view.common.dialogs.OptionPane;
import org.signalml.app.view.common.dialogs.PleaseWaitDialog;
import org.signalml.app.view.common.dialogs.errors.Dialogs;
import org.signalml.app.view.workspace.ViewerFileChooser;
import org.signalml.app.worker.document.ExportBookWorker;
import org.signalml.domain.book.StandardBook;
import org.signalml.util.Util;
/** ExportBookAction
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class ExportBookAction extends AbstractFocusableSignalMLAction<BookDocumentFocusSelector> {
private static final long serialVersionUID = 1L;
protected static final Logger logger = Logger.getLogger(ExportBookAction.class);
private PleaseWaitDialog pleaseWaitDialog;
private ViewerFileChooser fileChooser;
private Component optionPaneParent;
public ExportBookAction(BookDocumentFocusSelector bookDocumentFocusSelector) {
super(bookDocumentFocusSelector);
setText(_("Export Book..."));
setToolTip(_("Export book to file"));
setMnemonic(KeyEvent.VK_B);
}
@Override
public void actionPerformed(ActionEvent ev) {
logger.debug("Export book");
BookDocument bookDocument = getActionFocusSelector().getActiveBookDocument();
if (bookDocument == null) {
logger.warn("Target document doesn't exist or is not a book");
return;
}
File fileSuggestion = null;
if (bookDocument instanceof FileBackedDocument) {
File originalFile = ((FileBackedDocument) bookDocument).getBackingFile();
if (originalFile != null) {
fileSuggestion = new File("export_" + originalFile.getName());
}
}
File file;
boolean hasFile = false;
do {
file = fileChooser.chooseExportBookFile(optionPaneParent, fileSuggestion);
if (file == null) {
return;
}
String ext = Util.getFileExtension(file,false);
if (ext == null) {
file = new File(file.getAbsolutePath() + ".b");
}
hasFile = true;
if (file.exists()) {
int res = OptionPane.showFileAlreadyExists(optionPaneParent, file.getName());
if (res != OptionPane.OK_OPTION) {
hasFile = false;
}
}
} while (!hasFile);
StandardBook book = bookDocument.getBook();
ExportBookWorker worker = new ExportBookWorker(book, file, pleaseWaitDialog);
worker.execute();
pleaseWaitDialog.setActivity(_("exporting book"));
pleaseWaitDialog.configureForDeterminate(0, book.getSegmentCount(), 0);
pleaseWaitDialog.waitAndShowDialogIn(optionPaneParent, 500, worker);
try {
worker.get();
} catch (InterruptedException ex) {
// ignore
} catch (ExecutionException ex) {
logger.error("Worker failed to save", ex.getCause());
Dialogs.showExceptionDialog((Window) null, ex);
return;
}
}
@Override
public void setEnabledAsNeeded() {
BookDocumentFocusSelector x = getActionFocusSelector();
if (null != x)
setEnabled(x.getActiveBookDocument() != null);
}
public PleaseWaitDialog getPleaseWaitDialog() {
return pleaseWaitDialog;
}
public void setPleaseWaitDialog(PleaseWaitDialog pleaseWaitDialog) {
this.pleaseWaitDialog = pleaseWaitDialog;
}
public ViewerFileChooser getFileChooser() {
return fileChooser;
}
public void setFileChooser(ViewerFileChooser fileChooser) {
this.fileChooser = fileChooser;
}
public Component getOptionPaneParent() {
return optionPaneParent;
}
public void setOptionPaneParent(Component optionPaneParent) {
this.optionPaneParent = optionPaneParent;
}
}