1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.yaoql.client;
22
23 import org.apache.expreval.client.NullColumnValueException;
24 import org.apache.expreval.client.ResultMissingColumnException;
25 import org.apache.expreval.expr.ExpressionTree;
26 import org.apache.hadoop.hbase.client.Result;
27 import org.apache.hadoop.hbase.hbql.client.HBqlException;
28 import org.apache.hadoop.hbase.hbql.impl.ResultSetIterator;
29 import org.apache.hadoop.hbase.hbql.util.NullIterator;
30 import org.apache.yaoql.impl.ObjectQueryImpl;
31
32 import java.util.Collection;
33 import java.util.Iterator;
34
35 public class ObjectResultSet<T> implements Iterable<T> {
36
37 private final ObjectQueryImpl<T> objectQuery;
38 private final Collection<T> objects;
39 private final ExpressionTree expressionTree;
40
41 private Iterator<T> objectIter = null;
42
43 public ObjectResultSet(final ObjectQueryImpl<T> objectQuery, final Collection<T> objects) throws HBqlException {
44 this.objectQuery = objectQuery;
45 this.objects = objects;
46
47
48
49 this.expressionTree = getObjectQuery().getExpressionTree(this.getObjects());
50 }
51
52 private ObjectQueryImpl<T> getObjectQuery() {
53 return this.objectQuery;
54 }
55
56 private Collection<T> getObjects() {
57 return this.objects;
58 }
59
60 private Iterator<T> getObjectIter() {
61 return this.objectIter;
62 }
63
64 private void setObjectIter(final Iterator<T> objectIter) {
65 this.objectIter = objectIter;
66 }
67
68 private ExpressionTree getExpressionTree() {
69 return this.expressionTree;
70 }
71
72 public Iterator<T> iterator() {
73
74 try {
75 return new ResultSetIterator<T, Object>(null) {
76
77 protected T fetchNextObject() throws HBqlException {
78
79 if (getObjectIter() == null)
80 setObjectIter(getObjects().iterator());
81
82 while (getObjectIter().hasNext()) {
83 final T val = getObjectIter().next();
84 try {
85 if (getExpressionTree() == null || getExpressionTree().evaluate(null, val))
86 return getObjectQuery().callOnEachObject(val);
87 }
88 catch (ResultMissingColumnException e) {
89
90 }
91 catch (NullColumnValueException e) {
92
93 }
94 }
95
96 this.markIteratorComplete();
97 return null;
98 }
99
100 protected void setNextObject(final T nextObject, final boolean fromExceptionCatch) {
101 this.setNextObject(nextObject);
102 }
103
104 protected boolean moreResultsPending() {
105 return false;
106 }
107
108 protected Iterator<Result> getNextResultIterator() throws HBqlException {
109 return null;
110 }
111
112 protected void iteratorCompleteAction() {
113 getObjectQuery().callOnQueryComplete();
114 }
115 };
116 }
117 catch (HBqlException e) {
118 e.printStackTrace();
119 return new NullIterator<T>();
120 }
121 }
122 }