1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.configuration.builders;
20
21 import java.util.Map;
22
23 import org.apache.rat.analysis.IHeaderMatcher;
24
25
26
27
28
29
30
31
32
33 public class MatcherRefBuilder extends AbstractBuilder {
34 private String referenceId;
35 private Map<String, IHeaderMatcher> matchers;
36
37
38
39
40
41
42 public MatcherRefBuilder setRefId(String refId) {
43 this.referenceId = refId;
44 return this;
45 }
46
47
48
49
50
51
52 public MatcherRefBuilder setMatchers(Map<String, IHeaderMatcher> matchers) {
53 this.matchers = matchers;
54 return this;
55 }
56
57 @Override
58 public IHeaderMatcher build() {
59 IHeaderMatcher result = matchers.get(referenceId);
60 return result != null ? result : new IHeaderMatcherProxy(referenceId, matchers);
61 }
62
63 @Override
64 public String toString() {
65 return "MathcerRefBuilder: "+referenceId;
66 }
67
68
69
70
71
72
73
74 private class IHeaderMatcherProxy implements IHeaderMatcher {
75 private final String proxyId;
76 private IHeaderMatcher wrapped;
77 private Map<String, IHeaderMatcher> matchers;
78
79 private IHeaderMatcherProxy(String proxyId, Map<String, IHeaderMatcher> matchers) {
80 this.proxyId = proxyId;
81 this.matchers = matchers;
82 }
83
84 private void checkProxy() {
85 if (wrapped == null) {
86 wrapped = matchers.get(proxyId);
87 if (wrapped == null) {
88 throw new IllegalStateException(String.format("%s is not a valid matcher id", proxyId));
89 }
90 matchers = null;
91 }
92 }
93
94 @Override
95 public String getId() {
96 checkProxy();
97 return wrapped.getId();
98 }
99
100 @Override
101 public void reset() {
102 checkProxy();
103 wrapped.reset();
104 }
105
106 @Override
107 public State matches(String line) {
108 checkProxy();
109 return wrapped.matches(line);
110 }
111
112 @Override
113 public State currentState() {
114 checkProxy();
115 return wrapped.currentState();
116 }
117
118 @Override
119 public State finalizeState() {
120 checkProxy();
121 return wrapped.finalizeState();
122 }
123 }
124
125 }