001package com.avaje.ebean.delegate;
002
003import com.avaje.ebean.EbeanServer;
004import com.avaje.ebean.Filter;
005import com.avaje.ebean.Query;
006import com.avaje.ebean.SqlQuery;
007
008import java.util.Set;
009
010/**
011 * Wraps an underlying EbeanServer.
012 * <p>
013 * Can you used for testing purposes when you want to create a test double that
014 * only replaces some of the underlying functionality of the EbeanServer.
015 */
016public class DelegateQuery {
017
018  protected EbeanServer delegate;
019
020  protected EbeanServer owner;
021
022  /**
023   * Construct with a EbeanServer to delegate to by default.
024   * <p>
025   * This delegate will be used on all method calls that are not overwritten.
026   */
027  public DelegateQuery(EbeanServer delegate, EbeanServer owner) {
028    this.delegate = delegate;
029    this.owner = owner;
030  }
031
032  public <T> Query<T> delegateToThisServer(Query<T> sourceQuery) {
033
034    return DelegateOrmQuery.copy(sourceQuery, owner);
035  }
036
037  public <T> Query<T> createQuery(Class<T> beanType) {
038    return delegateToThisServer(delegate.createQuery(beanType));
039  }
040
041  public <T> Query<T> find(Class<T> beanType) {
042    return delegateToThisServer(delegate.find(beanType));
043  }
044
045  public <T> Filter<T> filter(Class<T> beanType) {
046    return delegate.filter(beanType);
047  }
048
049  public SqlQuery createSqlQuery(String sql) {
050    return delegate.createSqlQuery(sql);
051  }
052
053  public <T> T getReference(Class<T> beanType, Object id) {
054    return delegate.getReference(beanType, id);
055  }
056
057  public <T> Set<String> validateQuery(Query<T> query) {
058    return delegate.validateQuery(query);
059  }
060
061  public <T> Query<T> createQuery(Class<T> beanType, String eql) {
062    return delegate.createQuery(beanType, eql);
063  }
064
065  public <T> Query<T> createNamedQuery(Class<T> beanType, String namedQuery) {
066    return delegate.createNamedQuery(beanType, namedQuery);
067  }
068}