package net.sf.jabref; import java.io.File; import java.io.FilenameFilter; import java.util.HashSet; public class OpenFileFilter extends javax.swing.filechooser.FileFilter implements FilenameFilter { HashSet<String> extSet = new HashSet<String>(); String desc; public OpenFileFilter(String[] extensions) { StringBuffer buf = new StringBuffer(); int numExt = extensions.length; if (numExt>0) { buf.append('*'); buf.append(extensions[0]); extSet.add(extensions[0]); } for(int curExt = 1; curExt<numExt; curExt++) { buf.append(", *"); buf.append(extensions[curExt]); extSet.add(extensions[curExt]); } desc = buf.toString(); } public OpenFileFilter() { this( new String[] { ".bib", ".dat", // silverplatter ending ".txt", // windows puts ".txt" extentions and for scifinder ".ris", ".ref", // refer/endnote format ".fcgi", // default for pubmed ".bibx", // default for BibTeXML ".xml" }); } public OpenFileFilter(String s) { this(s.split("[, ]+",0)); } public boolean accept(File file){ if (file.isDirectory()) return true; return accept(file.getName()); } public boolean accept(String filenm){ filenm = filenm.toLowerCase(); int dotPos = filenm.lastIndexOf("."); if (dotPos==-1) return false; int dotDotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions return extSet.contains(filenm.substring(dotPos)) || (dotDotPos>=0 && extSet.contains(filenm.substring(dotDotPos))); } public String getSuffix(String filenm) { int dotPos; String suffix; dotPos = filenm.lastIndexOf("."); if (dotPos==-1) return null; suffix = filenm.substring(dotPos); if (extSet.contains(suffix)) return suffix; dotPos = filenm.lastIndexOf(".", dotPos-1); // for dot.dot extensions if (dotPos==-1) return null; suffix = filenm.substring(dotPos); if (extSet.contains(suffix)) return suffix; return null; } public String getDescription(){ return desc; } public boolean accept(File dir, String name) { return accept(new File(dir.getPath()+name)); } }