View Javadoc
1   /*
2    * Copyright 2008 FatWire Corporation. All Rights Reserved.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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   * Builder for a SimpleQuery object.
35   *
36   * @author Dolf Dijkstra
37   * @see SimpleQuery
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       * @param attributeName attribute name
64       * @return query builder object
65       * @see com.fatwire.assetapi.query.SimpleQuery#setAttributes(java.util.List)
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       * @param attributeNames list of attribute names
77       * @return query builder object
78       * @see com.fatwire.assetapi.query.SimpleQuery#setAttributes(java.util.List)
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       * @param sort SortOrder list
91       * @return query builder object
92       * @see com.fatwire.assetapi.query.SimpleQuery#setSortOrder(java.util.List)
93       */
94      public QueryBuilder setSortOrder(List<SortOrder> sort) {
95          query.setSortOrder(sort);
96          return this;
97      }
98  
99      /**
100      * @param fConfidence number/float representing confidence
101      * @return query builder object
102      * @see com.fatwire.assetapi.query.QueryProperties#setConfidence(float)
103      */
104     public QueryBuilder setConfidence(float fConfidence) {
105         props().setConfidence(fConfidence);
106         return this;
107     }
108 
109     /**
110      * @param fixedList boolean for fixed lList
111      * @return query builder object
112      * @see com.fatwire.assetapi.query.QueryProperties#setFixedList(boolean)
113      */
114     public QueryBuilder setFixedList(boolean fixedList) {
115         props().setFixedList(fixedList);
116         return this;
117     }
118 
119     /**
120      * @param basicSearch boolean for basic search
121      * @return query builder object
122      * @see com.fatwire.assetapi.query.QueryProperties#setIsBasicSearch(boolean)
123      */
124     public QueryBuilder setBasicSearch(boolean basicSearch) {
125         props().setIsBasicSearch(basicSearch);
126         return this;
127     }
128 
129     /**
130      * @param caseSensitive flag for case sensitivity
131      * @return query builder object
132      * @see com.fatwire.assetapi.query.QueryProperties#setIsCaseSensitive(boolean)
133      */
134     public QueryBuilder setCaseSensitive(boolean caseSensitive) {
135         props().setIsCaseSensitive(caseSensitive);
136         return this;
137     }
138 
139     /**
140      * @param immediateOnly flag for immediate only
141      * @return query builder object
142      * @see com.fatwire.assetapi.query.QueryProperties#setIsImmediateOnly(boolean)
143      */
144     public QueryBuilder setImmediateOnly(boolean immediateOnly) {
145         props().setIsImmediateOnly(immediateOnly);
146         return this;
147     }
148 
149     /**
150      * @param lowerEqual flag for lower equal
151      * @return this query builder object
152      * @see com.fatwire.assetapi.query.QueryProperties#setIsLowerEqual(boolean)
153      */
154     public QueryBuilder setLowerEqual(boolean lowerEqual) {
155         props().setIsLowerEqual(lowerEqual);
156         return this;
157     }
158 
159     /**
160      * @param upperEqual flag for upper equal
161      * @return this query builder object
162      * @see com.fatwire.assetapi.query.QueryProperties#setIsUpperEqual(boolean)
163      */
164     public QueryBuilder setUpperEqual(boolean upperEqual) {
165         props().setIsUpperEqual(upperEqual);
166         return this;
167     }
168 
169     /**
170      * @param loadDependency value for load dependency
171      * @return this query builder object
172      * @see com.fatwire.assetapi.query.QueryProperties#setLoadDependency(int)
173      */
174     public QueryBuilder setLoadDependency(int loadDependency) {
175         props().setLoadDependency(loadDependency);
176         return this;
177     }
178 
179     /**
180      * @param maxAnswers maximum answers
181      * @return this query builder object
182      * @see com.fatwire.assetapi.query.QueryProperties#setMaxAnswers(int)
183      */
184     public QueryBuilder setMaxAnswers(int maxAnswers) {
185         props().setMaxAnswers(maxAnswers);
186         return this;
187     }
188 
189     /**
190      * @param maxRows value for maximum rows
191      * @return this query builder object
192      * @see com.fatwire.assetapi.query.QueryProperties#setMaxRows(int)
193      */
194     public QueryBuilder setMaxRows(int maxRows) {
195         props().setMaxRows(maxRows);
196         return this;
197     }
198 
199     /**
200      * @param parser string value for parser
201      * @return this query builder object
202      * @see com.fatwire.assetapi.query.QueryProperties#setParser(java.lang.String)
203      */
204     public QueryBuilder setParser(String parser) {
205         props().setParser(parser);
206         return this;
207     }
208 
209     /**
210      * @param readAll flag for read all
211      * @return this query builder object
212      * @see com.fatwire.assetapi.query.QueryProperties#setReadAll(boolean)
213      */
214     public QueryBuilder setReadAll(boolean readAll) {
215         props().setReadAll(readAll);
216         return this;
217     }
218 
219     /**
220      * @param site site id number
221      * @return query builder object
222      * @see com.fatwire.assetapi.query.QueryProperties#setSite(java.lang.Long)
223      */
224     public QueryBuilder setSite(long site) {
225         props().setSite(site);
226         return this;
227     }
228 
229     /**
230      * @param startIndex start index
231      * @return query builder object
232      * @see com.fatwire.assetapi.query.QueryProperties#setStartIndex(int)
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 }