View Javadoc
1   /*
2    * Copyright 2012-2021 CodeLibs Project and the Others.
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,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.codelibs.fess.es.user.allcommon;
17  
18  import org.codelibs.fesen.action.search.SearchRequestBuilder;
19  import org.codelibs.fesen.core.TimeValue;
20  import org.dbflute.cbean.ConditionBean;
21  import org.dbflute.cbean.chelper.HpCBPurpose;
22  import org.dbflute.cbean.chelper.HpColumnSpHandler;
23  import org.dbflute.cbean.coption.CursorSelectOption;
24  import org.dbflute.cbean.coption.ScalarSelectOption;
25  import org.dbflute.cbean.coption.StatementConfigCall;
26  import org.dbflute.cbean.dream.SpecifiedColumn;
27  import org.dbflute.cbean.exception.ConditionBeanExceptionThrower;
28  import org.dbflute.cbean.ordering.OrderByBean;
29  import org.dbflute.cbean.paging.PagingBean;
30  import org.dbflute.cbean.paging.PagingInvoker;
31  import org.dbflute.cbean.scoping.AndQuery;
32  import org.dbflute.cbean.scoping.ModeQuery;
33  import org.dbflute.cbean.scoping.OrQuery;
34  import org.dbflute.cbean.scoping.UnionQuery;
35  import org.dbflute.cbean.sqlclause.SqlClause;
36  import org.dbflute.cbean.sqlclause.orderby.OrderByClause;
37  import org.dbflute.dbmeta.DBMeta;
38  import org.dbflute.dbmeta.accessory.DerivedTypeHandler;
39  import org.dbflute.jdbc.StatementConfig;
40  import org.dbflute.system.DBFluteSystem;
41  import org.dbflute.twowaysql.style.BoundDateDisplayStyle;
42  
43  /**
44   * @author ESFlute (using FreeGen)
45   */
46  public abstract class EsAbstractConditionBean implements ConditionBean {
47  
48      // ===================================================================================
49      //                                                                           Attribute
50      //                                                                           =========
51      protected final SqlClause _sqlClause = new EsSqlClause(asTableDbName());
52      protected int _safetyMaxResultSize;
53      protected SearchRequestParams _searchRequestParams = new SearchRequestParams();
54      protected String _preference;
55  
56      // ===================================================================================
57      //                                                                             Builder
58      //                                                                             =======
59      public abstract SearchRequestBuilder build(SearchRequestBuilder builder);
60  
61      // ===================================================================================
62      //                                                                              Paging
63      //                                                                              ======
64      @Override
65      public boolean isPaging() {
66          return false;
67      }
68  
69      @Override
70      public boolean canPagingCountLater() {
71          return false;
72      }
73  
74      @Override
75      public boolean canPagingReSelect() {
76          return true;
77      }
78  
79      @Override
80      public void paging(int pageSize, int pageNumber) {
81          if (pageSize <= 0) {
82              throwPagingPageSizeNotPlusException(pageSize, pageNumber);
83          }
84          fetchFirst(pageSize);
85          xfetchPage(pageNumber);
86      }
87  
88      protected void throwPagingPageSizeNotPlusException(int pageSize, int pageNumber) {
89          createCBExThrower().throwPagingPageSizeNotPlusException(this, pageSize, pageNumber);
90      }
91  
92      protected ConditionBeanExceptionThrower createCBExThrower() {
93          return new ConditionBeanExceptionThrower();
94      }
95  
96      @Override
97      public void xsetPaging(boolean paging) {
98          // Do nothing because this is unsupported on ConditionBean.
99          // And it is possible that this method is called by PagingInvoker.
100     }
101 
102     @Override
103     public void enablePagingCountLater() {
104         // nothing
105     }
106 
107     @Override
108     public void disablePagingCountLater() {
109         // nothing
110     }
111 
112     @Override
113     public void enablePagingReSelect() {
114         // nothing
115     }
116 
117     @Override
118     public void disablePagingReSelect() {
119         // nothing
120     }
121 
122     @Override
123     public PagingBean fetchFirst(int fetchSize) {
124         getSqlClause().fetchFirst(fetchSize);
125         return this;
126     }
127 
128     @Override
129     public PagingBean xfetchScope(int fetchStartIndex, int fetchSize) {
130         getSqlClause().fetchScope(fetchStartIndex, fetchSize);
131         return this;
132     }
133 
134     @Override
135     public PagingBean xfetchPage(int fetchPageNumber) {
136         getSqlClause().fetchPage(fetchPageNumber);
137         return this;
138     }
139 
140     @Override
141     public <ENTITY> PagingInvoker<ENTITY> createPagingInvoker(String tableDbName) {
142         return null;
143     }
144 
145     // ===================================================================================
146     //                                                              Various Implementation
147     //                                                              ======================
148     @Override
149     public int getFetchStartIndex() {
150         return getSqlClause().getFetchStartIndex();
151     }
152 
153     @Override
154     public int getFetchSize() {
155         return getSqlClause().getFetchSize();
156     }
157 
158     @Override
159     public int getFetchPageNumber() {
160         return getSqlClause().getFetchPageNumber();
161     }
162 
163     @Override
164     public int getPageStartIndex() {
165         return getSqlClause().getPageStartIndex();
166     }
167 
168     @Override
169     public int getPageEndIndex() {
170         return getSqlClause().getPageEndIndex();
171     }
172 
173     @Override
174     public boolean isFetchScopeEffective() {
175         return getSqlClause().isFetchScopeEffective();
176     }
177 
178     @Override
179     public int getFetchNarrowingSkipStartIndex() {
180         return getPageStartIndex();
181     }
182 
183     @Override
184     public int getFetchNarrowingLoopCount() {
185         return getFetchSize();
186     }
187 
188     @Override
189     public boolean isFetchNarrowingSkipStartIndexEffective() {
190         return false;
191     }
192 
193     @Override
194     public boolean isFetchNarrowingLoopCountEffective() {
195         return false;
196     }
197 
198     @Override
199     public boolean isFetchNarrowingEffective() {
200         return getSqlClause().isFetchNarrowingEffective();
201     }
202 
203     @Override
204     public void xdisableFetchNarrowing() {
205         // no need to disable in ConditionBean, basically for OutsideSql
206         String msg = "This method is unsupported on ConditionBean!";
207         throw new UnsupportedOperationException(msg);
208     }
209 
210     @Override
211     public void xenableIgnoredFetchNarrowing() {
212         // do nothing
213     }
214 
215     @Override
216     public void checkSafetyResult(int safetyMaxResultSize) {
217         _safetyMaxResultSize = safetyMaxResultSize;
218     }
219 
220     @Override
221     public int getSafetyMaxResultSize() {
222         return _safetyMaxResultSize;
223     }
224 
225     @Override
226     public String getOrderByClause() {
227         return null;
228     }
229 
230     @Override
231     public OrderByClause getOrderByComponent() {
232         return null;
233     }
234 
235     @Override
236     public OrderByBean clearOrderBy() {
237         return null;
238     }
239 
240     @Override
241     public void overTheWaves(SpecifiedColumn dreamCruiseTicket) {
242         // do nothing
243     }
244 
245     @Override
246     public void mysticRhythms(Object mysticBinding) {
247         // do nothing
248     }
249 
250     @Override
251     public DBMeta asDBMeta() {
252         return null;
253     }
254 
255     @Override
256     public SqlClause getSqlClause() {
257         return _sqlClause;
258     }
259 
260     @Override
261     public ConditionBean addOrderBy_PK_Asc() {
262         return null;
263     }
264 
265     @Override
266     public ConditionBean addOrderBy_PK_Desc() {
267         return null;
268     }
269 
270     @Override
271     public HpColumnSpHandler localSp() {
272         return null;
273     }
274 
275     @Override
276     public void enableInnerJoinAutoDetect() {
277         // do nothing
278     }
279 
280     @Override
281     public void disableInnerJoinAutoDetect() {
282         // do nothing
283     }
284 
285     @Override
286     public SpecifiedColumn inviteDerivedToDreamCruise(String derivedAlias) {
287         return null;
288     }
289 
290     @Override
291     public ConditionBean xcreateDreamCruiseCB() {
292         return null;
293     }
294 
295     @Override
296     public void xmarkAsDeparturePortForDreamCruise() {
297         // do nothing
298     }
299 
300     @Override
301     public boolean xisDreamCruiseDeparturePort() {
302         return false;
303     }
304 
305     @Override
306     public boolean xisDreamCruiseShip() {
307         return false;
308     }
309 
310     @Override
311     public ConditionBean xgetDreamCruiseDeparturePort() {
312         return null;
313     }
314 
315     @Override
316     public boolean xhasDreamCruiseTicket() {
317         return false;
318     }
319 
320     @Override
321     public SpecifiedColumn xshowDreamCruiseTicket() {
322         return null;
323     }
324 
325     @Override
326     public void xkeepDreamCruiseJourneyLogBook(String relationPath) {
327         // do nothing
328     }
329 
330     @Override
331     public void xsetupSelectDreamCruiseJourneyLogBook() {
332         // do nothing
333     }
334 
335     @Override
336     public void xsetupSelectDreamCruiseJourneyLogBookIfUnionExists() {
337         // do nothing
338     }
339 
340     @Override
341     public Object xgetMysticBinding() {
342         return null;
343     }
344 
345     @Override
346     public void ignoreNullOrEmptyQuery() {
347     }
348 
349     @Override
350     public void checkNullOrEmptyQuery() {
351     }
352 
353     @Override
354     public void enableEmptyStringQuery(ModeQuery noArgInLambda) {
355         // do nothing
356     }
357 
358     @Override
359     public void disableEmptyStringQuery() {
360     }
361 
362     @Override
363     public void enableOverridingQuery(ModeQuery noArgInLambda) {
364         // do nothing
365     }
366 
367     @Override
368     public void disableOverridingQuery() {
369         // do nothing
370     }
371 
372     @Override
373     public void enablePagingCountLeastJoin() {
374         // do nothing
375     }
376 
377     @Override
378     public void disablePagingCountLeastJoin() {
379         // do nothing
380     }
381 
382     @Override
383     public boolean canPagingSelectAndQuerySplit() {
384         return false;
385     }
386 
387     @Override
388     public ConditionBean lockForUpdate() {
389         return null;
390     }
391 
392     @Override
393     public ConditionBean xsetupSelectCountIgnoreFetchScope(boolean uniqueCount) {
394         return null;
395     }
396 
397     @Override
398     public ConditionBean xafterCareSelectCountIgnoreFetchScope() {
399         return null;
400     }
401 
402     @Override
403     public boolean isSelectCountIgnoreFetchScope() {
404         return false;
405     }
406 
407     @Override
408     public CursorSelectOption getCursorSelectOption() {
409         return null;
410     }
411 
412     @Override
413     public void xacceptScalarSelectOption(ScalarSelectOption option) {
414         // do nothing
415     }
416 
417     @Override
418     public void configure(StatementConfigCall<StatementConfig> confLambda) {
419         // do nothing
420     }
421 
422     @Override
423     public StatementConfig getStatementConfig() {
424         return null;
425     }
426 
427     @Override
428     public boolean canRelationMappingCache() {
429         return false;
430     }
431 
432     @Override
433     public void enableNonSpecifiedColumnAccess() {
434         // do nothing
435     }
436 
437     @Override
438     public void disableNonSpecifiedColumnAccess() {
439         // do nothing
440     }
441 
442     @Override
443     public boolean isNonSpecifiedColumnAccessAllowed() {
444         return false;
445     }
446 
447     @Override
448     public void enableColumnNullObject() {
449     }
450 
451     @Override
452     public void disableColumnNullObject() {
453     }
454 
455     @Override
456     public void enableQueryUpdateCountPreCheck() {
457         // do nothing
458     }
459 
460     @Override
461     public void disableQueryUpdateCountPreCheck() {
462         // do nothing
463     }
464 
465     @Override
466     public boolean isQueryUpdateCountPreCheck() {
467         return false;
468     }
469 
470     @Override
471     public String toDisplaySql() {
472         return null;
473     }
474 
475     @Override
476     public void styleLogDateDisplay(BoundDateDisplayStyle logDateDisplayStyle) {
477         // do nothing
478     }
479 
480     @Override
481     public BoundDateDisplayStyle getLogDateDisplayStyle() {
482         return null;
483     }
484 
485     @Override
486     public boolean hasWhereClauseOnBaseQuery() {
487         return false;
488     }
489 
490     @Override
491     public void clearWhereClauseOnBaseQuery() {
492         // do nothing
493     }
494 
495     @Override
496     public boolean hasSelectAllPossible() {
497         return false;
498     }
499 
500     @Override
501     public boolean hasOrderByClause() {
502         return false;
503     }
504 
505     @Override
506     public boolean hasUnionQueryOrUnionAllQuery() {
507         return false;
508     }
509 
510     @Override
511     public void invokeSetupSelect(String foreignPropertyNamePath) {
512         // do nothing
513     }
514 
515     @Override
516     public SpecifiedColumn invokeSpecifyColumn(String columnPropertyPath) {
517         return null;
518     }
519 
520     @Override
521     public void invokeOrScopeQuery(OrQuery<ConditionBean> orQuery) {
522         // do nothing
523     }
524 
525     @Override
526     public void invokeOrScopeQueryAndPart(AndQuery<ConditionBean> andQuery) {
527         // do nothing
528     }
529 
530     @Override
531     public void xregisterUnionQuerySynchronizer(UnionQuery<ConditionBean> unionQuerySynchronizer) {
532         // do nothing
533     }
534 
535     @Override
536     public DerivedTypeHandler xgetDerivedTypeHandler() {
537         return null;
538     }
539 
540     @Override
541     public HpCBPurpose getPurpose() {
542         return null;
543     }
544 
545     @Override
546     public void xsetupForScalarSelect() {
547         // do nothing
548     }
549 
550     @Override
551     public void xsetupForQueryInsert() {
552         // do nothing
553     }
554 
555     @Override
556     public void xsetupForSpecifiedUpdate() {
557         // do nothing
558     }
559 
560     @Override
561     public void xsetupForVaryingUpdate() {
562         // do nothing
563     }
564 
565     @Override
566     public void enableThatsBadTiming() {
567         // do nothing
568     }
569 
570     @Override
571     public void disableThatsBadTiming() {
572         // do nothing
573     }
574 
575     // no annotation for compatible with 1.1.1
576     public void enableSpecifyColumnRequired() {
577         // do nothing
578     }
579 
580     public void disableSpecifyColumnRequired() {
581         // do nothing
582     }
583 
584     public void xcheckSpecifyColumnRequiredIfNeeds() {
585         // do nothing
586     }
587 
588     @Override
589     public boolean hasSpecifiedLocalColumn() {
590         return false;
591     }
592 
593     @Override
594     public void enableUndefinedClassificationSelect() {
595     }
596 
597     @Override
598     public void disableUndefinedClassificationSelect() {
599     }
600 
601     @Override
602     public boolean isUndefinedClassificationSelectAllowed() {
603         return false;
604     }
605 
606     // ===================================================================================
607     //                                                                   Request Parameter
608     //                                                                   =================
609     public SearchRequestParams request() {
610         return _searchRequestParams;
611     }
612 
613     public void setPreference(final String preference) {
614         _preference = preference;
615     }
616 
617     public String getPreference() {
618         return _preference;
619     }
620 
621     // ===================================================================================
622     //                                                                      General Helper
623     //                                                                      ==============
624     protected String ln() {
625         return DBFluteSystem.ln();
626     }
627 
628     protected void assertObjectNotNull(String variableName, Object value) {
629         if (variableName == null) {
630             String msg = "The value should not be null: variableName=null value=" + value;
631             throw new IllegalArgumentException(msg);
632         }
633         if (value == null) {
634             String msg = "The value should not be null: variableName=" + variableName;
635             throw new IllegalArgumentException(msg);
636         }
637     }
638 
639     // ===================================================================================
640     //                                                                        Assist Class
641     //                                                                        ============
642     public static class SearchRequestParams {
643 
644         private Boolean explain;
645 
646         private Float minScore;
647 
648         private String preference;
649 
650         private String routing;
651 
652         private String searchType;
653 
654         private long timeoutInMillis = -1;
655 
656         private Boolean version;
657 
658         private Boolean seqNoAndPrimaryTerm = Boolean.TRUE;
659 
660         private int terminateAfter = 0;
661 
662         public void build(SearchRequestBuilder builder) {
663             if (explain != null) {
664                 builder.setExplain(explain);
665             }
666             if (minScore != null) {
667                 builder.setMinScore(minScore);
668             }
669             if (preference != null) {
670                 builder.setPreference(preference);
671             }
672             if (routing != null) {
673                 builder.setRouting(routing);
674             }
675             if (searchType != null) {
676                 builder.setSearchType(searchType);
677             }
678             if (timeoutInMillis != -1) {
679                 builder.setTimeout(new TimeValue(timeoutInMillis));
680             }
681             if (version != null) {
682                 builder.setVersion(version);
683             }
684             if (seqNoAndPrimaryTerm != null) {
685                 builder.seqNoAndPrimaryTerm(seqNoAndPrimaryTerm);
686             }
687             if (terminateAfter > 0) {
688                 builder.setTerminateAfter(terminateAfter);
689             }
690         }
691 
692         public void setExplain(boolean explain) {
693             this.explain = explain;
694         }
695 
696         public void setMinScore(float minScore) {
697             this.minScore = minScore;
698         }
699 
700         public void setPreference(String preference) {
701             this.preference = preference;
702         }
703 
704         public void setRouting(String routing) {
705             this.routing = routing;
706         }
707 
708         public void setSearchType(String searchType) {
709             this.searchType = searchType;
710         }
711 
712         public void setTimeoutInMillis(long timeoutInMillis) {
713             this.timeoutInMillis = timeoutInMillis;
714         }
715 
716         public void setVersion(boolean version) {
717             this.version = version;
718         }
719 
720         public void setTerminateAfter(int terminateAfter) {
721             this.terminateAfter = terminateAfter;
722         }
723     }
724 }