1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.filter;
21
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.KeyValue;
26 import org.apache.hadoop.hbase.exceptions.DeserializationException;
27 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
28 import org.apache.hadoop.hbase.protobuf.generated.FilterProtos;
29
30 import java.io.IOException;
31 import java.util.ArrayList;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 @InterfaceAudience.Public
47 @InterfaceStability.Stable
48 public class ValueFilter extends CompareFilter {
49
50
51
52
53
54
55 public ValueFilter(final CompareOp valueCompareOp,
56 final ByteArrayComparable valueComparator) {
57 super(valueCompareOp, valueComparator);
58 }
59
60 @Override
61 public ReturnCode filterKeyValue(KeyValue v) {
62 if (doCompare(this.compareOp, this.comparator, v.getBuffer(),
63 v.getValueOffset(), v.getValueLength())) {
64 return ReturnCode.SKIP;
65 }
66 return ReturnCode.INCLUDE;
67 }
68
69 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
70 ArrayList arguments = CompareFilter.extractArguments(filterArguments);
71 CompareOp compareOp = (CompareOp)arguments.get(0);
72 ByteArrayComparable comparator = (ByteArrayComparable)arguments.get(1);
73 return new ValueFilter(compareOp, comparator);
74 }
75
76
77
78
79 public byte [] toByteArray() {
80 FilterProtos.ValueFilter.Builder builder =
81 FilterProtos.ValueFilter.newBuilder();
82 builder.setCompareFilter(super.convert());
83 return builder.build().toByteArray();
84 }
85
86
87
88
89
90
91
92 public static ValueFilter parseFrom(final byte [] pbBytes)
93 throws DeserializationException {
94 FilterProtos.ValueFilter proto;
95 try {
96 proto = FilterProtos.ValueFilter.parseFrom(pbBytes);
97 } catch (InvalidProtocolBufferException e) {
98 throw new DeserializationException(e);
99 }
100 final CompareOp valueCompareOp =
101 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
102 ByteArrayComparable valueComparator = null;
103 try {
104 if (proto.getCompareFilter().hasComparator()) {
105 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
106 }
107 } catch (IOException ioe) {
108 throw new DeserializationException(ioe);
109 }
110 return new ValueFilter(valueCompareOp,valueComparator);
111 }
112
113
114
115
116
117
118 boolean areSerializedFieldsEqual(Filter o) {
119 if (o == this) return true;
120 if (!(o instanceof ValueFilter)) return false;
121
122 return super.areSerializedFieldsEqual(o);
123 }
124 }