package org.emdev.common.filesystem; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.emdev.utils.LengthUtils; public class FilePrefixFilter implements FileFilter, FilenameFilter { private final Set<String> prefixes; public FilePrefixFilter(final Set<String> prefixes) { this.prefixes = prefixes; } public FilePrefixFilter(final String... prefixes) { this.prefixes = new HashSet<String>(Arrays.asList(prefixes)); } @Override public final boolean accept(final File file) { return acceptImpl(file.getName().toLowerCase()); } @Override public boolean accept(final File dir, final String name) { return acceptImpl(name.toLowerCase()); } public boolean accept(final String name) { if (LengthUtils.isEmpty(name)) { return false; } if (!new File(name).exists()) { return false; } return acceptImpl(name.toLowerCase()); } protected boolean acceptImpl(final String name) { boolean res = false; for (final String prefix : prefixes) { res |= acceptImpl(prefix, name); } return res; } protected boolean acceptImpl(final String prefix, final String name) { return name != null && name.startsWith(prefix); } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj instanceof FilePrefixFilter) { final FilePrefixFilter that = (FilePrefixFilter) obj; return this.prefixes.equals(that.prefixes); } return false; } @Override public int hashCode() { return this.prefixes.hashCode(); } @Override public String toString() { return this.getClass().getSimpleName() + prefixes; } }