// Path: core/src/main/java/com/jimmoores/quandl/processing/Request.java
// public interface Request {
//   /**
//    * Process this request using the provided processor.
//    * @param <T>  the type returned by the request processor
//    * @param processor  the request processor
//    * @return the result from the request processor
//    */
//   <T> T accept(RequestProcessor<T> processor);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/processing/RequestProcessor.java
// public interface RequestProcessor<T> {
//   /**
//    * Process a MetaDataRequest object and return data about it.
//    * @param request  the meta data request
//    * @return the processed result
//    */
//   T processMetaDataRequest(MetaDataRequest request);
//   /**
//    * Process a MultiMetaDataRequest object and return data about it.
//    * @param request  the multi meta data request
//    * @return the processed result
//    */
//   T processMultiMetaDataRequest(MultiMetaDataRequest request);
//   /**
//    * Process a DataSetRequest object and return data about it.
//    * @param request  the meta data request
//    * @return the processed result
//    */
//   T processDataSetRequest(DataSetRequest request);
//   /**
//    * Process a MultiDataSetRequest object and return data about it.
//    * @param request  the multi data set request
//    * @return the processed result
//    */
//   T processMultiDataSetRequest(MultiDataSetRequest request);
//   /**
//    * Process a SerachRequest object and return data about it.
//    * @param request  the search request
//    * @return the processed result
//    */
//   T processSearchRequest(SearchRequest request);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/util/ArgumentChecker.java
// public final class ArgumentChecker {
//   private static Logger s_logger = LoggerFactory.getLogger(ArgumentChecker.class);
// 
//   private ArgumentChecker() {
//   }
// 
//   /**
//    * Throws an exception if the argument is not null.
//    * 
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static void notNull(final Object argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     }
//   }
// 
//   /**
//    * Throws an exception if the array argument is not null or empty.
//    * 
//    * @param <E> type of array
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static <E> void notNullOrEmpty(final E[] argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.length == 0) {
//       s_logger.error("Argument {} was empty array", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty array");
//     }
//   }
// 
//   /**
//    * Throws an exception if the collection argument is not null or empty.
//    * 
//    * @param <E> type of array
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static <E> void notNullOrEmpty(final Collection<E> argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.size() == 0) {
//       s_logger.error("Argument {} was empty collection", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty collection");
//     }
//   }
// 
//   /**
//    * Throws an exception if the string argument is not null or empty.
//    * 
//    * @param argument the String to check
//    * @param name the name of the parameter
//    */
//   public static void notNullOrEmpty(final String argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.length() == 0) {
//       s_logger.error("Argument {} was empty string", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty string");
//     }
//   }
// }


import javax.ws.rs.client.WebTarget;
import com.jimmoores.quandl.processing.Request;
import com.jimmoores.quandl.processing.RequestProcessor;
import com.jimmoores.quandl.util.ArgumentChecker;
    }
    if (!_query.equals(other._query)) {
      return false;
    }
    if (!_maxDocsPerPage.equals(other._maxDocsPerPage)) {
      return false;
    }
    if (!_pageNumber.equals(other._pageNumber)) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("SearchRequest[");
    if (_databaseCode != null) {
      builder.append("databaseCode=");
      builder.append(_databaseCode);
    }
    if (_query != null) {
      if (builder.charAt(builder.length() - 1) != '[') {
        builder.append(", ");
      }
      builder.append("query=");
      builder.append(_query);
    }
    if (_pageNumber != null) {
      if (builder.charAt(builder.length() - 1) != '[') {
// Path: core/src/main/java/com/jimmoores/quandl/processing/Request.java
// public interface Request {
//   /**
//    * Process this request using the provided processor.
//    * @param <T>  the type returned by the request processor
//    * @param processor  the request processor
//    * @return the result from the request processor
//    */
//   <T> T accept(RequestProcessor<T> processor);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/processing/RequestProcessor.java
// public interface RequestProcessor<T> {
//   /**
//    * Process a MetaDataRequest object and return data about it.
//    * @param request  the meta data request
//    * @return the processed result
//    */
//   T processMetaDataRequest(MetaDataRequest request);
//   /**
//    * Process a MultiMetaDataRequest object and return data about it.
//    * @param request  the multi meta data request
//    * @return the processed result
//    */
//   T processMultiMetaDataRequest(MultiMetaDataRequest request);
//   /**
//    * Process a DataSetRequest object and return data about it.
//    * @param request  the meta data request
//    * @return the processed result
//    */
//   T processDataSetRequest(DataSetRequest request);
//   /**
//    * Process a MultiDataSetRequest object and return data about it.
//    * @param request  the multi data set request
//    * @return the processed result
//    */
//   T processMultiDataSetRequest(MultiDataSetRequest request);
//   /**
//    * Process a SerachRequest object and return data about it.
//    * @param request  the search request
//    * @return the processed result
//    */
//   T processSearchRequest(SearchRequest request);
// }
// 
// Path: core/src/main/java/com/jimmoores/quandl/util/ArgumentChecker.java
// public final class ArgumentChecker {
//   private static Logger s_logger = LoggerFactory.getLogger(ArgumentChecker.class);
// 
//   private ArgumentChecker() {
//   }
// 
//   /**
//    * Throws an exception if the argument is not null.
//    * 
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static void notNull(final Object argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     }
//   }
// 
//   /**
//    * Throws an exception if the array argument is not null or empty.
//    * 
//    * @param <E> type of array
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static <E> void notNullOrEmpty(final E[] argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.length == 0) {
//       s_logger.error("Argument {} was empty array", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty array");
//     }
//   }
// 
//   /**
//    * Throws an exception if the collection argument is not null or empty.
//    * 
//    * @param <E> type of array
//    * @param argument the object to check
//    * @param name the name of the parameter
//    */
//   public static <E> void notNullOrEmpty(final Collection<E> argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.size() == 0) {
//       s_logger.error("Argument {} was empty collection", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty collection");
//     }
//   }
// 
//   /**
//    * Throws an exception if the string argument is not null or empty.
//    * 
//    * @param argument the String to check
//    * @param name the name of the parameter
//    */
//   public static void notNullOrEmpty(final String argument, final String name) {
//     if (argument == null) {
//       s_logger.error("Argument {} was null", name);
//       throw new QuandlRuntimeException("Value " + name + " was null");
//     } else if (argument.length() == 0) {
//       s_logger.error("Argument {} was empty string", name);
//       throw new QuandlRuntimeException("Value " + name + " was empty string");
//     }
//   }
// }


// Path: core/src/main/java/com/jimmoores/quandl/SearchRequest.java
import javax.ws.rs.client.WebTarget;
import com.jimmoores.quandl.processing.Request;
import com.jimmoores.quandl.processing.RequestProcessor;
import com.jimmoores.quandl.util.ArgumentChecker;

    }
    if (!_query.equals(other._query)) {
      return false;
    }
    if (!_maxDocsPerPage.equals(other._maxDocsPerPage)) {
      return false;
    }
    if (!_pageNumber.equals(other._pageNumber)) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("SearchRequest[");
    if (_databaseCode != null) {
      builder.append("databaseCode=");
      builder.append(_databaseCode);
    }
    if (_query != null) {
      if (builder.charAt(builder.length() - 1) != '[') {
        builder.append(", ");
      }
      builder.append("query=");
      builder.append(_query);
    }
    if (_pageNumber != null) {
      if (builder.charAt(builder.length() - 1) != '[') {
        builder.append(", ");