/*
* Copyright 2012-2017 CodeLibs Project and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.codelibs.fess.es.config.allcommon;
import org.dbflute.cbean.ConditionBean;
import org.dbflute.cbean.chelper.HpCBPurpose;
import org.dbflute.cbean.chelper.HpColumnSpHandler;
import org.dbflute.cbean.coption.CursorSelectOption;
import org.dbflute.cbean.coption.ScalarSelectOption;
import org.dbflute.cbean.coption.StatementConfigCall;
import org.dbflute.cbean.dream.SpecifiedColumn;
import org.dbflute.cbean.exception.ConditionBeanExceptionThrower;
import org.dbflute.cbean.ordering.OrderByBean;
import org.dbflute.cbean.paging.PagingBean;
import org.dbflute.cbean.paging.PagingInvoker;
import org.dbflute.cbean.scoping.AndQuery;
import org.dbflute.cbean.scoping.ModeQuery;
import org.dbflute.cbean.scoping.OrQuery;
import org.dbflute.cbean.scoping.UnionQuery;
import org.dbflute.cbean.sqlclause.SqlClause;
import org.dbflute.cbean.sqlclause.orderby.OrderByClause;
import org.dbflute.dbmeta.DBMeta;
import org.dbflute.dbmeta.accessory.DerivedTypeHandler;
import org.dbflute.jdbc.StatementConfig;
import org.dbflute.system.DBFluteSystem;
import org.dbflute.twowaysql.style.BoundDateDisplayStyle;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.common.unit.TimeValue;
/**
* @author ESFlute (using FreeGen)
*/
public abstract class EsAbstractConditionBean implements ConditionBean {
// ===================================================================================
// Attribute
// =========
protected final SqlClause _sqlClause = new EsSqlClause(asTableDbName());
protected int _safetyMaxResultSize;
protected SearchRequestParams _searchRequestParams = new SearchRequestParams();
protected String _preference;
// ===================================================================================
// Builder
// =======
public abstract SearchRequestBuilder build(SearchRequestBuilder builder);
// ===================================================================================
// Paging
// ======
@Override
public boolean isPaging() {
return false;
}
@Override
public boolean canPagingCountLater() {
return false;
}
@Override
public boolean canPagingReSelect() {
return true;
}
@Override
public void paging(int pageSize, int pageNumber) {
if (pageSize <= 0) {
throwPagingPageSizeNotPlusException(pageSize, pageNumber);
}
fetchFirst(pageSize);
xfetchPage(pageNumber);
}
protected void throwPagingPageSizeNotPlusException(int pageSize, int pageNumber) {
createCBExThrower().throwPagingPageSizeNotPlusException(this, pageSize, pageNumber);
}
protected ConditionBeanExceptionThrower createCBExThrower() {
return new ConditionBeanExceptionThrower();
}
@Override
public void xsetPaging(boolean paging) {
// Do nothing because this is unsupported on ConditionBean.
// And it is possible that this method is called by PagingInvoker.
}
@Override
public void enablePagingCountLater() {
// nothing
}
@Override
public void disablePagingCountLater() {
// nothing
}
@Override
public void enablePagingReSelect() {
// nothing
}
@Override
public void disablePagingReSelect() {
// nothing
}
@Override
public PagingBean fetchFirst(int fetchSize) {
getSqlClause().fetchFirst(fetchSize);
return this;
}
@Override
public PagingBean xfetchScope(int fetchStartIndex, int fetchSize) {
getSqlClause().fetchScope(fetchStartIndex, fetchSize);
return this;
}
@Override
public PagingBean xfetchPage(int fetchPageNumber) {
getSqlClause().fetchPage(fetchPageNumber);
return this;
}
@Override
public <ENTITY> PagingInvoker<ENTITY> createPagingInvoker(String tableDbName) {
return null;
}
// ===================================================================================
// Various Implementation
// ======================
@Override
public int getFetchStartIndex() {
return getSqlClause().getFetchStartIndex();
}
@Override
public int getFetchSize() {
return getSqlClause().getFetchSize();
}
@Override
public int getFetchPageNumber() {
return getSqlClause().getFetchPageNumber();
}
@Override
public int getPageStartIndex() {
return getSqlClause().getPageStartIndex();
}
@Override
public int getPageEndIndex() {
return getSqlClause().getPageEndIndex();
}
@Override
public boolean isFetchScopeEffective() {
return getSqlClause().isFetchScopeEffective();
}
@Override
public int getFetchNarrowingSkipStartIndex() {
return getPageStartIndex();
}
@Override
public int getFetchNarrowingLoopCount() {
return getFetchSize();
}
@Override
public boolean isFetchNarrowingSkipStartIndexEffective() {
return false;
}
@Override
public boolean isFetchNarrowingLoopCountEffective() {
return false;
}
@Override
public boolean isFetchNarrowingEffective() {
return getSqlClause().isFetchNarrowingEffective();
}
@Override
public void xdisableFetchNarrowing() {
// no need to disable in ConditionBean, basically for OutsideSql
String msg = "This method is unsupported on ConditionBean!";
throw new UnsupportedOperationException(msg);
}
@Override
public void xenableIgnoredFetchNarrowing() {
// do nothing
}
@Override
public void checkSafetyResult(int safetyMaxResultSize) {
_safetyMaxResultSize = safetyMaxResultSize;
}
@Override
public int getSafetyMaxResultSize() {
return _safetyMaxResultSize;
}
@Override
public String getOrderByClause() {
return null;
}
@Override
public OrderByClause getOrderByComponent() {
return null;
}
@Override
public OrderByBean clearOrderBy() {
return null;
}
@Override
public void overTheWaves(SpecifiedColumn dreamCruiseTicket) {
// do nothing
}
@Override
public void mysticRhythms(Object mysticBinding) {
// do nothing
}
@Override
public DBMeta asDBMeta() {
return null;
}
@Override
public SqlClause getSqlClause() {
return _sqlClause;
}
@Override
public ConditionBean addOrderBy_PK_Asc() {
return null;
}
@Override
public ConditionBean addOrderBy_PK_Desc() {
return null;
}
@Override
public HpColumnSpHandler localSp() {
return null;
}
@Override
public void enableInnerJoinAutoDetect() {
// do nothing
}
@Override
public void disableInnerJoinAutoDetect() {
// do nothing
}
@Override
public SpecifiedColumn inviteDerivedToDreamCruise(String derivedAlias) {
return null;
}
@Override
public ConditionBean xcreateDreamCruiseCB() {
return null;
}
@Override
public void xmarkAsDeparturePortForDreamCruise() {
// do nothing
}
@Override
public boolean xisDreamCruiseDeparturePort() {
return false;
}
@Override
public boolean xisDreamCruiseShip() {
return false;
}
@Override
public ConditionBean xgetDreamCruiseDeparturePort() {
return null;
}
@Override
public boolean xhasDreamCruiseTicket() {
return false;
}
@Override
public SpecifiedColumn xshowDreamCruiseTicket() {
return null;
}
@Override
public void xkeepDreamCruiseJourneyLogBook(String relationPath) {
// do nothing
}
@Override
public void xsetupSelectDreamCruiseJourneyLogBook() {
// do nothing
}
@Override
public void xsetupSelectDreamCruiseJourneyLogBookIfUnionExists() {
// do nothing
}
@Override
public Object xgetMysticBinding() {
return null;
}
@Override
public void ignoreNullOrEmptyQuery() {
}
@Override
public void checkNullOrEmptyQuery() {
}
@Override
public void enableEmptyStringQuery(ModeQuery noArgInLambda) {
// do nothing
}
@Override
public void disableEmptyStringQuery() {
}
@Override
public void enableOverridingQuery(ModeQuery noArgInLambda) {
// do nothing
}
@Override
public void disableOverridingQuery() {
// do nothing
}
@Override
public void enablePagingCountLeastJoin() {
// do nothing
}
@Override
public void disablePagingCountLeastJoin() {
// do nothing
}
@Override
public boolean canPagingSelectAndQuerySplit() {
return false;
}
@Override
public ConditionBean lockForUpdate() {
return null;
}
@Override
public ConditionBean xsetupSelectCountIgnoreFetchScope(boolean uniqueCount) {
return null;
}
@Override
public ConditionBean xafterCareSelectCountIgnoreFetchScope() {
return null;
}
@Override
public boolean isSelectCountIgnoreFetchScope() {
return false;
}
@Override
public CursorSelectOption getCursorSelectOption() {
return null;
}
@Override
public void xacceptScalarSelectOption(ScalarSelectOption option) {
// do nothing
}
@Override
public void configure(StatementConfigCall<StatementConfig> confLambda) {
// do nothing
}
@Override
public StatementConfig getStatementConfig() {
return null;
}
@Override
public boolean canRelationMappingCache() {
return false;
}
@Override
public void enableNonSpecifiedColumnAccess() {
// do nothing
}
@Override
public void disableNonSpecifiedColumnAccess() {
// do nothing
}
@Override
public boolean isNonSpecifiedColumnAccessAllowed() {
return false;
}
@Override
public void enableColumnNullObject() {
}
@Override
public void disableColumnNullObject() {
}
@Override
public void enableQueryUpdateCountPreCheck() {
// do nothing
}
@Override
public void disableQueryUpdateCountPreCheck() {
// do nothing
}
@Override
public boolean isQueryUpdateCountPreCheck() {
return false;
}
@Override
public String toDisplaySql() {
return null;
}
@Override
public void styleLogDateDisplay(BoundDateDisplayStyle logDateDisplayStyle) {
// do nothing
}
@Override
public BoundDateDisplayStyle getLogDateDisplayStyle() {
return null;
}
@Override
public boolean hasWhereClauseOnBaseQuery() {
return false;
}
@Override
public void clearWhereClauseOnBaseQuery() {
// do nothing
}
@Override
public boolean hasSelectAllPossible() {
return false;
}
@Override
public boolean hasOrderByClause() {
return false;
}
@Override
public boolean hasUnionQueryOrUnionAllQuery() {
return false;
}
@Override
public void invokeSetupSelect(String foreignPropertyNamePath) {
// do nothing
}
@Override
public SpecifiedColumn invokeSpecifyColumn(String columnPropertyPath) {
return null;
}
@Override
public void invokeOrScopeQuery(OrQuery<ConditionBean> orQuery) {
// do nothing
}
@Override
public void invokeOrScopeQueryAndPart(AndQuery<ConditionBean> andQuery) {
// do nothing
}
@Override
public void xregisterUnionQuerySynchronizer(UnionQuery<ConditionBean> unionQuerySynchronizer) {
// do nothing
}
@Override
public DerivedTypeHandler xgetDerivedTypeHandler() {
return null;
}
@Override
public HpCBPurpose getPurpose() {
return null;
}
@Override
public void xsetupForScalarSelect() {
// do nothing
}
@Override
public void xsetupForQueryInsert() {
// do nothing
}
@Override
public void xsetupForSpecifiedUpdate() {
// do nothing
}
@Override
public void xsetupForVaryingUpdate() {
// do nothing
}
@Override
public void enableThatsBadTiming() {
// do nothing
}
@Override
public void disableThatsBadTiming() {
// do nothing
}
// no annotation for compatible with 1.1.1
public void enableSpecifyColumnRequired() {
// do nothing
}
public void disableSpecifyColumnRequired() {
// do nothing
}
public void xcheckSpecifyColumnRequiredIfNeeds() {
// do nothing
}
@Override
public boolean hasSpecifiedLocalColumn() {
return false;
}
@Override
public void enableUndefinedClassificationSelect() {
}
@Override
public void disableUndefinedClassificationSelect() {
}
@Override
public boolean isUndefinedClassificationSelectAllowed() {
return false;
}
// ===================================================================================
// Request Parameter
// =================
public SearchRequestParams request() {
return _searchRequestParams;
}
public void setPreference(final String preference) {
_preference = preference;
}
public String getPreference() {
return _preference;
}
// ===================================================================================
// General Helper
// ==============
protected String ln() {
return DBFluteSystem.ln();
}
protected void assertObjectNotNull(String variableName, Object value) {
if (variableName == null) {
String msg = "The value should not be null: variableName=null value=" + value;
throw new IllegalArgumentException(msg);
}
if (value == null) {
String msg = "The value should not be null: variableName=" + variableName;
throw new IllegalArgumentException(msg);
}
}
// ===================================================================================
// Assist Class
// ============
public static class SearchRequestParams {
private Boolean explain;
private Float minScore;
private String preference;
private String routing;
private String searchType;
private long timeoutInMillis = -1;
private Boolean version;
private int terminateAfter = 0;
public void build(SearchRequestBuilder builder) {
if (explain != null) {
builder.setExplain(explain);
}
if (minScore != null) {
builder.setMinScore(minScore);
}
if (preference != null) {
builder.setPreference(preference);
}
if (routing != null) {
builder.setRouting(routing);
}
if (searchType != null) {
builder.setSearchType(searchType);
}
if (timeoutInMillis != -1) {
builder.setTimeout(new TimeValue(timeoutInMillis));
}
if (version != null) {
builder.setVersion(version);
}
if (terminateAfter > 0) {
builder.setTerminateAfter(terminateAfter);
}
}
public void setExplain(boolean explain) {
this.explain = explain;
}
public void setMinScore(float minScore) {
this.minScore = minScore;
}
public void setPreference(String preference) {
this.preference = preference;
}
public void setRouting(String routing) {
this.routing = routing;
}
public void setSearchType(String searchType) {
this.searchType = searchType;
}
public void setTimeoutInMillis(long timeoutInMillis) {
this.timeoutInMillis = timeoutInMillis;
}
public void setVersion(boolean version) {
this.version = version;
}
public void setTerminateAfter(int terminateAfter) {
this.terminateAfter = terminateAfter;
}
}
}