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.nio.CharBuffer;
24
25 class FilteringSequenceFactory {
26
27 private static final int BUFFER_CAPACITY = 5000;
28
29 private final CharBuffer buffer;
30 private final CharFilter filter;
31
32 public FilteringSequenceFactory(final CharFilter filter) {
33 this(BUFFER_CAPACITY, filter);
34 }
35
36 public FilteringSequenceFactory(final int capacity, final CharFilter filter) {
37 this.buffer = CharBuffer.allocate(capacity);
38 this.filter = filter;
39 }
40
41 public CharSequence filter(Reader reader) throws IOException {
42 return filter(new LineNumberReader(reader));
43 }
44
45 public CharSequence filter(LineNumberReader reader) throws IOException {
46 buffer.clear();
47 boolean eof = false;
48 while(!eof) {
49 final int next = reader.read();
50 if (next == -1 || !buffer.hasRemaining()) {
51 eof = true;
52 } else {
53 final char character = (char) next;
54 if (!filter.isFilteredOut(character))
55 {
56 buffer.put(character);
57 }
58 }
59 }
60 buffer.limit(buffer.position()).rewind();
61 return buffer;
62 }
63 }