/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License");  you may not use this file except in 
 * compliance with the License.  You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 *
 * The Original Code is Protege-2000.
 *
 * The Initial Developer of the Original Code is Stanford University. Portions
 * created by Stanford University are Copyright (C) 2007.  All Rights Reserved.
 *
 * Protege was developed by Stanford Medical Informatics
 * (http://www.smi.stanford.edu) at the Stanford University School of Medicine
 * with support from the National Library of Medicine, the National Science
 * Foundation, and the Defense Advanced Research Projects Agency.  Current
 * information about Protege can be obtained at http://protege.stanford.edu.
 *
 */

package edu.stanford.smi.protege.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.swing.filechooser.FileFilter;

/**
 * A file filter the works on a particular extension.
 *
 * @author    Ray Fergerson <fergerson@smi.stanford.edu>
 */
public class ExtensionFilter extends FileFilter {
    private List<String> _extensions;
    private String _description;

    public ExtensionFilter(Iterator<String> extensions, String description) {
        _extensions = new ArrayList<String>();
        while (extensions.hasNext()) {
            String extension = extensions.next();
            if (!extension.startsWith(".")) {
                extension = "." + extension;
            }
            _extensions.add(extension);
        }
        _description = description;
    }


    public ExtensionFilter(String extension, String description) {
        this(Collections.singleton(extension).iterator(), description);
    }


    public boolean accept(java.io.File file) {
        if (file.isDirectory()) {
            return true;
        }
        else {
            String lowerCaseName = file.getName().toLowerCase();
            Iterator<String> it = _extensions.iterator();
            while (it.hasNext()) {
                String s = it.next();
                if (lowerCaseName.endsWith(s)) {
                    return true;
                }
            }
            return false;
        }
    }


    public String getDescription() {
        String text;
        String es = "";
        Iterator<String> it = _extensions.iterator();
        while(it.hasNext()) {
            String s = (String) it.next();
            es += "*" + s;
            if(it.hasNext()) {
                es += ", ";
            }
        }
        if (_description == null) {
            text = es + " files ";
        }
        else {
            text = _description + " (" + es + ")";
        }
        return text;
    }
}
