001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.jmeter.gui;
020:
021: import java.io.File;
022: import java.util.Arrays;
023:
024: /**
025: * A file filter which allows files to be filtered based on a list of allowed
026: * extensions.
027: *
028: * Optionally returns directories.
029: *
030: */
031: public class JMeterFileFilter extends
032: javax.swing.filechooser.FileFilter implements
033: java.io.FileFilter {
034: /** The list of extensions allowed by this filter. */
035: private final String[] exts;
036:
037: private final boolean allowDirs; // Should we allow directories?
038:
039: /**
040: * Create a new JMeter file filter which allows the specified extensions. If
041: * the array of extensions contains no elements, any file will be allowed.
042: *
043: * This constructor will also return all directories
044: *
045: * @param extensions
046: * non-null array of allowed file extensions
047: */
048: public JMeterFileFilter(String[] extensions) {
049: this (extensions, true);
050: }
051:
052: /**
053: * Create a new JMeter file filter which allows the specified extensions. If
054: * the array of extensions contains no elements, any file will be allowed.
055: *
056: * @param extensions non-null array of allowed file extensions
057: * @param allow should directories be returned ?
058: */
059: public JMeterFileFilter(String[] extensions, boolean allow) {
060: exts = extensions;
061: allowDirs = allow;
062: }
063:
064: /**
065: * Determine if the specified file is allowed by this filter. The file will
066: * be allowed if it is a directory, or if the end of the filename matches
067: * one of the extensions allowed by this filter. The filename is converted
068: * to lower-case before making the comparison.
069: *
070: * @param f
071: * the File being tested
072: *
073: * @return true if the file should be allowed, false otherwise
074: */
075: public boolean accept(File f) {
076: return (allowDirs && f.isDirectory())
077: || accept(f.getName().toLowerCase());
078: }
079:
080: /**
081: * Determine if the specified filename is allowed by this filter. The file
082: * will be allowed if the end of the filename matches one of the extensions
083: * allowed by this filter. The comparison is case-sensitive. If no
084: * extensions were provided for this filter, the file will always be
085: * allowed.
086: *
087: * @param filename
088: * the filename to test
089: * @return true if the file should be allowed, false otherwise
090: */
091: public boolean accept(String filename) {
092: if (exts.length == 0) {
093: return true;
094: }
095:
096: for (int i = 0; i < exts.length; i++) {
097: if (filename.endsWith(exts[i])) {
098: return true;
099: }
100: }
101:
102: return false;
103: }
104:
105: /**
106: * Get a description for this filter.
107: *
108: * @return a description for this filter
109: */
110: public String getDescription() {
111: return "JMeter " + Arrays.asList(exts).toString();
112: }
113: }
|