1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package tools.gsf.facade.assetapi;
18
19 import com.fatwire.assetapi.common.AssetAccessException;
20 import com.fatwire.assetapi.query.Condition;
21 import com.fatwire.assetapi.query.ConditionFactory;
22 import com.fatwire.assetapi.query.OpTypeEnum;
23 import com.fatwire.assetapi.query.Query;
24 import com.fatwire.assetapi.query.QueryProperties;
25 import com.fatwire.assetapi.query.SimpleQuery;
26 import com.fatwire.assetapi.query.SortOrder;
27
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Date;
31 import java.util.List;
32
33
34
35
36
37
38
39
40 public class QueryBuilder {
41
42 private static final String INITIALIZE_FIRST_MSG = "Condition not initialized. Please set the condition first with QueryBuilder.condition(...).";
43
44 private SimpleQuery query;
45
46 private QueryProperties props() {
47 return query.getProperties();
48 }
49
50 public QueryBuilder(String assetType, String subType) {
51 query = new SimpleQuery(assetType, subType);
52 }
53
54 public QueryBuilder(String assetType) {
55 query = new SimpleQuery(assetType, null);
56 }
57
58 public Query toQuery() {
59 return query;
60 }
61
62
63
64
65
66
67 public QueryBuilder attribute(String attributeName) {
68 List<String> old = new ArrayList<String>();
69 old.addAll(query.getAttributeNames());
70 old.add(attributeName);
71 query.setAttributes(old);
72 return this;
73 }
74
75
76
77
78
79
80 public QueryBuilder attributes(String... attributeNames) {
81 List<String> old = new ArrayList<String>();
82 old.addAll(query.getAttributeNames());
83 old.addAll(Arrays.asList(attributeNames));
84 query.setAttributes(old);
85 return this;
86
87 }
88
89
90
91
92
93
94 public QueryBuilder setSortOrder(List<SortOrder> sort) {
95 query.setSortOrder(sort);
96 return this;
97 }
98
99
100
101
102
103
104 public QueryBuilder setConfidence(float fConfidence) {
105 props().setConfidence(fConfidence);
106 return this;
107 }
108
109
110
111
112
113
114 public QueryBuilder setFixedList(boolean fixedList) {
115 props().setFixedList(fixedList);
116 return this;
117 }
118
119
120
121
122
123
124 public QueryBuilder setBasicSearch(boolean basicSearch) {
125 props().setIsBasicSearch(basicSearch);
126 return this;
127 }
128
129
130
131
132
133
134 public QueryBuilder setCaseSensitive(boolean caseSensitive) {
135 props().setIsCaseSensitive(caseSensitive);
136 return this;
137 }
138
139
140
141
142
143
144 public QueryBuilder setImmediateOnly(boolean immediateOnly) {
145 props().setIsImmediateOnly(immediateOnly);
146 return this;
147 }
148
149
150
151
152
153
154 public QueryBuilder setLowerEqual(boolean lowerEqual) {
155 props().setIsLowerEqual(lowerEqual);
156 return this;
157 }
158
159
160
161
162
163
164 public QueryBuilder setUpperEqual(boolean upperEqual) {
165 props().setIsUpperEqual(upperEqual);
166 return this;
167 }
168
169
170
171
172
173
174 public QueryBuilder setLoadDependency(int loadDependency) {
175 props().setLoadDependency(loadDependency);
176 return this;
177 }
178
179
180
181
182
183
184 public QueryBuilder setMaxAnswers(int maxAnswers) {
185 props().setMaxAnswers(maxAnswers);
186 return this;
187 }
188
189
190
191
192
193
194 public QueryBuilder setMaxRows(int maxRows) {
195 props().setMaxRows(maxRows);
196 return this;
197 }
198
199
200
201
202
203
204 public QueryBuilder setParser(String parser) {
205 props().setParser(parser);
206 return this;
207 }
208
209
210
211
212
213
214 public QueryBuilder setReadAll(boolean readAll) {
215 props().setReadAll(readAll);
216 return this;
217 }
218
219
220
221
222
223
224 public QueryBuilder setSite(long site) {
225 props().setSite(site);
226 return this;
227 }
228
229
230
231
232
233
234 public QueryBuilder setStartIndex(int startIndex) {
235 props().setStartIndex(startIndex);
236 return this;
237 }
238
239 public QueryBuilder condition(String condition) {
240
241 Condition cond = new ConditionParser().parse(condition);
242 query.setCondition(cond);
243 return this;
244 }
245
246 public QueryBuilder condition(String attName, OpTypeEnum opType, String value) {
247 Condition cond = ConditionFactory.createCondition(attName, opType, value);
248 query.setCondition(cond);
249 return this;
250 }
251
252 public QueryBuilder condition(String attName, OpTypeEnum opType, Date value) {
253 Condition cond = ConditionFactory.createCondition(attName, opType, value);
254 query.setCondition(cond);
255 return this;
256 }
257
258 public QueryBuilder condition(String attName, OpTypeEnum opType, Integer value) {
259 Condition cond = ConditionFactory.createCondition(attName, opType, value);
260 query.setCondition(cond);
261 return this;
262 }
263
264 public QueryBuilder condition(String attName, OpTypeEnum opType, Float value) {
265 Condition cond = ConditionFactory.createCondition(attName, opType, value);
266 query.setCondition(cond);
267 return this;
268 }
269
270 public QueryBuilder condition(String attName, OpTypeEnum opType, Long value) {
271 Condition cond = ConditionFactory.createCondition(attName, opType, value);
272 query.setCondition(cond);
273 return this;
274 }
275
276 public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value) {
277 Condition cond = ConditionFactory.createCondition(attName, opType, value);
278 query.setCondition(cond);
279 return this;
280 }
281
282 public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
283 Condition cond = ConditionFactory.createCondition(attName, opType, value);
284 query.setCondition(cond);
285 return this;
286 }
287
288 public QueryBuilder condition(String attName, OpTypeEnum opType, Date value, boolean caseSensiive,
289 boolean immediateOnly) {
290 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
291 query.setCondition(cond);
292 return this;
293 }
294
295 public QueryBuilder condition(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive,
296 boolean immediateOnly) {
297 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
298 query.setCondition(cond);
299 return this;
300 }
301
302 public QueryBuilder condition(String attName, OpTypeEnum opType, Float value, boolean caseSensiive,
303 boolean immediateOnly) {
304 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
305 query.setCondition(cond);
306 return this;
307 }
308
309 public QueryBuilder condition(String attName, OpTypeEnum opType, Long value, boolean caseSensiive,
310 boolean immediateOnly) {
311 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
312 query.setCondition(cond);
313 return this;
314 }
315
316 public QueryBuilder condition(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
317 boolean immediateOnly) {
318 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
319 query.setCondition(cond);
320 return this;
321 }
322
323 public QueryBuilder between(String attName, Object lower, Object upper) {
324 Condition cond;
325 try {
326 cond = new ConditionFactory().createBetweenCondition(attName, lower, upper);
327 } catch (AssetAccessException e) {
328 throw new RuntimeAssetAccessException(e);
329 }
330 query.setCondition(cond);
331 return this;
332 }
333
334 public QueryBuilder between(String attName, Object lower, Object upper, boolean lowerEqual, boolean upperEqual) {
335 Condition cond;
336 try {
337 cond = new ConditionFactory().createBetweenCondition(attName, lower, upper, lowerEqual, upperEqual);
338 } catch (AssetAccessException e) {
339 throw new RuntimeAssetAccessException(e);
340 }
341 query.setCondition(cond);
342 return this;
343 }
344
345 public QueryBuilder or(String attName, OpTypeEnum opType, String value) {
346 Condition cond = ConditionFactory.createCondition(attName, opType, value);
347 Condition qc = query.getCondition();
348 if (qc == null) {
349 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
350 }
351 query.setCondition(qc.or(cond));
352 return this;
353 }
354
355 public QueryBuilder or(String attName, OpTypeEnum opType, Date value) {
356 Condition cond = ConditionFactory.createCondition(attName, opType, value);
357 Condition qc = query.getCondition();
358 if (qc == null) {
359 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
360 }
361 query.setCondition(qc.or(cond));
362 return this;
363 }
364
365 public QueryBuilder or(String attName, OpTypeEnum opType, Integer value) {
366 Condition cond = ConditionFactory.createCondition(attName, opType, value);
367 Condition qc = query.getCondition();
368 if (qc == null) {
369 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
370 }
371 query.setCondition(qc.or(cond));
372 return this;
373 }
374
375 public QueryBuilder or(String attName, OpTypeEnum opType, Float value) {
376 Condition cond = ConditionFactory.createCondition(attName, opType, value);
377 Condition qc = query.getCondition();
378 if (qc == null) {
379 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
380 }
381 query.setCondition(qc.or(cond));
382 return this;
383 }
384
385 public QueryBuilder or(String attName, OpTypeEnum opType, Long value) {
386 Condition cond = ConditionFactory.createCondition(attName, opType, value);
387 Condition qc = query.getCondition();
388 if (qc == null) {
389 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
390 }
391 query.setCondition(qc.or(cond));
392 return this;
393 }
394
395 public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value) {
396 Condition cond = ConditionFactory.createCondition(attName, opType, value);
397 Condition qc = query.getCondition();
398 if (qc == null) {
399 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
400 }
401 query.setCondition(qc.or(cond));
402 return this;
403 }
404
405 public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
406 Condition cond = ConditionFactory.createCondition(attName, opType, value);
407 Condition qc = query.getCondition();
408 if (qc == null) {
409 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
410 }
411 query.setCondition(qc.or(cond));
412 return this;
413 }
414
415 public QueryBuilder or(String attName, OpTypeEnum opType, Date value, boolean caseSensiive, boolean immediateOnly) {
416 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
417 Condition qc = query.getCondition();
418 if (qc == null) {
419 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
420 }
421 query.setCondition(qc.or(cond));
422 return this;
423 }
424
425 public QueryBuilder or(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive, boolean immediateOnly) {
426 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
427 Condition qc = query.getCondition();
428 if (qc == null) {
429 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
430 }
431 query.setCondition(qc.or(cond));
432 return this;
433 }
434
435 public QueryBuilder or(String attName, OpTypeEnum opType, Float value, boolean caseSensiive, boolean immediateOnly) {
436 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
437 Condition qc = query.getCondition();
438 if (qc == null) {
439 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
440 }
441 query.setCondition(qc.or(cond));
442 return this;
443 }
444
445 public QueryBuilder or(String attName, OpTypeEnum opType, Long value, boolean caseSensiive, boolean immediateOnly) {
446 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
447 Condition qc = query.getCondition();
448 if (qc == null) {
449 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
450 }
451 query.setCondition(qc.or(cond));
452 return this;
453 }
454
455 public QueryBuilder or(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
456 boolean immediateOnly) {
457 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
458 Condition qc = query.getCondition();
459 if (qc == null) {
460 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
461 }
462 query.setCondition(qc.or(cond));
463 return this;
464 }
465
466 public QueryBuilder and(String attName, OpTypeEnum opType, String value) {
467 Condition cond = ConditionFactory.createCondition(attName, opType, value);
468 Condition qc = query.getCondition();
469 if (qc == null) {
470 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
471 }
472 query.setCondition(qc.and(cond));
473 return this;
474 }
475
476 public QueryBuilder and(String attName, OpTypeEnum opType, Date value) {
477 Condition cond = ConditionFactory.createCondition(attName, opType, value);
478 Condition qc = query.getCondition();
479 if (qc == null) {
480 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
481 }
482 query.setCondition(qc.and(cond));
483 return this;
484 }
485
486 public QueryBuilder and(String attName, OpTypeEnum opType, Integer value) {
487 Condition cond = ConditionFactory.createCondition(attName, opType, value);
488 Condition qc = query.getCondition();
489 if (qc == null) {
490 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
491 }
492 query.setCondition(qc.and(cond));
493 return this;
494 }
495
496 public QueryBuilder and(String attName, OpTypeEnum opType, Float value) {
497 Condition cond = ConditionFactory.createCondition(attName, opType, value);
498 Condition qc = query.getCondition();
499 if (qc == null) {
500 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
501 }
502 query.setCondition(qc.and(cond));
503 return this;
504 }
505
506 public QueryBuilder and(String attName, OpTypeEnum opType, Long value) {
507 Condition cond = ConditionFactory.createCondition(attName, opType, value);
508 Condition qc = query.getCondition();
509 if (qc == null) {
510 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
511 }
512 query.setCondition(qc.and(cond));
513 return this;
514 }
515
516 public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value) {
517 Condition cond = ConditionFactory.createCondition(attName, opType, value);
518 Condition qc = query.getCondition();
519 if (qc == null) {
520 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
521 }
522 query.setCondition(qc.and(cond));
523 return this;
524 }
525
526 public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value, boolean containsAll) {
527 Condition cond = ConditionFactory.createCondition(attName, opType, value);
528 Condition qc = query.getCondition();
529 if (qc == null) {
530 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
531 }
532 query.setCondition(qc.and(cond));
533 return this;
534 }
535
536 public QueryBuilder and(String attName, OpTypeEnum opType, Date value, boolean caseSensiive, boolean immediateOnly) {
537 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
538 Condition qc = query.getCondition();
539 if (qc == null) {
540 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
541 }
542 query.setCondition(qc.and(cond));
543 return this;
544 }
545
546 public QueryBuilder and(String attName, OpTypeEnum opType, Integer value, boolean caseSensiive,
547 boolean immediateOnly) {
548 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
549 Condition qc = query.getCondition();
550 if (qc == null) {
551 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
552 }
553 query.setCondition(qc.and(cond));
554 return this;
555 }
556
557 public QueryBuilder and(String attName, OpTypeEnum opType, Float value, boolean caseSensiive, boolean immediateOnly) {
558 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
559 Condition qc = query.getCondition();
560 if (qc == null) {
561 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
562 }
563 query.setCondition(qc.and(cond));
564 return this;
565 }
566
567 public QueryBuilder and(String attName, OpTypeEnum opType, Long value, boolean caseSensiive, boolean immediateOnly) {
568 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
569 Condition qc = query.getCondition();
570 if (qc == null) {
571 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
572 }
573 query.setCondition(qc.and(cond));
574 return this;
575 }
576
577 public QueryBuilder and(String attName, OpTypeEnum opType, List<String> value, boolean caseSensiive,
578 boolean immediateOnly) {
579 Condition cond = ConditionFactory.createCondition(attName, opType, value, caseSensiive, immediateOnly);
580 Condition qc = query.getCondition();
581 if (qc == null) {
582 throw new RuntimeAssetAccessException(INITIALIZE_FIRST_MSG);
583 }
584 query.setCondition(qc.and(cond));
585 return this;
586 }
587 }