package net.sf.jabref.imports;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import net.sf.jabref.Globals;
import net.sf.jabref.JabRefFrame;
import net.sf.jabref.MnemonicAwareAction;
/**
* Created by IntelliJ IDEA.
* User: alver
* Date: Oct 22, 2006
* Time: 12:06:09 PM
* To change this template use File | Settings | File Templates.
*/
public class ImportFormats {
public static JFileChooser createImportFileChooser(String currentDir) {
SortedSet<ImportFormat> importers = Globals.importFormatReader.getImportFormats();
String lastUsedFormat = Globals.prefs.get("lastUsedImport");
FileFilter defaultFilter = null;
JFileChooser fc = new JFileChooser(currentDir);
TreeSet<ImportFileFilter> filters = new TreeSet<ImportFileFilter>();
for (ImportFormat format : importers){
ImportFileFilter filter = new ImportFileFilter(format);
filters.add(filter);
if (format.getFormatName().equals(lastUsedFormat))
defaultFilter = filter;
}
for (ImportFileFilter filter : filters){
fc.addChoosableFileFilter(filter);
}
if (defaultFilter != null)
fc.setFileFilter(defaultFilter);
else
fc.setFileFilter(fc.getAcceptAllFileFilter());
return fc;
}
/**
* Create an AbstractAction for performing an Import operation.
* @param frame The JabRefFrame of this JabRef instance.
* @param openInNew Indicate whether the action should open into a new database or
* into the currently open one.
* @return The action.
*/
public static AbstractAction getImportAction(JabRefFrame frame, boolean openInNew) {
class ImportAction extends MnemonicAwareAction {
private JabRefFrame frame;
private boolean openInNew;
public ImportAction(JabRefFrame frame, boolean openInNew) {
this.frame = frame;
this.openInNew = openInNew;
putValue(NAME, openInNew ? "Import into new database" :
"Import into current database");
putValue(ACCELERATOR_KEY, openInNew ? Globals.prefs.getKey("Import into new database") :
Globals.prefs.getKey("Import into current database"));
}
public void actionPerformed(ActionEvent e) {
JFileChooser fc = ImportFormats.createImportFileChooser
(Globals.prefs.get("importWorkingDirectory"));
fc.showOpenDialog(frame);
File file = fc.getSelectedFile();
if (file == null)
return;
FileFilter ff = fc.getFileFilter();
ImportFormat format = null;
if (ff instanceof ImportFileFilter)
format = ((ImportFileFilter)ff).getImportFormat();
try {
if (!file.exists()) {
// Warn that the file doesn't exists:
JOptionPane.showMessageDialog(frame,
Globals.lang("File not found")+
": '"+file.getName()+"'.",
Globals.lang("Import"), JOptionPane.ERROR_MESSAGE);
return;
}
ImportMenuItem imi = new ImportMenuItem(frame,
openInNew, format);
imi.automatedImport(new String[] {file.getAbsolutePath()});
// Make sure we remember which filter was used, to set the default
// for next time:
if (format != null)
Globals.prefs.put("lastUsedImport", format.getFormatName());
else
Globals.prefs.put("lastUsedImport", "__all");
Globals.prefs.put("importWorkingDirectory", file.getParent());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return new ImportAction(frame, openInNew);
}
}