1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.filter;
20
21 import com.google.common.base.Preconditions;
22 import com.google.protobuf.InvalidProtocolBufferException;
23 import org.apache.hadoop.classification.InterfaceAudience;
24 import org.apache.hadoop.classification.InterfaceStability;
25 import org.apache.hadoop.hbase.exceptions.DeserializationException;
26 import org.apache.hadoop.hbase.protobuf.generated.FilterProtos;
27
28 import java.util.ArrayList;
29
30
31
32
33
34
35
36
37
38
39
40 @InterfaceAudience.Public
41 @InterfaceStability.Stable
42 public class PageFilter extends FilterBase {
43 private long pageSize = Long.MAX_VALUE;
44 private int rowsAccepted = 0;
45
46
47
48
49
50
51 public PageFilter(final long pageSize) {
52 Preconditions.checkArgument(pageSize >= 0, "must be positive %s", pageSize);
53 this.pageSize = pageSize;
54 }
55
56 public long getPageSize() {
57 return pageSize;
58 }
59
60 public boolean filterAllRemaining() {
61 return this.rowsAccepted >= this.pageSize;
62 }
63
64 public boolean filterRow() {
65 this.rowsAccepted++;
66 return this.rowsAccepted > this.pageSize;
67 }
68
69 public boolean hasFilterRow() {
70 return true;
71 }
72
73 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
74 Preconditions.checkArgument(filterArguments.size() == 1,
75 "Expected 1 but got: %s", filterArguments.size());
76 long pageSize = ParseFilter.convertByteArrayToLong(filterArguments.get(0));
77 return new PageFilter(pageSize);
78 }
79
80
81
82
83 public byte [] toByteArray() {
84 FilterProtos.PageFilter.Builder builder =
85 FilterProtos.PageFilter.newBuilder();
86 builder.setPageSize(this.pageSize);
87 return builder.build().toByteArray();
88 }
89
90
91
92
93
94
95
96 public static PageFilter parseFrom(final byte [] pbBytes)
97 throws DeserializationException {
98 FilterProtos.PageFilter proto;
99 try {
100 proto = FilterProtos.PageFilter.parseFrom(pbBytes);
101 } catch (InvalidProtocolBufferException e) {
102 throw new DeserializationException(e);
103 }
104 return new PageFilter(proto.getPageSize());
105 }
106
107
108
109
110
111
112 boolean areSerializedFieldsEqual(Filter o) {
113 if (o == this) return true;
114 if (!(o instanceof PageFilter)) return false;
115
116 PageFilter other = (PageFilter)o;
117 return this.getPageSize() == other.getPageSize();
118 }
119
120 @Override
121 public String toString() {
122 return this.getClass().getSimpleName() + " " + this.pageSize;
123 }
124 }