22
22
23
23
import java .net .MalformedURLException ;
24
24
import java .net .URL ;
25
+ import java .util .ArrayList ;
26
+ import java .util .List ;
25
27
import java .util .Objects ;
26
28
import java .util .function .Predicate ;
27
29
import java .util .regex .Pattern ;
30
32
import static com .microsoft .playwright .impl .Utils .toJsRegexFlags ;
31
33
32
34
class UrlMatcher {
33
- final Object rawSource ;
34
- private final Predicate <String > predicate ;
35
-
36
- private static Predicate <String > toPredicate (Pattern pattern ) {
37
- return s -> pattern .matcher (s ).find ();
38
- }
39
-
40
- static UrlMatcher any () {
41
- return new UrlMatcher ((Object ) null , null );
42
- }
35
+ private final URL baseURL ;
36
+ public final String glob ;
37
+ public final Pattern pattern ;
38
+ public final Predicate <String > predicate ;
43
39
44
40
static UrlMatcher forOneOf (URL baseUrl , Object object ) {
45
41
if (object == null ) {
46
- return UrlMatcher . any ( );
42
+ return new UrlMatcher ( null , null , null , null );
47
43
}
48
44
if (object instanceof String ) {
49
45
return new UrlMatcher (baseUrl , (String ) object );
@@ -68,50 +64,75 @@ static String resolveUrl(URL baseUrl, String spec) {
68
64
}
69
65
}
70
66
71
- UrlMatcher (URL base , String url ) {
72
- this (url , toPredicate ( Pattern . compile ( globToRegex ( resolveUrl ( base , url )))). or ( s -> url == null || url . equals ( s )) );
67
+ UrlMatcher (URL baseURL , String glob ) {
68
+ this (baseURL , glob , null , null );
73
69
}
74
70
75
71
UrlMatcher (Pattern pattern ) {
76
- this (pattern , toPredicate ( pattern ) );
72
+ this (null , null , pattern , null );
77
73
}
74
+
78
75
UrlMatcher (Predicate <String > predicate ) {
79
- this (predicate , predicate );
76
+ this (null , null , null , predicate );
80
77
}
81
78
82
- private UrlMatcher (Object rawSource , Predicate <String > predicate ) {
83
- this .rawSource = rawSource ;
79
+ private UrlMatcher (URL baseURL , String glob , Pattern pattern , Predicate <String > predicate ) {
80
+ this .baseURL = baseURL ;
81
+ this .glob = glob ;
82
+ this .pattern = pattern ;
84
83
this .predicate = predicate ;
85
84
}
86
85
87
86
boolean test (String value ) {
88
- return predicate == null || predicate .test (value );
87
+ if (pattern != null ) {
88
+ return pattern .matcher (value ).find ();
89
+ }
90
+ if (predicate != null ) {
91
+ return predicate .test (value );
92
+ }
93
+ if (glob != null ) {
94
+ return Pattern .compile (globToRegex (resolveUrl (baseURL , glob ))).matcher (value ).find ();
95
+ }
96
+ return true ;
89
97
}
90
98
91
99
@ Override
92
100
public boolean equals (Object o ) {
93
101
if (this == o ) return true ;
94
102
if (o == null || getClass () != o .getClass ()) return false ;
95
103
UrlMatcher that = (UrlMatcher ) o ;
96
- if (rawSource instanceof Pattern && that .rawSource instanceof Pattern ) {
97
- Pattern a = (Pattern ) rawSource ;
98
- Pattern b = (Pattern ) that .rawSource ;
99
- return a .pattern ().equals (b .pattern ()) && a .flags () == b .flags ();
104
+ if (pattern != null ) {
105
+ return that .pattern != null && pattern .pattern ().equals (that .pattern .pattern ()) && pattern .flags () == that .pattern .flags ();
106
+ }
107
+ if (predicate != null ) {
108
+ return predicate .equals (that .predicate );
109
+ }
110
+ if (glob != null ) {
111
+ return glob .equals (that .glob );
100
112
}
101
- return Objects . equals ( rawSource , that .rawSource ) ;
113
+ return that . pattern == null && that .predicate == null && that . glob == null ;
102
114
}
103
115
104
116
@ Override
105
117
public int hashCode () {
106
- return Objects .hash (rawSource );
118
+ if (pattern != null ) {
119
+ return pattern .hashCode ();
120
+ }
121
+ if (predicate != null ) {
122
+ return predicate .hashCode ();
123
+ }
124
+ if (glob != null ) {
125
+ return glob .hashCode ();
126
+ }
127
+ return 0 ;
107
128
}
108
129
109
130
@ Override
110
131
public String toString () {
111
- if (rawSource = = null )
112
- return "<any>" ;
113
- if (rawSource instanceof Predicate )
114
- return "matching predicate" ;
115
- return rawSource . toString ( );
132
+ if (pattern ! = null )
133
+ return String . format ( "<regex pattern= \" %s \" flags= \" %s \" >" , pattern . pattern (), toJsRegexFlags ( pattern )) ;
134
+ if (this . predicate != null )
135
+ return "< predicate> " ;
136
+ return String . format ( "<glob pattern= \" %s \" >" , glob );
116
137
}
117
138
}
0 commit comments