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       * @since 3.6.0
23       */
24      public List<String> getSources() {
25          List<String> sources = new ArrayList<>();
26          for (MatchPattern pattern : patterns) {
27              sources.add(pattern.getSource());
28          }
29          return sources;
30      }
31  
32      /**
33       * <p>Checks these MatchPatterns against a specified string.</p>
34       *
35       * <p>Uses far less string tokenization than any of the alternatives.</p>
36       *
37       * @param name The name to look for
38       * @param isCaseSensitive If the comparison is case sensitive
39       * @return true if any of the supplied patterns match
40       */
41      public boolean matches(String name, boolean isCaseSensitive) {
42          String[] tokenized = MatchPattern.tokenizePathToString(name, File.separator);
43          return matches(name, tokenized, isCaseSensitive);
44      }
45  
46      public boolean matches(String name, String[] tokenizedName, boolean isCaseSensitive) {
47          char[][] tokenizedNameChar = new char[tokenizedName.length][];
48          for (int i = 0; i < tokenizedName.length; i++) {
49              tokenizedNameChar[i] = tokenizedName[i].toCharArray();
50          }
51          return matches(name, tokenizedNameChar, isCaseSensitive);
52      }
53  
54      public boolean matches(String name, char[][] tokenizedNameChar, boolean isCaseSensitive) {
55          for (MatchPattern pattern : patterns) {
56              if (pattern.matchPath(name, tokenizedNameChar, isCaseSensitive)) {
57                  return true;
58              }
59          }
60          return false;
61      }
62  
63      public boolean matchesPatternStart(String name, boolean isCaseSensitive) {
64          for (MatchPattern includesPattern : patterns) {
65              if (includesPattern.matchPatternStart(name, isCaseSensitive)) {
66                  return true;
67              }
68          }
69          return false;
70      }
71  
72      public static MatchPatterns from(String... sources) {
73          final int length = sources.length;
74          MatchPattern[] result = new MatchPattern[length];
75          for (int i = 0; i < length; i++) {
76              result[i] = MatchPattern.fromString(sources[i]);
77          }
78          return new MatchPatterns(result);
79      }
80  
81      public static MatchPatterns from(Iterable<String> strings) {
82          return new MatchPatterns(getMatchPatterns(strings));
83      }
84  
85      private static MatchPattern[] getMatchPatterns(Iterable<String> items) {
86          List<MatchPattern> result = new ArrayList<MatchPattern>();
87          for (String string : items) {
88              result.add(MatchPattern.fromString(string));
89          }
90          return result.toArray(new MatchPattern[0]);
91      }
92  }