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