package org.mindswap.swoop.utils.ui; import java.io.File; import javax.swing.filechooser.FileFilter; /** * File Filter class designed to create filters for Swoop. All the supported file types * are stored in an internal array to generate the filters. * * @author Evren Sirin */ public class SwoopFileFilter extends FileFilter { private String description; private String[] extensions; /** * */ public static String[][] supportedTypes = { {"SWOOP Workspace Files", "swp"}, {"SWOOP Ontology Object Files", "swo"}, {"OWL Files", "owl"}, {"RDF Files", "rdf"}, {"XML Files", "xml"}, {"Abstract Syntax Files", "txt"} }; /** * Default file filter which contains all the file extensions * (*.swp, *.swo, *.owl, *.rdf, *.xml, ".txt) */ public SwoopFileFilter() { String[] ext = new String[supportedTypes.length]; for(int i = 0; i < ext.length; i++) { ext[i] = supportedTypes[i][1]; } init("SWOOP Files", ext); } /** * Default file filter which contains only ontology file extensions * (*.swo, *.owl, *.rdf, *.xml, ".txt) */ public SwoopFileFilter(boolean onlyOntologyFiles) { if (onlyOntologyFiles) { String[] ext = new String[supportedTypes.length-1]; for(int i = 1; i < supportedTypes.length; i++) { ext[i-1] = supportedTypes[i][1]; } init("SWOOP Ontology Files", ext); } } /** * A file filter that accepts only one type of extension. Extension should * not have '.' in it. Description is the string shown in the combo box of * the file chooser * * @param desc * @param extension */ public SwoopFileFilter(String desc, String extension) { init(desc, new String[] { extension }); } /** * A file filter that accepts files whose extension matches the one element * in the given array. * * @param desc * @param extension */ public SwoopFileFilter(String desc, String[] extensions) { init(desc, extensions); } private void init(String desc, String[] ext) { extensions = ext; StringBuffer strbuf = new StringBuffer(desc + " ("); for(int i = 0; i < extensions.length; i++) { if(i > 0) { strbuf.append(", "); } strbuf.append("*." + extensions[i]); } strbuf.append(")"); description = strbuf.toString(); } /** * Return a file filter that only accepts Swoop workspace file (swp) * * @return */ public static FileFilter getWorkspaceFilter() { return new SwoopFileFilter(supportedTypes[0][0], supportedTypes[0][1]); } /** * Return a file filter that only accepts Swoop ontology files (swo, owl, rdf, xml) * * @return */ public static FileFilter[] getOntologyFilters() { SwoopFileFilter[] filters = new SwoopFileFilter[6]; for(int i = 0; i < filters.length-1; i++) { filters[i] = new SwoopFileFilter(supportedTypes[i+1][0], supportedTypes[i+1][1]); } filters[5] = new SwoopFileFilter(true); return filters; } /** * Return an array of file filters for all the supported file types. * * @return */ public static FileFilter[] getAllFilters() { SwoopFileFilter[] filters = new SwoopFileFilter[supportedTypes.length + 1]; for(int i = 0; i < filters.length - 1; i++) { filters[i] = new SwoopFileFilter(supportedTypes[i][0], supportedTypes[i][1]); } filters[filters.length - 1] = new SwoopFileFilter(); return filters; } public boolean accept(File f) { if (f.isDirectory()) return true; String ext = getExtension(f); if (ext != null) { for(int i = 0; i < extensions.length; i++) { if(extensions[i].equals(ext)) return true; } } return false; } public static String getExtension(File f) { String ext = null; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; } public String getDescription() { return description; } }