package org.rr.jeborker.gui.action; import static org.rr.commons.utils.StringUtil.EMPTY; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; import java.util.logging.Level; import javax.swing.AbstractAction; import javax.swing.Action; import org.rr.commons.log.LoggerFactory; import org.rr.commons.mufs.IResourceHandler; import org.rr.commons.mufs.ResourceHandlerFactory; import org.rr.commons.mufs.ResourceHandlerUtils; import org.rr.commons.swing.SwingUtils; import org.rr.commons.swing.dialogs.chooser.FileChooserDialogFactory; import org.rr.commons.swing.dialogs.chooser.IFileChooser; import org.rr.commons.swing.dialogs.chooser.IFileChooser.RETURN_OPTION; import org.rr.jeborker.app.preferences.APreferenceStore; import org.rr.jeborker.app.preferences.PreferenceStoreFactory; import org.rr.jeborker.gui.MainController; import org.rr.jeborker.gui.resources.ImageResourceBundle; public class SaveCoverToFileAction extends AbstractAction { private String ebook; private static final String PATH_PREF_KEY = SaveCoverToFileAction.class.getSimpleName() + "LatestPath"; SaveCoverToFileAction(String text) { this.ebook = text; String name = Bundle.getString("SaveCoverToFileAction.name"); putValue(Action.NAME, SwingUtils.removeMnemonicMarker(name)); putValue(Action.SMALL_ICON, ImageResourceBundle.getResourceAsImageIcon("file_16.png")); putValue(Action.LARGE_ICON_KEY, ImageResourceBundle.getResourceAsImageIcon("file_22.png")); putValue(MNEMONIC_KEY, SwingUtils.getMnemonicKeyCode(name)); } @Override public void actionPerformed(ActionEvent e) { final MainController controller = MainController.getController(); final APreferenceStore preferenceStore = PreferenceStoreFactory.getPreferenceStore(PreferenceStoreFactory.DB_STORE); final IResourceHandler imageViewerResource = controller.getImageViewerResource(); final String fileExtension = ResourceHandlerUtils.getFileExtension(imageViewerResource); String filename = "cover" + (fileExtension != null ? fileExtension : EMPTY); String dir = preferenceStore.getGenericEntryAsString(PATH_PREF_KEY); IFileChooser c = FileChooserDialogFactory.getFileChooser(); if(dir != null) { c.setCurrentDirectory(new File(dir)); } if(filename != null) { c.setSelectedFile(new File(filename)); } c.setDialogType(IFileChooser.DIALOG_TPYE.SAVE); c.setTitle(Bundle.getString("SaveCoverToFileAction.saveDialogTitle")); RETURN_OPTION rVal = c.showDialog(controller.getMainWindow()); if (rVal == IFileChooser.RETURN_OPTION.APPROVE) { filename = c.getSelectedFile().getName(); dir = c.getCurrentDirectory().toString(); preferenceStore.addGenericEntryAsString(PATH_PREF_KEY, dir); String targetString = dir + File.separator + filename; IResourceHandler targetRecource = ResourceHandlerFactory.getResourceHandler(targetString); try { imageViewerResource.copyTo(targetRecource, true); MainController.getController().getProgressMonitor().setMessage(Bundle.getFormattedString("SaveCoverToFileAction.finished", new String[] {targetString})); } catch (IOException e1) { LoggerFactory.getLogger().log(Level.WARNING, "Failed to save cover for " + ebook); } } } }