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