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 java.util.ArrayList;
22
23 import org.apache.hadoop.hbase.classification.InterfaceAudience;
24 import org.apache.hadoop.hbase.classification.InterfaceStability;
25 import org.apache.hadoop.hbase.Cell;
26 import org.apache.hadoop.hbase.exceptions.DeserializationException;
27 import org.apache.hadoop.hbase.protobuf.generated.FilterProtos;
28
29 import com.google.common.base.Preconditions;
30 import com.google.protobuf.InvalidProtocolBufferException;
31
32
33
34
35
36
37 @InterfaceAudience.Public
38 @InterfaceStability.Stable
39 public class FirstKeyOnlyFilter extends FilterBase {
40 private boolean foundKV = false;
41
42 public FirstKeyOnlyFilter() {
43 }
44
45 public void reset() {
46 foundKV = false;
47 }
48
49 @Override
50 public ReturnCode filterKeyValue(Cell v) {
51 if(foundKV) return ReturnCode.NEXT_ROW;
52 foundKV = true;
53 return ReturnCode.INCLUDE;
54 }
55
56 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
57 Preconditions.checkArgument(filterArguments.size() == 0,
58 "Expected 0 but got: %s", filterArguments.size());
59 return new FirstKeyOnlyFilter();
60 }
61
62
63
64
65 protected boolean hasFoundKV() {
66 return this.foundKV;
67 }
68
69
70
71
72
73 protected void setFoundKV(boolean value) {
74 this.foundKV = value;
75 }
76
77
78
79
80 public byte [] toByteArray() {
81 FilterProtos.FirstKeyOnlyFilter.Builder builder =
82 FilterProtos.FirstKeyOnlyFilter.newBuilder();
83 return builder.build().toByteArray();
84 }
85
86
87
88
89
90
91
92 public static FirstKeyOnlyFilter parseFrom(final byte [] pbBytes)
93 throws DeserializationException {
94
95 try {
96 FilterProtos.FirstKeyOnlyFilter.parseFrom(pbBytes);
97 } catch (InvalidProtocolBufferException e) {
98 throw new DeserializationException(e);
99 }
100
101 return new FirstKeyOnlyFilter();
102 }
103
104
105
106
107
108
109 boolean areSerializedFieldsEqual(Filter o) {
110 if (o == this) return true;
111 if (!(o instanceof FirstKeyOnlyFilter)) return false;
112
113 return true;
114 }
115 }