View Javadoc
1   package org.codehaus.plexus.util;
2   
3   /*
4    * Copyright The Codehaus Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.io.File;
20  import java.util.Comparator;
21  
22  /**
23   * Scan a directory tree for files, with specified inclusions and exclusions.
24   */
25  public interface Scanner {
26  
27      /**
28       * Sets the list of include patterns to use. All '/' and '\' characters are replaced by
29       * <code>File.separatorChar</code>, so the separator used need not match <code>File.separatorChar</code>.
30       * <p>
31       * When a pattern ends with a '/' or '\', "**" is appended.
32       *
33       * @param includes A list of include patterns. May be <code>null</code>, indicating that all files should be
34       *            included. If a non-<code>null</code> list is given, all elements must be non-<code>null</code>.
35       */
36      void setIncludes(String[] includes);
37  
38      /**
39       * Sets the list of exclude patterns to use. All '/' and '\' characters are replaced by
40       * <code>File.separatorChar</code>, so the separator used need not match <code>File.separatorChar</code>.
41       * <p>
42       * When a pattern ends with a '/' or '\', "**" is appended.
43       *
44       * @param excludes A list of exclude patterns. May be <code>null</code>, indicating that no files should be
45       *            excluded. If a non-<code>null</code> list is given, all elements must be non-<code>null</code>.
46       */
47      void setExcludes(String[] excludes);
48  
49      /**
50       * Adds default exclusions to the current exclusions set.
51       */
52      void addDefaultExcludes();
53  
54      /**
55       * Scans the base directory for files which match at least one include pattern and don't match any exclude patterns.
56       *
57       * @exception IllegalStateException if the base directory was set incorrectly (i.e. if it is <code>null</code>,
58       *                doesn't exist, or isn't a directory).
59       */
60      void scan();
61  
62      /**
63       * Returns the names of the files which matched at least one of the include patterns and none of the exclude
64       * patterns. The names are relative to the base directory.
65       *
66       * @return the names of the files which matched at least one of the include patterns and none of the exclude
67       *         patterns.
68       */
69      String[] getIncludedFiles();
70  
71      /**
72       * Returns the names of the directories which matched at least one of the include patterns and none of the exclude
73       * patterns. The names are relative to the base directory.
74       *
75       * @return the names of the directories which matched at least one of the include patterns and none of the exclude
76       *         patterns.
77       */
78      String[] getIncludedDirectories();
79  
80      /**
81       * Returns the base directory to be scanned. This is the directory which is scanned recursively.
82       *
83       * @return the base directory to be scanned
84       */
85      File getBasedir();
86  
87      /**
88       * Use a filename comparator in each directory when scanning.
89       *
90       * @param filenameComparator the Comparator instance to use
91       * @since 3.3.0
92       */
93      void setFilenameComparator(Comparator<String> filenameComparator);
94  }