Skip to content

Commit c099293

Browse files
committed
node parameter added to creators
1 parent 900c92c commit c099293

7 files changed

Lines changed: 261 additions & 45 deletions

File tree

src/main/java/de/alexgruen/query/DefaultCreator.java

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,19 @@ public abstract class DefaultCreator<T> {
3232

3333
/**
3434
* Query creator for != operator
35+
*
36+
* @param queryNode current query node
37+
* @param field input field
38+
* @param value input value
39+
* @return created query object
40+
*/
41+
public T ne(QueryNode queryNode, Field field, Value value) {
42+
return ne(field, value);
43+
}
44+
45+
/**
46+
* Query creator for != operator
47+
*
3548
* @param field input field
3649
* @param value input value
3750
* @return created query object
@@ -42,6 +55,7 @@ public T ne(Field field, Value value) {
4255

4356
/**
4457
* Query creator for == operator
58+
*
4559
* @param field input field
4660
* @param value input value
4761
* @return created query object
@@ -50,8 +64,34 @@ public T eq(Field field, Value value) {
5064
throw new QueryCompilerException("'eq' operator is not allowed");
5165
}
5266

67+
68+
/**
69+
* Query creator for == operator
70+
*
71+
* @param queryNode current query node
72+
* @param field input field
73+
* @param value input value
74+
* @return created query object
75+
*/
76+
public T eq(QueryNode queryNode, Field field, Value value) {
77+
return eq(field, value);
78+
}
79+
5380
/**
5481
* Query creator for >= operator
82+
*
83+
* @param queryNode current query node
84+
* @param field input field
85+
* @param value input value
86+
* @return created query object
87+
*/
88+
public T ge(QueryNode queryNode, Field field, Value value) {
89+
return ge(field, value);
90+
}
91+
92+
/**
93+
* Query creator for >= operator
94+
*
5595
* @param field input field
5696
* @param value input value
5797
* @return created query object
@@ -62,6 +102,19 @@ public T ge(Field field, Value value) {
62102

63103
/**
64104
* Query creator for > operator
105+
*
106+
* @param queryNode current query node
107+
* @param field input field
108+
* @param value input value
109+
* @return created query object
110+
*/
111+
public T gt(QueryNode queryNode, Field field, Value value) {
112+
return gt(field, value);
113+
}
114+
115+
/**
116+
* Query creator for > operator
117+
*
65118
* @param field input field
66119
* @param value input value
67120
* @return created query object
@@ -72,6 +125,19 @@ public T gt(Field field, Value value) {
72125

73126
/**
74127
* Query creator for < operator
128+
*
129+
* @param queryNode current query node
130+
* @param field input field
131+
* @param value input value
132+
* @return created query object
133+
*/
134+
public T lt(QueryNode queryNode, Field field, Value value) {
135+
return lt(field, value);
136+
}
137+
138+
/**
139+
* Query creator for < operator
140+
*
75141
* @param field input field
76142
* @param value input value
77143
* @return created query object
@@ -82,6 +148,20 @@ public T lt(Field field, Value value) {
82148

83149
/**
84150
* Query creator for <= operator
151+
*
152+
* @param queryNode current query node
153+
* @param field input field
154+
* @param value input value
155+
* @return created query object
156+
*/
157+
public T le(QueryNode queryNode, Field field, Value value) {
158+
return le(field, value);
159+
}
160+
161+
162+
/**
163+
* Query creator for <= operator
164+
*
85165
* @param field input field
86166
* @param value input value
87167
* @return created query object
@@ -92,6 +172,20 @@ public T le(Field field, Value value) {
92172

93173
/**
94174
* Query creator for the regex operator
175+
*
176+
* @param queryNode current query node
177+
* @param field input field
178+
* @param value input value
179+
* @return created query object
180+
*/
181+
public T regex(QueryNode queryNode, Field field, Value value) {
182+
return regex(field, value);
183+
}
184+
185+
186+
/**
187+
* Query creator for the regex operator
188+
*
95189
* @param field input field
96190
* @param value input value
97191
* @return created query object
@@ -102,6 +196,19 @@ public T regex(Field field, Value value) {
102196

103197
/**
104198
* Query creator for the text operator
199+
*
200+
* @param queryNode current query node
201+
* @param field input field
202+
* @param value input value
203+
* @return created query object
204+
*/
205+
public T text(QueryNode queryNode, Field field, Value value) {
206+
return text(field, value);
207+
}
208+
209+
/**
210+
* Query creator for the text operator
211+
*
105212
* @param field input field
106213
* @param value input value
107214
* @return created query object
@@ -112,6 +219,18 @@ public T text(Field field, Value value) {
112219

113220
/**
114221
* Logic creator for the negation of a query
222+
*
223+
* @param queryNode current query node
224+
* @param v input query
225+
* @return created query object
226+
*/
227+
public T not(QueryNode queryNode, T v) {
228+
return not(v);
229+
}
230+
231+
/**
232+
* Logic creator for the negation of a query
233+
*
115234
* @param v input query
116235
* @return created query object
117236
*/
@@ -121,6 +240,18 @@ public T not(T v) {
121240

122241
/**
123242
* Logic creator for the AND concatenation of queries
243+
*
244+
* @param queryNode current query node
245+
* @param v input queries
246+
* @return created query object
247+
*/
248+
public T and(QueryNode queryNode, T... v) {
249+
return and(v);
250+
}
251+
252+
/**
253+
* Logic creator for the AND concatenation of queries
254+
*
124255
* @param v input queries
125256
* @return created query object
126257
*/
@@ -130,6 +261,18 @@ public T and(T... v) {
130261

131262
/**
132263
* Logic creator for the OR concatenation of queries
264+
*
265+
* @param queryNode current query node
266+
* @param v input queries
267+
* @return created query object
268+
*/
269+
public T or(QueryNode queryNode, T... v) {
270+
return or(v);
271+
}
272+
273+
/**
274+
* Logic creator for the OR concatenation of queries
275+
*
133276
* @param v input queries
134277
* @return created query object
135278
*/
@@ -139,6 +282,18 @@ public T or(T... v) {
139282

140283
/**
141284
* Logic creator for the XOR concatenation of queries
285+
*
286+
* @param queryNode current query node
287+
* @param v input queries
288+
* @return created query object
289+
*/
290+
public T xor(QueryNode queryNode, T... v) {
291+
return xor(v);
292+
}
293+
294+
/**
295+
* Logic creator for the XOR concatenation of queries
296+
*
142297
* @param v input queries
143298
* @return created query object
144299
*/
@@ -148,6 +303,18 @@ public T xor(T... v) {
148303

149304
/**
150305
* Logic creator for the NOR concatenation of queries
306+
*
307+
* @param queryNode current query node
308+
* @param v input queries
309+
* @return created query object
310+
*/
311+
public T nor(QueryNode queryNode, T... v) {
312+
return nor(v);
313+
}
314+
315+
/**
316+
* Logic creator for the NOR concatenation of queries
317+
*
151318
* @param v input queries
152319
* @return created query object
153320
*/
@@ -157,6 +324,7 @@ public T nor(T... v) {
157324

158325
/**
159326
* Term creator for fulltext search queries
327+
*
160328
* @param value input value
161329
* @return created query object
162330
*/
@@ -166,6 +334,7 @@ public T fullSearch(Value value) {
166334

167335
/**
168336
* Term creator for empty queries (match all)
337+
*
169338
* @return created query object
170339
*/
171340
public T empty() {

src/main/java/de/alexgruen/query/QueryNode.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,14 @@
2626

2727
import de.alexgruen.query.term.Term;
2828

29-
import java.util.ArrayList;
30-
import java.util.Arrays;
31-
import java.util.List;
29+
import java.util.*;
3230

3331
public class QueryNode {
3432
private boolean negate;
3533
private LogicalOperator operator;
3634
private Term term;
3735
private List<QueryNode> children = new ArrayList<>();
38-
36+
private Map<String, Object> attributes = new HashMap<>();
3937

4038
public QueryNode() {
4139
}
@@ -71,6 +69,36 @@ public QueryNode(LogicalOperator operator, QueryNode... children) {
7169
this(false, operator, null, Arrays.asList(children));
7270
}
7371

72+
/**
73+
* Returns the attributes map
74+
* @return attributes map
75+
*/
76+
public Map<String, Object> getAttributes() {
77+
return attributes;
78+
}
79+
80+
/**
81+
* Returns an attribute value or null if no attribute with the specified name is found.
82+
* @param name attribute name
83+
* @return value
84+
*/
85+
public Object getAttribute(String name){
86+
return attributes.get(name);
87+
}
88+
89+
/**
90+
* Sets the value of an attribute. Returns the previously set value or null
91+
* @param name attribute name
92+
* @param value attribute value
93+
* @return previous value or null
94+
*/
95+
public Object setAttribute(String name, Object value){
96+
return attributes.put(name,value);
97+
}
98+
/**
99+
* Creates a new leaf node from a term
100+
* @param term term
101+
*/
74102

75103
/**
76104
* Returns <tt>true</tt> if this node is negated

src/main/java/de/alexgruen/query/compiler/QueryCompiler.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ private T compileTreeRec(QueryNode node) {
124124
if(context.getEmptyCreator() == null){
125125
throw new QueryCompilerException("no empty creator defined");
126126
}
127-
return context.getEmptyCreator().create(null,null);
127+
return context.getEmptyCreator().create(node,null,null);
128128
}
129129
//return if node contains term
130130
if (node.getTerm() != null) {
131-
T t = createTerm(node.getTerm());
131+
T t = createTerm(node, node.getTerm());
132132
//negate term if required
133133
if (node.isNegate()) {
134-
t = negate(t);
134+
t = negate(node, t);
135135
}
136136
return t;
137137
}
@@ -146,9 +146,9 @@ private T compileTreeRec(QueryNode node) {
146146

147147
//Create new term using child terms and logical operation
148148
LogicCreator<T> logicCreator = context.getLogicCreator(node.getOperator());
149-
T t = logicCreator.create(terms);
149+
T t = logicCreator.create(node, terms);
150150
if (node.isNegate()) {
151-
t = negate(t);
151+
t = negate(node, t);
152152
}
153153
return t;
154154
}
@@ -158,20 +158,20 @@ private T compileTreeRec(QueryNode node) {
158158
* @param t input object
159159
* @return negated object
160160
*/
161-
private T negate(T t) {
161+
private T negate(QueryNode node, T t) {
162162
T[] a = CompilerUtil.createArray(context.getCl(), 1);
163163
a[0] = t;
164-
return context.getLogicCreator(LogicalOperators.NOT).create(a);
164+
return context.getLogicCreator(LogicalOperators.NOT).create(node, a);
165165
}
166166

167167
/**
168168
* Create object of target class for a term using the creator ({@link TermCreator}) specified in the {@link QueryContext}
169169
* @param term input term
170170
* @return object of target class
171171
*/
172-
private T createTerm(Term term) {
172+
private T createTerm(QueryNode node, Term term) {
173173
TermCreator<T> creator = context.getTermCreator(term.getOperator());
174-
return creator.create(term.getField(), term.getValue());
174+
return creator.create(node, term.getField(), term.getValue());
175175
}
176176

177177
/**

0 commit comments

Comments
 (0)