ExtensionFileFilter.java
001 /*
002  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  Valentin Tablan, 22/May/2000
011  *
012  *  $Id: ExtensionFileFilter.java 17530 2014-03-04 15:57:43Z markagreenwood $
013  */
014 package gate.util;
015 
016 import java.io.File;
017 import java.io.FileFilter;
018 import java.util.ArrayList;
019 import java.util.List;
020 import java.util.Arrays;
021 
022 /**
023  * Implementation of a file name filter.
024  * This class is used by {@link javax.swing.JFileChooser} to filter the
025  * displayed files by their extension.
026  */
027 public class ExtensionFileFilter extends javax.swing.filechooser.FileFilter
028                                  implements FileFilter {
029 
030   /**
031    * Builds a new ExtensionFileFilter.
032    */
033   public ExtensionFileFilter() {
034   }
035 
036   /**
037    * Creates a FileNameExtensionFilter with the specified description and
038    * file name extensions. The returned FileNameExtensionFilter will accept
039    * all directories and any file with a file name extension contained
040    * in extensions.
041    @param description textual description for the filter, may be null
042    @param extensions the accepted file name extensions
043    */
044   public ExtensionFileFilter(String description, String... extensions) {
045     setDescription(description);
046     for (String extension : extensions) {
047       addExtension(extension);
048     }
049   }
050 
051   /**
052    * Checks a file for compliance with the requested extensions.
053    *
054    @param f file to test with this filter
055    */
056   @Override
057   public boolean accept(File f){
058     String name = f.getName();
059     if(f.isDirectory()) return true;
060 
061     for (String acceptedExtension : acceptedExtensions) {
062       if (name.endsWith(acceptedExtension)) return true;
063     }
064     return false;
065   }
066 
067   /**
068    * Returns the user-frielndly description for the files, e.g. "Text files"
069    *
070    */
071   @Override
072   public String getDescription() {
073     return (description == null? toString() : description;
074   }
075 
076   /**
077    * Adds a new extension to the list of accepted extensions.
078    *
079    @param extension file extension used to filter files
080    */
081   public void addExtension(String extension) {
082     acceptedExtensions.add(extension);
083   }
084 
085   /**
086    * Sets the user friendly description for the accepted files.
087    *
088    @param description description for this file filter
089    */
090   public void setDescription(String description) {
091     this.description = description;
092   }
093 
094   /**
095    @return the set of file name extensions files are tested against
096    */
097   public String[] getExtensions() {
098     return acceptedExtensions.toArray(new String[acceptedExtensions.size()]);
099   }
100 
101   /**
102    @return a string representation of this file filter.
103    */
104   @Override
105   public String toString() {
106     return "Filter for " + Arrays.toString(acceptedExtensions.toArray());
107   }
108 
109   /** The list of accepted file name extensions. */
110   private List<String> acceptedExtensions = new ArrayList<String>();
111 
112   /** The description of this file filter. */
113   private String description;
114 
115 // ExtensionFileFilter