1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.utils.io;
20
21 import javax.annotation.Nonnull;
22
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.StringTokenizer;
27 import java.util.regex.Pattern;
28
29
30
31
32
33
34
35
36
37 @Deprecated
38 public class MatchPattern {
39 private final String source;
40
41 private final String regexPattern;
42
43 private final Pattern regexPatternRegex;
44
45 private final String separator;
46
47 private final String[] tokenized;
48
49 private MatchPattern(@Nonnull String source, @Nonnull String separator) {
50 regexPattern = SelectorUtils.isRegexPrefixedPattern(source)
51 ? source.substring(
52 SelectorUtils.REGEX_HANDLER_PREFIX.length(),
53 source.length() - SelectorUtils.PATTERN_HANDLER_SUFFIX.length())
54 : null;
55 regexPatternRegex = regexPattern != null ? Pattern.compile(regexPattern) : null;
56 this.source = SelectorUtils.isAntPrefixedPattern(source)
57 ? source.substring(
58 SelectorUtils.ANT_HANDLER_PREFIX.length(),
59 source.length() - SelectorUtils.PATTERN_HANDLER_SUFFIX.length())
60 : source;
61 this.separator = separator;
62 tokenized = tokenizePathToString(this.source, separator);
63 }
64
65
66
67
68
69
70 public boolean matchPath(String str, boolean isCaseSensitive) {
71 if (regexPattern != null) {
72 return regexPatternRegex.matcher(str).matches();
73 } else {
74 return SelectorUtils.matchAntPathPattern(this, str, separator, isCaseSensitive);
75 }
76 }
77
78 boolean matchPath(String str, String[] strDirs, boolean isCaseSensitive) {
79 if (regexPattern != null) {
80 return regexPatternRegex.matcher(str).matches();
81 } else {
82 return SelectorUtils.matchAntPathPattern(getTokenizedPathString(), strDirs, isCaseSensitive);
83 }
84 }
85
86
87
88
89
90
91 public boolean matchPatternStart(@Nonnull String str, boolean isCaseSensitive) {
92 if (regexPattern != null) {
93
94
95 return true;
96 } else {
97 String altStr = source.replace('\\', '/');
98
99 return SelectorUtils.matchAntPathPatternStart(this, str, File.separator, isCaseSensitive)
100 || SelectorUtils.matchAntPathPatternStart(this, altStr, "/", isCaseSensitive);
101 }
102 }
103
104
105
106
107 public String[] getTokenizedPathString() {
108 return tokenized;
109 }
110
111
112
113
114
115 public boolean startsWith(String string) {
116 return source.startsWith(string);
117 }
118
119 static String[] tokenizePathToString(@Nonnull String path, @Nonnull String separator) {
120 List<String> ret = new ArrayList<String>();
121 StringTokenizer st = new StringTokenizer(path, separator);
122 while (st.hasMoreTokens()) {
123 ret.add(st.nextToken());
124 }
125 return ret.toArray(new String[ret.size()]);
126 }
127
128
129
130
131
132 public static MatchPattern fromString(String source) {
133 return new MatchPattern(source, File.separator);
134 }
135 }