/*
* @(#)ExtensionFileFilter.java
*
* Copyright (c) 1996-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.gui.filechooser;
import java.io.*;
import java.util.*;
/**
* Filters files by their extensions.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class ExtensionFileFilter extends javax.swing.filechooser.FileFilter {
private String description;
private HashSet<String> extensions;
private String defaultExtension;
/**
* Creates a new instance.
* @param description A human readable description.
* @param extension The filename extension. This will be converted to
* lower-case by this method.
*/
public ExtensionFileFilter(String description, String extension) {
this.description = description;
this.extensions = new HashSet<String>();
extensions.add(extension.toLowerCase());
defaultExtension = extension;
}
/**
* Creates a new instance.
* @param description A human readable description.
* @param extensions The filename extensions. These will be converted to
* lower-case by this method.
*/
public ExtensionFileFilter(String description, String[] extensions) {
this.description = description;
this.extensions = new HashSet<String>();
String[] extlc = new String[extensions.length];
for (int i=0; i < extlc.length; i++) {
extlc[i] = extensions[i].toLowerCase();
}
this.extensions.addAll(Arrays.asList(extlc));
defaultExtension = extensions[0];
}
/**
* Returns an unmodifiable set with the filename extensions.
* All extensions are lower case.
*/
public Set<String> getExtensions() {
return Collections.unmodifiableSet(extensions);
}
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return true;
} else {
String name = pathname.getName();
int p = name.lastIndexOf('.');
if (p == -1 || p == name.length() - 1) {
return extensions.contains("");
} else {
return extensions.contains(name.substring(p + 1).toLowerCase());
}
}
}
/**
* Appends the extension to the filename, in case it is missing.
*/
public File makeAcceptable(File pathname) {
if (accept(pathname)) {
return pathname;
} else {
return new File(pathname.getPath()+'.'+defaultExtension);
}
}
@Override
public String getDescription() {
return description;
}
}