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.Reader;
23 import java.util.regex.Matcher;
24 import java.util.regex.Pattern;
25
26
27
28
29
30
31
32
33
34
35
36 public class HeaderMatcher {
37
38 private final FilteringSequenceFactory factory;
39 private final HeaderBean[] headers;
40 private CharSequence read;
41 private int lines;
42
43 public HeaderMatcher(final CharFilter filter, final int capacity) {
44 this(filter, capacity, null);
45 }
46
47 public HeaderMatcher(final CharFilter filter, final int capacity, final HeaderBean[] headers) {
48 factory = new FilteringSequenceFactory(capacity, filter);
49 read = null;
50 this.headers = headers;
51 }
52
53 public void read(Reader reader) throws IOException {
54 final LineNumberReader lineNumberReader = new LineNumberReader(reader);
55 read = factory.filter(lineNumberReader);
56 if (lineNumberReader.read() == -1) {
57 lines = lineNumberReader.getLineNumber();
58 } else {
59 lines = -1;
60 }
61 if (headers != null) {
62 for (final HeaderBean headerBean : headers) {
63 if (headerBean != null) {
64 final Pattern headerPattern = headerBean.getHeaderPattern();
65 if (headerPattern != null) {
66 final boolean matches = matches(headerPattern);
67 headerBean.setMatch(matches);
68 }
69 }
70 }
71 }
72 }
73
74
75
76
77
78
79
80
81
82
83
84 public boolean matches(Pattern pattern) {
85 boolean result = false;
86 if (read != null) {
87 final Matcher matcher = pattern.matcher(read);
88 result = matcher.matches();
89 }
90 return result;
91 }
92
93
94
95
96
97
98 public int lines() {
99 return lines;
100 }
101 }