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 @Override
46 public void reset() {
47 foundKV = false;
48 }
49
50 @Override
51 public ReturnCode filterKeyValue(Cell v) {
52 if(foundKV) return ReturnCode.NEXT_ROW;
53 foundKV = true;
54 return ReturnCode.INCLUDE;
55 }
56
57
58
59 @Override
60 public Cell transformCell(Cell v) {
61 return v;
62 }
63
64 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
65 Preconditions.checkArgument(filterArguments.size() == 0,
66 "Expected 0 but got: %s", filterArguments.size());
67 return new FirstKeyOnlyFilter();
68 }
69
70
71
72
73 protected boolean hasFoundKV() {
74 return this.foundKV;
75 }
76
77
78
79
80
81 protected void setFoundKV(boolean value) {
82 this.foundKV = value;
83 }
84
85
86
87
88 @Override
89 public byte [] toByteArray() {
90 FilterProtos.FirstKeyOnlyFilter.Builder builder =
91 FilterProtos.FirstKeyOnlyFilter.newBuilder();
92 return builder.build().toByteArray();
93 }
94
95
96
97
98
99
100
101 public static FirstKeyOnlyFilter parseFrom(final byte [] pbBytes)
102 throws DeserializationException {
103
104 try {
105 FilterProtos.FirstKeyOnlyFilter.parseFrom(pbBytes);
106 } catch (InvalidProtocolBufferException e) {
107 throw new DeserializationException(e);
108 }
109
110 return new FirstKeyOnlyFilter();
111 }
112
113
114
115
116
117
118 @Override
119 boolean areSerializedFieldsEqual(Filter o) {
120 if (o == this) return true;
121 if (!(o instanceof FirstKeyOnlyFilter)) return false;
122
123 return true;
124 }
125 }