1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.filter;
22
23 import org.apache.hadoop.hbase.KeyValue;
24
25 import java.io.DataInput;
26 import java.io.DataOutput;
27 import java.io.IOException;
28 import java.util.List;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class SkipFilter extends FilterBase {
49 private boolean filterRow = false;
50 private Filter filter;
51
52 public SkipFilter() {
53 super();
54 }
55
56 public SkipFilter(Filter filter) {
57 this.filter = filter;
58 }
59
60 public Filter getFilter() {
61 return filter;
62 }
63
64 public void reset() {
65 filter.reset();
66 filterRow = false;
67 }
68
69 private void changeFR(boolean value) {
70 filterRow = filterRow || value;
71 }
72
73 public ReturnCode filterKeyValue(KeyValue v) {
74 ReturnCode c = filter.filterKeyValue(v);
75 changeFR(c != ReturnCode.INCLUDE);
76 return c;
77 }
78
79 @Override
80 public KeyValue transform(KeyValue v) {
81 return filter.transform(v);
82 }
83
84 public boolean filterRow() {
85 return filterRow;
86 }
87
88 public void write(DataOutput out) throws IOException {
89 out.writeUTF(this.filter.getClass().getName());
90 this.filter.write(out);
91 }
92
93 public void readFields(DataInput in) throws IOException {
94 String className = in.readUTF();
95 try {
96 this.filter = (Filter)(Class.forName(className).newInstance());
97 this.filter.readFields(in);
98 } catch (InstantiationException e) {
99 throw new RuntimeException("Failed deserialize.", e);
100 } catch (IllegalAccessException e) {
101 throw new RuntimeException("Failed deserialize.", e);
102 } catch (ClassNotFoundException e) {
103 throw new RuntimeException("Failed deserialize.", e);
104 }
105 }
106
107 public boolean isFamilyEssential(byte[] name) {
108 return FilterBase.isFamilyEssential(this.filter, name);
109 }
110
111 @Override
112 public String toString() {
113 return this.getClass().getSimpleName() + " " + this.filter.toString();
114 }
115 }