package ameba.db.model;
import io.ebean.*;
import io.ebean.text.PathProperties;
import org.apache.commons.lang3.StringUtils;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
/**
* <p>Abstract Finder class.</p>
*
* @author icode
*
*/
public abstract class Finder<ID, T> {
private final Class<ID> idType;
private final Class<T> modelType;
private final String serverName;
/**
* Creates a finder for entity of modelType <code>T</code> with <code>ID</code> I of modelType <code>ID</code>, using a specific Ebean server.
*
* @param serverName a {@link java.lang.String} object.
* @param idType a {@link java.lang.Class} object.
* @param modelType a {@link java.lang.Class} object.
*/
public Finder(String serverName, Class<ID> idType, Class<T> modelType) {
if (StringUtils.isBlank(serverName)) {
throw new IllegalArgumentException("server name is blank");
}
if (idType == null) {
throw new IllegalArgumentException("id model type is null");
}
if (modelType == null) {
throw new IllegalArgumentException("model model type is null");
}
this.modelType = modelType;
this.idType = idType;
this.serverName = serverName;
}
/**
* <p>Getter for the field <code>idType</code>.</p>
*
* @return a {@link java.lang.Class} object.
*/
public Class<ID> getIdType() {
return idType;
}
/**
* <p>Getter for the field <code>modelType</code>.</p>
*
* @return a {@link java.lang.Class} object.
* @param <M> a M object.
*/
@SuppressWarnings("unchecked")
public <M extends T> Class<M> getModelType() {
return (Class<M>) modelType;
}
/**
* <p>Getter for the field <code>serverName</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getServerName() {
return serverName;
}
/**
* Changes the model server.
*
* @param server a {@link java.lang.String} object.
* @return a {@link ameba.db.model.Finder} object.
* @param <M> a M object.
*/
@SuppressWarnings("unchecked")
public abstract <M extends T> Finder<ID, M> on(String server);
/**
* Retrieves an entity by ID.
*
* @param id a ID object.
* @return a M object.
* @param <M> a M object.
*/
public abstract <M extends T> M byId(ID id);
/**
* Retrieves an entity reference for this ID.
*
* @param id a ID object.
* @return a M object.
* @param <M> a M object.
*/
public abstract <M extends T> M ref(ID id);
/**
* Creates a filter for sorting and filtering lists of entities locally without going back to the database.
*
* @return Filter
*/
public abstract Filter<T> filter();
/**
* <p>query.</p>
*
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> query();
/**
* Creates a query.
*
* @return Query
*/
public abstract Query<T> createQuery();
/**
* <p>createUpdateQuery.</p>
*
* @return a {@link io.ebean.UpdateQuery} object.
*/
public abstract UpdateQuery<T> createUpdateQuery();
/**
* <p>createSqlQuery.</p>
*
* @param sql a {@link java.lang.String} object.
* @return a {@link io.ebean.SqlQuery} object.
*/
public abstract SqlQuery createSqlQuery(String sql);
/**
* Returns the next identity value.
*
* @return a I object.
* @param <I> a I object.
*/
public abstract <I extends ID> I nextId();
/**
* <p>setRawSql.</p>
*
* @param rawSql a {@link io.ebean.RawSql} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setRawSql(RawSql rawSql);
/**
* <p>setPersistenceContextScope.</p>
*
* @param scope a {@link io.ebean.PersistenceContextScope} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setPersistenceContextScope(PersistenceContextScope scope);
/**
* <p>setLazyLoadBatchSize.</p>
*
* @param size a int.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setLazyLoadBatchSize(int size);
/**
* <p>setDisableReadAuditing.</p>
*
* @return a {@link io.ebean.Query} object.
*/
public abstract Query setDisableReadAuditing();
/**
* <p>select.</p>
*
* @param fetchProperties a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> select(String fetchProperties);
/**
* <p>setAutoTune.</p>
*
* @param autoTune a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setAutoTune(boolean autoTune);
/**
* <p>fetch.</p>
*
* @param path a {@link java.lang.String} object.
* @param fetchProperties a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> fetch(String path, String fetchProperties);
/**
* <p>fetch.</p>
*
* @param assocProperty a {@link java.lang.String} object.
* @param fetchProperties a {@link java.lang.String} object.
* @param fetchConfig a {@link io.ebean.FetchConfig} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> fetch(String assocProperty, String fetchProperties, FetchConfig fetchConfig);
/**
* <p>fetch.</p>
*
* @param path a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> fetch(String path);
/**
* <p>fetch.</p>
*
* @param path a {@link java.lang.String} object.
* @param joinConfig a {@link io.ebean.FetchConfig} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> fetch(String path, FetchConfig joinConfig);
/**
* <p>apply.</p>
*
* @param pathProperties a {@link io.ebean.text.PathProperties} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> apply(PathProperties pathProperties);
/**
* <p>findIds.</p>
*
* @return a {@link java.util.List} object.
*/
public abstract List<Object> findIds();
/**
* <p>findVersions.</p>
*
* @return a {@link java.util.List} object.
*/
public abstract List<Version<T>> findVersions();
/**
* <p>findVersionsBetween.</p>
*
* @param start a {@link java.sql.Timestamp} object.
* @param end a {@link java.sql.Timestamp} object.
* @return a {@link java.util.List} object.
*/
public abstract List<Version<T>> findVersionsBetween(Timestamp start, Timestamp end);
/**
* <p>text.</p>
*
* @return a {@link io.ebean.ExpressionList} object.
*/
public abstract ExpressionList<T> text();
/**
* <p>findEach.</p>
*
* @param consumer a Consumerobject.
*/
public abstract void findEach(Consumer<T> consumer);
/**
* <p>findEachWhile.</p>
*
* @param predicate a Predicate object.
*/
public abstract void findEachWhile(Predicate<T> predicate);
/**
* <p>findList.</p>
*
* @return a {@link java.util.List} object.
* @param <M> a M object.
*/
public abstract <M extends T> List<M> findList();
/**
* <p>findSet.</p>
*
* @return a {@link java.util.Set} object.
* @param <M> a M object.
*/
public abstract <M extends T> Set<M> findSet();
/**
* <p>findMap.</p>
*
* @return a {@link java.util.Map} object.
* @param <M> a M object.
*/
public abstract <M extends T> Map<?, M> findMap();
/**
* <p>findUnique.</p>
*
* @return a M object.
* @param <M> a M object.
*/
public abstract <M extends T> M findUnique();
/**
* <p>findCount.</p>
*
* @return a int.
*/
public abstract int findCount();
/**
* <p>findFutureCount.</p>
*
* @return a {@link io.ebean.FutureRowCount} object.
*/
public abstract FutureRowCount<T> findFutureCount();
/**
* <p>findFutureIds.</p>
*
* @return a {@link io.ebean.FutureIds} object.
*/
public abstract FutureIds<T> findFutureIds();
/**
* <p>findFutureList.</p>
*
* @return a {@link io.ebean.FutureList} object.
*/
public abstract FutureList<T> findFutureList();
/**
* <p>findPagedList.</p>
*
* @return a {@link io.ebean.PagedList} object.
*/
public abstract PagedList<T> findPagedList();
/**
* <p>setParameter.</p>
*
* @param name a {@link java.lang.String} object.
* @param value a {@link java.lang.Object} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setParameter(String name, Object value);
/**
* <p>setParameter.</p>
*
* @param position a int.
* @param value a {@link java.lang.Object} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setParameter(int position, Object value);
/**
* <p>setId.</p>
*
* @param id a {@link java.lang.Object} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setId(Object id);
/**
* <p>getId.</p>
*
* @return a {@link java.lang.Object} object.
*/
public abstract Object getId();
/**
* <p>where.</p>
*
* @param expression a {@link io.ebean.Expression} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> where(Expression expression);
/**
* <p>where.</p>
*
* @return a {@link io.ebean.ExpressionList} object.
*/
public abstract ExpressionList<T> where();
/**
* <p>filterMany.</p>
*
* @param propertyName a {@link java.lang.String} object.
* @return a {@link io.ebean.ExpressionList} object.
*/
public abstract ExpressionList<T> filterMany(String propertyName);
/**
* <p>having.</p>
*
* @return a {@link io.ebean.ExpressionList} object.
*/
public abstract ExpressionList<T> having();
/**
* <p>having.</p>
*
* @param addExpressionToHaving a {@link io.ebean.Expression} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> having(Expression addExpressionToHaving);
/**
* <p>orderBy.</p>
*
* @param orderByClause a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> orderBy(String orderByClause);
/**
* <p>order.</p>
*
* @param orderByClause a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> order(String orderByClause);
/**
* <p>order.</p>
*
* @return a {@link io.ebean.OrderBy} object.
*/
public abstract OrderBy<T> order();
/**
* <p>orderBy.</p>
*
* @return a {@link io.ebean.OrderBy} object.
*/
public abstract OrderBy<T> orderBy();
/**
* <p>setOrder.</p>
*
* @param orderBy a {@link io.ebean.OrderBy} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setOrder(OrderBy<T> orderBy);
/**
* <p>setOrderBy.</p>
*
* @param orderBy a {@link io.ebean.OrderBy} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setOrderBy(OrderBy<T> orderBy);
/**
* <p>setDistinct.</p>
*
* @param isDistinct a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setDistinct(boolean isDistinct);
/**
* <p>getExpressionFactory.</p>
*
* @return a {@link io.ebean.ExpressionFactory} object.
*/
public abstract ExpressionFactory getExpressionFactory();
/**
* <p>isAutoTuned.</p>
*
* @return a boolean.
*/
public abstract boolean isAutoTuned();
/**
* <p>getFirstRow.</p>
*
* @return a int.
*/
public abstract int getFirstRow();
/**
* <p>getGeneratedSql.</p>
*
* @return a {@link java.lang.String} object.
*/
public abstract String getGeneratedSql();
/**
* <p>setFirstRow.</p>
*
* @param firstRow a int.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setFirstRow(int firstRow);
/**
* <p>getMaxRows.</p>
*
* @return a int.
*/
public abstract int getMaxRows();
/**
* <p>setMaxRows.</p>
*
* @param maxRows a int.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setMaxRows(int maxRows);
/**
* <p>setMapKey.</p>
*
* @param mapKey a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setMapKey(String mapKey);
/**
* <p>setUseCache.</p>
*
* @param useBeanCache a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setUseCache(boolean useBeanCache);
/**
* <p>setUseQueryCache.</p>
*
* @param useQueryCache a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setUseQueryCache(boolean useQueryCache);
/**
* <p>setReadOnly.</p>
*
* @param readOnly a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setReadOnly(boolean readOnly);
/**
* <p>setLoadBeanCache.</p>
*
* @param loadBeanCache a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setLoadBeanCache(boolean loadBeanCache);
/**
* <p>setTimeout.</p>
*
* @param secs a int.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setTimeout(int secs);
/**
* <p>setBufferFetchSizeHint.</p>
*
* @param fetchSize a int.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setBufferFetchSizeHint(int fetchSize);
/**
* <p>setForUpdate.</p>
*
* @param forUpdate a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setForUpdate(boolean forUpdate);
/**
* <p>isForUpdate.</p>
*
* @return a boolean.
*/
public abstract boolean isForUpdate();
/**
* <p>alias.</p>
*
* @param alias a {@link java.lang.String} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> alias(String alias);
/**
* <p>getBeanType.</p>
*
* @return a {@link java.lang.Class} object.
*/
public abstract Class<T> getBeanType();
/**
* <p>setDisableLazyLoading.</p>
*
* @param disableLazyLoading a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setDisableLazyLoading(boolean disableLazyLoading);
/**
* <p>getRawSql.</p>
*
* @return a {@link io.ebean.RawSql} object.
*/
public abstract RawSql getRawSql();
/**
* <p>asOf.</p>
*
* @param asOf a {@link java.sql.Timestamp} object.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> asOf(Timestamp asOf);
/**
* <p>cancel.</p>
*/
public abstract void cancel();
/**
* <p>copyQuery.</p>
*
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> copyQuery();
/**
* <p>setUseDocStore.</p>
*
* @param use a boolean.
* @return a {@link io.ebean.Query} object.
*/
public abstract Query<T> setUseDocStore(boolean use);
}