/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.gui; import java.io.File; import java.util.Arrays; /** * A file filter which allows files to be filtered based on a list of allowed * extensions. * * Optionally returns directories. * */ public class JMeterFileFilter extends javax.swing.filechooser.FileFilter implements java.io.FileFilter { /** The list of extensions allowed by this filter. */ private final String[] exts; private final boolean allowDirs; // Should we allow directories? /** * Create a new JMeter file filter which allows the specified extensions. If * the array of extensions contains no elements, any file will be allowed. * * This constructor will also return all directories * * @param extensions * non-null array of allowed file extensions */ public JMeterFileFilter(String[] extensions) { this(extensions,true); } /** * Create a new JMeter file filter which allows the specified extensions. If * the array of extensions contains no elements, any file will be allowed. * * @param extensions non-null array of allowed file extensions * @param allow should directories be returned ? */ public JMeterFileFilter(String[] extensions, boolean allow) { exts = extensions; allowDirs = allow; } /** * Determine if the specified file is allowed by this filter. The file will * be allowed if it is a directory, or if the end of the filename matches * one of the extensions allowed by this filter. The filename is converted * to lower-case before making the comparison. * * @param f * the File being tested * * @return true if the file should be allowed, false otherwise */ @Override public boolean accept(File f) { return (allowDirs && f.isDirectory()) || accept(f.getName().toLowerCase()); // TODO - why lower case? OK to use the default Locale? } /** * Determine if the specified filename is allowed by this filter. The file * will be allowed if the end of the filename matches one of the extensions * allowed by this filter. The comparison is case-sensitive. If no * extensions were provided for this filter, the file will always be * allowed. * * @param filename * the filename to test * @return true if the file should be allowed, false otherwise */ public boolean accept(String filename) { if (exts.length == 0) { return true; } for (String ext : exts) { if (filename.endsWith(ext)) { return true; } } return false; } /** * Get a description for this filter. * * @return a description for this filter */ @Override public String getDescription() { return "JMeter " + Arrays.asList(exts).toString(); } }