/*
 * MyFileFilter.java. Este fichero esta basado en el
 * ejemplo ExampleFileFilter (demo/jfc/FileChooserDemo/ExampleFileFilter.java)
 * de Sun.
 */

package com.uvigo.tMaestro.SCOCreator.tool;

/**
 * Esta clase se utiliza para mostrar solo los ficheros de determinadas extensiones
 * en un JFileChooser
 * @author RA
 */
public class MyFileFilter extends javax.swing.filechooser.FileFilter {
    
    /**
     * Esta variable se utiliza para almacenar las diferentes extensiones
     * de ficheros que se presentaran en el JFileChooser
     */
    private java.util.HashSet<String> oFiltros= null;
    
    /**
     * Una descripcion para indicar el tipo de filtrado que se hara en el JFileChooser
     */
    private String sDescripcion = null;
    
    /**
     * Contructor de la clase
     * @version 0.1
     */
    public MyFileFilter() {
        this.oFiltros = new java.util.HashSet();
    }
    
    /**
     * La funcion devueve true si el fichero representado por oFile debe
     * ser presentado en el Panel del JFileChooser
     * @version 0.1
     * @param oFile El fichero que se desea comprobar
     * @return True si el fichero debe ser presentado
     */
    public boolean accept(java.io.File oFile) {
        if(oFile != null) {
            if(oFile.isDirectory()) {
                return true;
            }
            String sExtension = sGetExtension(oFile);
            if(sExtension != null && oFiltros.contains(sGetExtension(oFile))) {
                return true;
            };
        }
        return false;
    }
    
    /**
     * Devuelve la extension de un fichero
     * @version 0.1
     * @param oFile El fichero cuya extension se desea conocer
     * @return Una cadena que represenra la extension del fichero
     */
    private String sGetExtension(java.io.File oFile) {
        if(oFile != null) {
            String sNombre = oFile.getName();
            int i = sNombre.lastIndexOf('.');
            if(i>0 && i<sNombre.length()-1) {
                return sNombre.substring(i+1).toLowerCase();
            };
        }
        return null;
    }
    
    /**
     * Anade una extension al hashset de extensiones.
     * Las extensiones del hashset son las que se muestran
     * en el JFileChooser
     * @version 0.1
     * @param sExtension La extension a anadir al hashset
     */
    public void vAddExtension(String sExtension) {
        oFiltros.add(sExtension.toLowerCase());
    }
    
    
    /**
     * Devuelve la descripcion para ser presentada en el JFileChooser
     * @version 0.1
     * @return La descripcion a presentar en el JFileChooser
     */
    public String getDescription() {
        return sDescripcion;
    }
    
    /**
     * Establece la descripcion a mostrar en el cuadro de dialogo de elecci�n
     * de ficheros
     * @author RA
     * @param sDescripcion La descripcion que se presentara en el JFileChooser
     */
    public void vSetDescripcion(String sDescripcion) {
        this.sDescripcion = sDescripcion;
    }
    
}
