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 FamilyFilter extends CompareFilter {
49
50
51
52
53
54
55
56 public FamilyFilter(final CompareOp familyCompareOp,
57 final ByteArrayComparable familyComparator) {
58 super(familyCompareOp, familyComparator);
59 }
60
61 @Override
62 public ReturnCode filterKeyValue(KeyValue v) {
63 int familyLength = v.getFamilyLength();
64 if (familyLength > 0) {
65 if (doCompare(this.compareOp, this.comparator, v.getBuffer(),
66 v.getFamilyOffset(), familyLength)) {
67 return ReturnCode.SKIP;
68 }
69 }
70 return ReturnCode.INCLUDE;
71 }
72
73 public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) {
74 ArrayList arguments = CompareFilter.extractArguments(filterArguments);
75 CompareOp compareOp = (CompareOp)arguments.get(0);
76 ByteArrayComparable comparator = (ByteArrayComparable)arguments.get(1);
77 return new FamilyFilter(compareOp, comparator);
78 }
79
80
81
82
83 public byte [] toByteArray() {
84 FilterProtos.FamilyFilter.Builder builder =
85 FilterProtos.FamilyFilter.newBuilder();
86 builder.setCompareFilter(super.convert());
87 return builder.build().toByteArray();
88 }
89
90
91
92
93
94
95
96 public static FamilyFilter parseFrom(final byte [] pbBytes)
97 throws DeserializationException {
98 FilterProtos.FamilyFilter proto;
99 try {
100 proto = FilterProtos.FamilyFilter.parseFrom(pbBytes);
101 } catch (InvalidProtocolBufferException e) {
102 throw new DeserializationException(e);
103 }
104 final CompareOp valueCompareOp =
105 CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());
106 ByteArrayComparable valueComparator = null;
107 try {
108 if (proto.getCompareFilter().hasComparator()) {
109 valueComparator = ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());
110 }
111 } catch (IOException ioe) {
112 throw new DeserializationException(ioe);
113 }
114 return new FamilyFilter(valueCompareOp,valueComparator);
115 }
116
117
118
119
120
121
122 boolean areSerializedFieldsEqual(Filter o) {
123 if (o == this) return true;
124 if (!(o instanceof FamilyFilter)) return false;
125
126 FamilyFilter other = (FamilyFilter)o;
127 return super.areSerializedFieldsEqual(other);
128 }
129 }