1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.header;
20
21 import java.io.IOException;
22 import java.io.LineNumberReader;
23 import java.io.Reader;
24 import java.util.regex.Matcher;
25 import java.util.regex.Pattern;
26
27
28
29
30
31
32
33
34
35
36
37 public class HeaderMatcher {
38
39 private final FilteringSequenceFactory factory;
40 private final HeaderBean[] headers;
41 private CharSequence read;
42 private int lines;
43
44 public HeaderMatcher(final CharFilter filter, final int capacity) {
45 this(filter, capacity, null);
46 }
47
48 public HeaderMatcher(final CharFilter filter, final int capacity, final HeaderBean[] headers) {
49 factory = new FilteringSequenceFactory(capacity, filter);
50 read = null;
51 this.headers = headers;
52 }
53
54 public void read(Reader reader) throws IOException {
55 final LineNumberReader lineNumberReader = new LineNumberReader(reader);
56 read = factory.filter(lineNumberReader);
57 if (lineNumberReader.read() == -1) {
58 lines = lineNumberReader.getLineNumber();
59 } else {
60 lines = -1;
61 }
62 if (headers != null) {
63 final int length = headers.length;
64 for (int i=0;i<length;i++) {
65 final HeaderBean headerBean = headers[i];
66 if (headerBean != null) {
67 final Pattern headerPattern = headerBean.getHeaderPattern();
68 if (headerPattern != null) {
69 final boolean matches = matches(headerPattern);
70 headerBean.setMatch(matches);
71 }
72 }
73 }
74 }
75 }
76
77
78
79
80
81
82
83
84
85
86
87 public boolean matches(Pattern pattern) {
88 boolean result = false;
89 if (read != null) {
90 final Matcher matcher = pattern.matcher(read);
91 result = matcher.matches();
92 }
93 return result;
94 }
95
96
97
98
99
100
101 public int lines() {
102 return lines;
103 }
104 }