1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.protocol;
29
30 import java.util.LinkedHashMap;
31 import java.util.Map;
32 import java.util.Map.Entry;
33 import java.util.concurrent.locks.ReentrantLock;
34 import java.util.regex.Pattern;
35
36 import org.apache.hc.core5.annotation.Contract;
37 import org.apache.hc.core5.annotation.ThreadingBehavior;
38 import org.apache.hc.core5.util.Args;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 @Contract(threading = ThreadingBehavior.SAFE)
55 @Deprecated
56 public class UriRegexMatcher<T> implements LookupRegistry<T> {
57
58 private final Map<String, T> objectMap;
59 private final Map<String, Pattern> patternMap;
60
61 private final ReentrantLock lock;
62
63 public UriRegexMatcher() {
64 super();
65 this.objectMap = new LinkedHashMap<>();
66 this.patternMap = new LinkedHashMap<>();
67 this.lock = new ReentrantLock();
68 }
69
70
71
72
73
74
75
76
77
78 @Override
79 public void register(final String regex, final T obj) {
80 lock.lock();
81 try {
82 Args.notNull(regex, "URI request regex");
83 this.objectMap.put(regex, obj);
84 this.patternMap.put(regex, Pattern.compile(regex));
85 } finally {
86 lock.unlock();
87 }
88 }
89
90
91
92
93
94
95
96 @Override
97 public void unregister(final String regex) {
98 lock.lock();
99 try {
100 if (regex == null) {
101 return;
102 }
103 this.objectMap.remove(regex);
104 this.patternMap.remove(regex);
105 } finally {
106 lock.unlock();
107 }
108 }
109
110
111
112
113
114
115
116
117 @Override
118 public T lookup(final String path) {
119 lock.lock();
120 try {
121 Args.notNull(path, "Request path");
122
123 final T obj = this.objectMap.get(path);
124 if (obj == null) {
125
126 for (final Entry<String, Pattern> entry : this.patternMap.entrySet()) {
127 if (entry.getValue().matcher(path).matches()) {
128 return objectMap.get(entry.getKey());
129 }
130 }
131 }
132 return obj;
133 } finally {
134 lock.unlock();
135 }
136 }
137
138 @Override
139 public String toString() {
140 return this.objectMap.toString();
141 }
142
143 }