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.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.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(Cell v) {
62 if (doCompare(this.compareOp, this.comparator, v.getValueArray(),
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 @SuppressWarnings("rawtypes")
71 ArrayList arguments = CompareFilter.extractArguments(filterArguments);
72 CompareOp compareOp = (CompareOp)arguments.get(0);
73 ByteArrayComparable comparator = (ByteArrayComparable)arguments.get(1);
74 return new ValueFilter(compareOp, comparator);
75 }
76
77
78
79
80 public byte [] toByteArray() {
81 FilterProtos.ValueFilter.Builder builder =
82 FilterProtos.ValueFilter.newBuilder();
83 builder.setCompareFilter(super.convert());
84 return builder.build().toByteArray();
85 }
86
87
88
89
90
91
92
93 public static ValueFilter parseFrom(final byte [] pbBytes)
94 throws DeserializationException {
95 FilterProtos.ValueFilter proto;
96 try {
97 proto = FilterProtos.ValueFilter.parseFrom(pbBytes);
98 } catch (InvalidProtocolBufferException e) {
99 throw new DeserializationException(e);
100 }
101 final CompareOp valueCompareOp =
102 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
103 ByteArrayComparable valueComparator = null;
104 try {
105 if (proto.getCompareFilter().hasComparator()) {
106 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
107 }
108 } catch (IOException ioe) {
109 throw new DeserializationException(ioe);
110 }
111 return new ValueFilter(valueCompareOp,valueComparator);
112 }
113
114
115
116
117
118
119 boolean areSerializedFieldsEqual(Filter o) {
120 if (o == this) return true;
121 if (!(o instanceof ValueFilter)) return false;
122
123 return super.areSerializedFieldsEqual(o);
124 }
125 }