XTFRFileFilter.java
上传用户:xiekaiwei
上传日期:2015-07-04
资源大小:620k
文件大小:10k
源码类别:

Telnet客户端

开发平台:

Java

  1. package org.tn5250j.tools.filters;
  2. /**
  3.  * Title: tn5250J
  4.  * Copyright:   Copyright (c) 2001
  5.  * Company:
  6.  * @author  Kenneth J. Pouncey
  7.  * @version 0.1
  8.  *
  9.  * Description:
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2, or (at your option)
  14.  * any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this software; see the file COPYING.  If not, write to
  23.  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  24.  * Boston, MA 02111-1307 USA
  25.  *
  26.  */
  27. import java.io.File;
  28. import java.util.Hashtable;
  29. import java.util.Enumeration;
  30. import javax.swing.filechooser.*;
  31. /**
  32.  *
  33.  * This is taken from Sun's demo ExampleFileFiler.java
  34.  *
  35.  * A convenience implementation of FileFilter that filters out
  36.  * all files except for those type extensions that it knows about.
  37.  *
  38.  * Extensions are of the type ".foo", which is typically found on
  39.  * Windows and Unix boxes, but not on Macinthosh. Case is ignored.
  40.  *
  41.  * Example - create a new filter that filerts out all files
  42.  * but gif and jpg image files:
  43.  *
  44.  *     JFileChooser chooser = new JFileChooser();
  45.  *     XTFRFileFilter filter = new XTFRFileFilter(
  46.  *                   new String{"gif", "jpg"}, "JPEG & GIF Images")
  47.  *     chooser.addChoosableFileFilter(filter);
  48.  *     chooser.showOpenDialog(this);
  49.  *
  50.  * @version 1.10 05/17/01
  51.  * @author Jeff Dinkins
  52.  */
  53. public class XTFRFileFilter extends FileFilter {
  54.    private static String TYPE_UNKNOWN = "Type Unknown";
  55.    private static String HIDDEN_FILE = "Hidden File";
  56.    private Hashtable filters = null;
  57.    private String description = null;
  58.    private String fullDescription = null;
  59.    private boolean useExtensionsInDescription = true;
  60.    private String outputFilterClassName;
  61.    private Object o;
  62.    /**
  63.    * Creates a file filter. If no filters are added, then all
  64.    * files are accepted.
  65.    *
  66.    * @see #addExtension
  67.    */
  68.    public XTFRFileFilter() {
  69.       this.filters = new Hashtable();
  70.    }
  71.    /**
  72.    * Creates a file filter that accepts files with the given extension.
  73.    * Example: new XTFRFileFilter("jpg");
  74.    *
  75.    * @see #addExtension
  76.    */
  77.    public XTFRFileFilter(String extension) {
  78.       this(extension,null);
  79.    }
  80.    /**
  81.    * Creates a file filter that accepts the given file type.
  82.    * Example: new XTFRFileFilter("jpg", "JPEG Image Images");
  83.    *
  84.    * Note that the "." before the extension is not needed. If
  85.    * provided, it will be ignored.
  86.    *
  87.    * @see #addExtension
  88.    */
  89.    public XTFRFileFilter(String extension, String description) {
  90.       this();
  91.       if(extension!=null)
  92.          addExtension(extension);
  93.       if(description!=null)
  94.          setDescription(description);
  95.    }
  96.    /**
  97.    * Creates a file filter from the given string array.
  98.    * Example: new XTFRFileFilter(String {"gif", "jpg"});
  99.    *
  100.    * Note that the "." before the extension is not needed adn
  101.    * will be ignored.
  102.    *
  103.    * @see #addExtension
  104.    */
  105.    public XTFRFileFilter(String[] filters) {
  106.       this(filters, null);
  107.    }
  108.    /**
  109.    * Creates a file filter from the given string array and description.
  110.    * Example: new XTFRFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
  111.    *
  112.    * Note that the "." before the extension is not needed and will be ignored.
  113.    *
  114.    * @see #addExtension
  115.    */
  116.    public XTFRFileFilter(String[] filters, String description) {
  117.       this();
  118.       for (int i = 0; i < filters.length; i++) {
  119.        // add filters one by one
  120.        addExtension(filters[i]);
  121.       }
  122.       if(description!=null)
  123.          setDescription(description);
  124.    }
  125.    /**
  126.    * Return true if this file should be shown in the directory pane,
  127.    * false if it shouldn't.
  128.    *
  129.    * Files that begin with "." are ignored.
  130.    *
  131.    * @see #getExtension
  132.    * @see FileFilter#accepts
  133.    */
  134.    public boolean accept(File f) {
  135.       if(f != null) {
  136.          if(f.isDirectory()) {
  137.             return true;
  138.          }
  139.          String extension = getExtension(f);
  140.          if(extension != null && filters.get(getExtension(f)) != null) {
  141.             return true;
  142.          }
  143.       }
  144.       return false;
  145.    }
  146.    /**
  147.    * Return the extension portion of the file's name .
  148.    *
  149.    * @see #getExtension
  150.    * @see FileFilter#accept
  151.    */
  152.    public String getExtension(File f) {
  153.       if(f != null) {
  154.          return getExtension(f.getName());
  155.       }
  156.       return null;
  157.    }
  158.    public String getExtension(String filename) {
  159.       if(filename != null) {
  160.          int i = filename.lastIndexOf('.');
  161.          if(i>0 && i<filename.length()-1) {
  162.             return filename.substring(i+1).toLowerCase();
  163.          }
  164.       }
  165.       return null;
  166.    }
  167.   /**
  168.    * Adds a filetype "dot" extension to filter against.
  169.    *
  170.    * For example: the following code will create a filter that filters
  171.    * out all files except those that end in ".jpg" and ".tif":
  172.    *
  173.    *   XTFRFileFilter filter = new XTFRFileFilter();
  174.    *   filter.addExtension("jpg");
  175.    *   filter.addExtension("tif");
  176.    *
  177.    * Note that the "." before the extension is not needed and will be ignored.
  178.    */
  179.    public void addExtension(String extension) {
  180.       if(filters == null) {
  181.          filters = new Hashtable(5);
  182.       }
  183.       filters.put(extension.toLowerCase(), this);
  184.       fullDescription = null;
  185.    }
  186.    /**
  187.    * Returns the human readable description of this filter. For
  188.    * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
  189.    *
  190.    * @see setDescription
  191.    * @see setExtensionListInDescription
  192.    * @see isExtensionListInDescription
  193.    * @see FileFilter#getDescription
  194.    */
  195.    public String getDescription() {
  196.       if(fullDescription == null) {
  197.          if(description == null || isExtensionListInDescription()) {
  198.             fullDescription = description==null ? "(" : description + " (";
  199.             // build the description from the extension list
  200.             Enumeration extensions = filters.keys();
  201.             if(extensions != null) {
  202.                fullDescription += "." + (String) extensions.nextElement();
  203.                while (extensions.hasMoreElements()) {
  204.                   fullDescription += ", ." + (String) extensions.nextElement();
  205.                }
  206.             }
  207.             fullDescription += ")";
  208.             } else {
  209.                fullDescription = description;
  210.             }
  211.       }
  212.       return fullDescription;
  213.    }
  214.    /**
  215.    * Sets the human readable description of this filter. For
  216.    * example: filter.setDescription("Gif and JPG Images");
  217.    *
  218.    * @see setDescription
  219.    * @see setExtensionListInDescription
  220.    * @see isExtensionListInDescription
  221.    */
  222.    public void setDescription(String description) {
  223.       this.description = description;
  224.       fullDescription = null;
  225.    }
  226.    /**
  227.    * Determines whether the extension list (.jpg, .gif, etc) should
  228.    * show up in the human readable description.
  229.    *
  230.    * Only relevent if a description was provided in the constructor
  231.    * or using setDescription();
  232.    *
  233.    * @see getDescription
  234.    * @see setDescription
  235.    * @see isExtensionListInDescription
  236.    */
  237.    public void setExtensionListInDescription(boolean b) {
  238.       useExtensionsInDescription = b;
  239.       fullDescription = null;
  240.    }
  241.    /**
  242.    * Returns whether the extension list (.jpg, .gif, etc) should
  243.    * show up in the human readable description.
  244.    *
  245.    * Only relevent if a description was provided in the constructor
  246.    * or using setDescription();
  247.    *
  248.    * @see getDescription
  249.    * @see setDescription
  250.    * @see setExtensionListInDescription
  251.    */
  252.    public boolean isExtensionListInDescription() {
  253.       return useExtensionsInDescription;
  254.    }
  255.    /**
  256.     * Set the extension to be used for this type if one is not provided
  257.     *    This will append the first key of the filter contained in the list
  258.     */
  259.    public String setExtension(File f) {
  260.       return setExtension(f.getAbsolutePath());
  261.    }
  262.    public String setExtension(String f) {
  263.       if (f != null & getExtension(f) == null) {
  264.          Enumeration e = filters.keys();
  265.          String ext = (String)e.nextElement();
  266.          // just a little extra check for html documents
  267.          if (ext.equals("htm"))
  268.             ext = "html";
  269.          f += "." + ext.toLowerCase();
  270.       }
  271.       return f;
  272.    }
  273.    /**
  274.     *
  275.     */
  276.    public boolean isExtensionInList(String filename) {
  277.       String ext = null;
  278.       if (filename == null)
  279.          return false;
  280.       int i = filename.lastIndexOf('.');
  281.       if(i>0 && i<filename.length()-1) {
  282.          ext = filename.substring(i+1).toLowerCase();
  283.       }
  284.       if (ext == null)
  285.          return false;
  286.       else
  287.          // check if extension is within this filter list
  288.          return filters.containsKey(ext);
  289.    }
  290.    public void setOutputFilterName(String className) {
  291.       outputFilterClassName = className;
  292.    }
  293.    public OutputFilterInterface getOutputFilterInstance() {
  294.       try {
  295.          if (o == null) {
  296.             Class c = Class.forName(outputFilterClassName);
  297.             o = c.newInstance();
  298.          }
  299.       }
  300.       catch (Exception e) {
  301.          System.err.println(e);
  302.       }
  303.       return (OutputFilterInterface) o;
  304.    }
  305. }