View Javadoc
1   package org.codehaus.plexus.util;
2   
3   import java.io.File;
4   import java.util.ArrayList;
5   import java.util.List;
6   
7   /**
8    * A list of patterns to be matched
9    *
10   * @author Kristian Rosenvold
11   */
12  public class MatchPatterns {
13      private final MatchPattern[] patterns;
14  
15      private MatchPatterns(MatchPattern[] patterns) {
16          this.patterns = patterns;
17      }
18  
19      /**
20       * Gets a list of enclosed MatchPattern sources.
21       * @return A list of enclosed MatchPattern sources.
22       */
23      public List<String> getSources() {
24          List<String> sources = new ArrayList<>();
25          for (MatchPattern pattern : patterns) {
26              sources.add(pattern.getSource());
27          }
28          return sources;
29      }
30  
31      /**
32       * <p>Checks these MatchPatterns against a specified string.</p>
33       *
34       * <p>Uses far less string tokenization than any of the alternatives.</p>
35       *
36       * @param name The name to look for
37       * @param isCaseSensitive If the comparison is case sensitive
38       * @return true if any of the supplied patterns match
39       */
40      public boolean matches(String name, boolean isCaseSensitive) {
41          String[] tokenized = MatchPattern.tokenizePathToString(name, File.separator);
42          return matches(name, tokenized, isCaseSensitive);
43      }
44  
45      public boolean matches(String name, String[] tokenizedName, boolean isCaseSensitive) {
46          char[][] tokenizedNameChar = new char[tokenizedName.length][];
47          for (int i = 0; i < tokenizedName.length; i++) {
48              tokenizedNameChar[i] = tokenizedName[i].toCharArray();
49          }
50          return matches(name, tokenizedNameChar, isCaseSensitive);
51      }
52  
53      public boolean matches(String name, char[][] tokenizedNameChar, boolean isCaseSensitive) {
54          for (MatchPattern pattern : patterns) {
55              if (pattern.matchPath(name, tokenizedNameChar, isCaseSensitive)) {
56                  return true;
57              }
58          }
59          return false;
60      }
61  
62      public boolean matchesPatternStart(String name, boolean isCaseSensitive) {
63          for (MatchPattern includesPattern : patterns) {
64              if (includesPattern.matchPatternStart(name, isCaseSensitive)) {
65                  return true;
66              }
67          }
68          return false;
69      }
70  
71      public static MatchPatterns from(String... sources) {
72          final int length = sources.length;
73          MatchPattern[] result = new MatchPattern[length];
74          for (int i = 0; i < length; i++) {
75              result[i] = MatchPattern.fromString(sources[i]);
76          }
77          return new MatchPatterns(result);
78      }
79  
80      public static MatchPatterns from(Iterable<String> strings) {
81          return new MatchPatterns(getMatchPatterns(strings));
82      }
83  
84      private static MatchPattern[] getMatchPatterns(Iterable<String> items) {
85          List<MatchPattern> result = new ArrayList<MatchPattern>();
86          for (String string : items) {
87              result.add(MatchPattern.fromString(string));
88          }
89          return result.toArray(new MatchPattern[0]);
90      }
91  }