text:
/*
 * 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.
 */
/*
 * This code was generated by https://code.google.com/p/google-apis-client-generator/
 * (build: 2013-12-19 23:55:21 UTC)
 * on 2014-01-26 at 14:36:14 UTC
 * Modify at your own risk.
 */

package com.appspot.freya_app.freya;

/**
 * Service definition for Freya (v1).
 *
 *

 * This is an API
 *

 *
 *

 * For more information about this service, see the
 * API Documentation
 *

 *
 *

 * This service uses {@link FreyaRequestInitializer} to initialize global parameters via its
 * {@link Builder}.
 *

 *
 * @since 1.3
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public class Freya extends com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient {

  // Note: Leave this static initializer at the top of the file.
  static {
    com.google.api.client.util.Preconditions.checkState(
        com.google.api.client.googleapis.GoogleUtils.MAJOR_VERSION == 1 &&
        com.google.api.client.googleapis.GoogleUtils.MINOR_VERSION >= 15,
        "You are currently running with version %s of google-api-client. " +
        "You need at least version 1.15 of google-api-client to run version " +
        "1.17.0-rc of the freya library.", com.google.api.client.googleapis.GoogleUtils.VERSION);
  }

  /**
   * The default encoded root URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   *
   * @since 1.7
   */
  public static final String DEFAULT_ROOT_URL = "https://freya-app.appspot.com/_ah/api/";
  //public static final String DEFAULT_ROOT_URL = "http://localhost:8080/_ah/api/";

  /**
   * The default encoded service path of the service. This is determined when the library is
   * generated and normally should not be changed.
   *
   * @since 1.7
   */
  public static final String DEFAULT_SERVICE_PATH = "freya/v1/";

  /**
   * The default encoded base URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   */
  public static final String DEFAULT_BASE_URL = DEFAULT_ROOT_URL + DEFAULT_SERVICE_PATH;

  /**
   * Constructor.
   *
   *

   * Use {@link Builder} if you need to specify any of the optional parameters.
   *

   *
   * @param transport HTTP transport, which should normally be:
   *

   *
Google App Engine:
   *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}

   *
Android: {@code newCompatibleTransport} from
   *        {@code com.google.api.client.extensions.android.http.AndroidHttp}

   *
Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
   *

   *

   * @param jsonFactory JSON factory, which may be:
   *

   *
Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}

   *
Google GSON: {@code com.google.api.client.json.gson.GsonFactory}

   *
Android Honeycomb or higher:
   *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}

   *

   * @param httpRequestInitializer HTTP request initializer or {@code null} for none
   * @since 1.7
   */
  public Freya(com.google.api.client.http.HttpTransport transport, com.google.api.client.json.JsonFactory jsonFactory,
      com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
    this(new Builder(transport, jsonFactory, httpRequestInitializer));
  }

  /**
   * @param builder builder
   */
  Freya(Builder builder) {
    super(builder);
  }

  @Override
  protected void initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest<?> httpClientRequest) throws java.io.IOException {
    super.initialize(httpClientRequest);
  }

  /**
   * An accessor for creating requests from the Artcollections collection.
   *
   *
The typical use is:

   *

   *   {@code Freya freya = new Freya(...);}
   *   {@code Freya.Artcollections.List request = freya.artcollections().list(parameters ...)}
   *

   *
   * @return the resource collection
   */
  public Artcollections artcollections() {
    return new Artcollections();
  }

  /**
   * The "artcollections" collection of methods.
   */
  public class Artcollections {

    /**
     * Create a request for the method "artcollections.add".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Add#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.appspot.freya_app.freya.model.ArtCollection}
     * @return the request
     */
    public Add add(com.appspot.freya_app.freya.model.ArtCollection content) throws java.io.IOException {
      Add result = new Add(content);
      initialize(result);
      return result;
    }

    public class Add extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artcollections/add";

      /**
       * Create a request for the method "artcollections.add".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Add#execute()} method to invoke the remote operation.
 {@link
       * Add#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param content the {@link com.appspot.freya_app.freya.model.ArtCollection}
       * @since 1.13
       */
      protected Add(com.appspot.freya_app.freya.model.ArtCollection content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
      }

      @Override
      public Add setAlt(java.lang.String alt) {
        return (Add) super.setAlt(alt);
      }

      @Override
      public Add setFields(java.lang.String fields) {
        return (Add) super.setFields(fields);
      }

      @Override
      public Add setKey(java.lang.String key) {
        return (Add) super.setKey(key);
      }

      @Override
      public Add setOauthToken(java.lang.String oauthToken) {
        return (Add) super.setOauthToken(oauthToken);
      }

      @Override
      public Add setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Add) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Add setQuotaUser(java.lang.String quotaUser) {
        return (Add) super.setQuotaUser(quotaUser);
      }

      @Override
      public Add setUserIp(java.lang.String userIp) {
        return (Add) super.setUserIp(userIp);
      }

      @Override
      public Add set(String parameterName, Object value) {
        return (Add) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.addArtworkToArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddArtworkToArtCollection#execute()} method to invoke the remote
     * operation.
     *
     * @param artcollectionId
     * @param content the {@link com.appspot.freya_app.freya.model.Artwork}
     * @return the request
     */
    public AddArtworkToArtCollection addArtworkToArtCollection(java.lang.Long artcollectionId, com.appspot.freya_app.freya.model.Artwork content) throws java.io.IOException {
      AddArtworkToArtCollection result = new AddArtworkToArtCollection(artcollectionId, content);
      initialize(result);
      return result;
    }

    public class AddArtworkToArtCollection extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/artworks/add";

      /**
       * Create a request for the method "artcollections.addArtworkToArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddArtworkToArtCollection#execute()} method to invoke the remote
       * operation.
 {@link AddArtworkToArtCollection#initialize(com.google.api.client.googleapis.ser
       * vices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
       * after invoking the constructor.

       *
       * @param artcollectionId
       * @param content the {@link com.appspot.freya_app.freya.model.Artwork}
       * @since 1.13
       */
      protected AddArtworkToArtCollection(java.lang.Long artcollectionId, com.appspot.freya_app.freya.model.Artwork content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
      }

      @Override
      public AddArtworkToArtCollection setAlt(java.lang.String alt) {
        return (AddArtworkToArtCollection) super.setAlt(alt);
      }

      @Override
      public AddArtworkToArtCollection setFields(java.lang.String fields) {
        return (AddArtworkToArtCollection) super.setFields(fields);
      }

      @Override
      public AddArtworkToArtCollection setKey(java.lang.String key) {
        return (AddArtworkToArtCollection) super.setKey(key);
      }

      @Override
      public AddArtworkToArtCollection setOauthToken(java.lang.String oauthToken) {
        return (AddArtworkToArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public AddArtworkToArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddArtworkToArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddArtworkToArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (AddArtworkToArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddArtworkToArtCollection setUserIp(java.lang.String userIp) {
        return (AddArtworkToArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public AddArtworkToArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @Override
      public AddArtworkToArtCollection set(String parameterName, Object value) {
        return (AddArtworkToArtCollection) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.addCommentToArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddCommentToArtCollection#execute()} method to invoke the remote
     * operation.
     *
     * @param artcollectionId
     * @param comment
     * @return the request
     */
    public AddCommentToArtCollection addCommentToArtCollection(java.lang.Long artcollectionId, java.lang.String comment) throws java.io.IOException {
      AddCommentToArtCollection result = new AddCommentToArtCollection(artcollectionId, comment);
      initialize(result);
      return result;
    }

    public class AddCommentToArtCollection extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/comments/add";

      /**
       * Create a request for the method "artcollections.addCommentToArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddCommentToArtCollection#execute()} method to invoke the remote
       * operation.
 {@link AddCommentToArtCollection#initialize(com.google.api.client.googleapis.ser
       * vices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
       * after invoking the constructor.

       *
       * @param artcollectionId
       * @param comment
       * @since 1.13
       */
      protected AddCommentToArtCollection(java.lang.Long artcollectionId, java.lang.String comment) {
        super(Freya.this, "POST", REST_PATH, null, com.appspot.freya_app.freya.model.Response.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
        this.comment = com.google.api.client.util.Preconditions.checkNotNull(comment, "Required parameter comment must be specified.");
      }

      @Override
      public AddCommentToArtCollection setAlt(java.lang.String alt) {
        return (AddCommentToArtCollection) super.setAlt(alt);
      }

      @Override
      public AddCommentToArtCollection setFields(java.lang.String fields) {
        return (AddCommentToArtCollection) super.setFields(fields);
      }

      @Override
      public AddCommentToArtCollection setKey(java.lang.String key) {
        return (AddCommentToArtCollection) super.setKey(key);
      }

      @Override
      public AddCommentToArtCollection setOauthToken(java.lang.String oauthToken) {
        return (AddCommentToArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public AddCommentToArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddCommentToArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddCommentToArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (AddCommentToArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddCommentToArtCollection setUserIp(java.lang.String userIp) {
        return (AddCommentToArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public AddCommentToArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String comment;

      /**

       */
      public java.lang.String getComment() {
        return comment;
      }

      public AddCommentToArtCollection setComment(java.lang.String comment) {
        this.comment = comment;
        return this;
      }

      @Override
      public AddCommentToArtCollection set(String parameterName, Object value) {
        return (AddCommentToArtCollection) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.addTagToArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddTagToArtCollection#execute()} method to invoke the remote
     * operation.
     *
     * @param artcollectionId
     * @param tag
     * @return the request
     */
    public AddTagToArtCollection addTagToArtCollection(java.lang.Long artcollectionId, java.lang.String tag) throws java.io.IOException {
      AddTagToArtCollection result = new AddTagToArtCollection(artcollectionId, tag);
      initialize(result);
      return result;
    }

    public class AddTagToArtCollection extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/tags/add";

      /**
       * Create a request for the method "artcollections.addTagToArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddTagToArtCollection#execute()} method to invoke the remote
       * operation.
 {@link AddTagToArtCollection#initialize(com.google.api.client.googleapis.service
       * s.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artcollectionId
       * @param tag
       * @since 1.13
       */
      protected AddTagToArtCollection(java.lang.Long artcollectionId, java.lang.String tag) {
        super(Freya.this, "POST", REST_PATH, null, com.appspot.freya_app.freya.model.Response.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
        this.tag = com.google.api.client.util.Preconditions.checkNotNull(tag, "Required parameter tag must be specified.");
      }

      @Override
      public AddTagToArtCollection setAlt(java.lang.String alt) {
        return (AddTagToArtCollection) super.setAlt(alt);
      }

      @Override
      public AddTagToArtCollection setFields(java.lang.String fields) {
        return (AddTagToArtCollection) super.setFields(fields);
      }

      @Override
      public AddTagToArtCollection setKey(java.lang.String key) {
        return (AddTagToArtCollection) super.setKey(key);
      }

      @Override
      public AddTagToArtCollection setOauthToken(java.lang.String oauthToken) {
        return (AddTagToArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public AddTagToArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddTagToArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddTagToArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (AddTagToArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddTagToArtCollection setUserIp(java.lang.String userIp) {
        return (AddTagToArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public AddTagToArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public AddTagToArtCollection setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @Override
      public AddTagToArtCollection set(String parameterName, Object value) {
        return (AddTagToArtCollection) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.delete".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
     *
     * @param artcollectionId
     * @return the request
     */
    public Delete delete(java.lang.Long artcollectionId) throws java.io.IOException {
      Delete result = new Delete(artcollectionId);
      initialize(result);
      return result;
    }

    public class Delete extends FreyaRequest<Void> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/delete";

      /**
       * Create a request for the method "artcollections.delete".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
 {@link
       * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor.

       *
       * @param artcollectionId
       * @since 1.13
       */
      protected Delete(java.lang.Long artcollectionId) {
        super(Freya.this, "DELETE", REST_PATH, null, Void.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
      }

      @Override
      public Delete setAlt(java.lang.String alt) {
        return (Delete) super.setAlt(alt);
      }

      @Override
      public Delete setFields(java.lang.String fields) {
        return (Delete) super.setFields(fields);
      }

      @Override
      public Delete setKey(java.lang.String key) {
        return (Delete) super.setKey(key);
      }

      @Override
      public Delete setOauthToken(java.lang.String oauthToken) {
        return (Delete) super.setOauthToken(oauthToken);
      }

      @Override
      public Delete setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Delete) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Delete setQuotaUser(java.lang.String quotaUser) {
        return (Delete) super.setQuotaUser(quotaUser);
      }

      @Override
      public Delete setUserIp(java.lang.String userIp) {
        return (Delete) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public Delete setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @Override
      public Delete set(String parameterName, Object value) {
        return (Delete) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.get".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param artcollectionId
     * @return the request
     */
    public Get get(java.lang.Long artcollectionId) throws java.io.IOException {
      Get result = new Get(artcollectionId);
      initialize(result);
      return result;
    }

    public class Get extends FreyaRequest<com.appspot.freya_app.freya.model.ArtCollection> {

      private static final String REST_PATH = "artcollections/{artcollection_id}";

      /**
       * Create a request for the method "artcollections.get".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Get#execute()} method to invoke the remote operation.
 {@link
       * Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param artcollectionId
       * @since 1.13
       */
      protected Get(java.lang.Long artcollectionId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtCollection.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUserIp(java.lang.String userIp) {
        return (Get) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public Get setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.getArtworksByArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetArtworksByArtCollection#execute()} method to invoke the remote
     * operation.
     *
     * @param artcollectionId
     * @return the request
     */
    public GetArtworksByArtCollection getArtworksByArtCollection(java.lang.Long artcollectionId) throws java.io.IOException {
      GetArtworksByArtCollection result = new GetArtworksByArtCollection(artcollectionId);
      initialize(result);
      return result;
    }

    public class GetArtworksByArtCollection extends FreyaRequest<com.appspot.freya_app.freya.model.ArtworkCollection> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/artworks";

      /**
       * Create a request for the method "artcollections.getArtworksByArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetArtworksByArtCollection#execute()} method to invoke the remote
       * operation.
 {@link GetArtworksByArtCollection#initialize(com.google.api.client.googleapis.se
       * rvices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
       * after invoking the constructor.

       *
       * @param artcollectionId
       * @since 1.13
       */
      protected GetArtworksByArtCollection(java.lang.Long artcollectionId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtworkCollection.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetArtworksByArtCollection setAlt(java.lang.String alt) {
        return (GetArtworksByArtCollection) super.setAlt(alt);
      }

      @Override
      public GetArtworksByArtCollection setFields(java.lang.String fields) {
        return (GetArtworksByArtCollection) super.setFields(fields);
      }

      @Override
      public GetArtworksByArtCollection setKey(java.lang.String key) {
        return (GetArtworksByArtCollection) super.setKey(key);
      }

      @Override
      public GetArtworksByArtCollection setOauthToken(java.lang.String oauthToken) {
        return (GetArtworksByArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public GetArtworksByArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetArtworksByArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetArtworksByArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (GetArtworksByArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetArtworksByArtCollection setUserIp(java.lang.String userIp) {
        return (GetArtworksByArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public GetArtworksByArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @com.google.api.client.util.Key("reproduction_count")
      private java.lang.Integer reproductionCount;

      /**

       */
      public java.lang.Integer getReproductionCount() {
        return reproductionCount;
      }

      public GetArtworksByArtCollection setReproductionCount(java.lang.Integer reproductionCount) {
        this.reproductionCount = reproductionCount;
        return this;
      }

      @Override
      public GetArtworksByArtCollection set(String parameterName, Object value) {
        return (GetArtworksByArtCollection) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.getReproductionsByArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetReproductionsByArtCollection#execute()} method to invoke the
     * remote operation.
     *
     * @param artcollectionId
     * @return the request
     */
    public GetReproductionsByArtCollection getReproductionsByArtCollection(java.lang.Long artcollectionId) throws java.io.IOException {
      GetReproductionsByArtCollection result = new GetReproductionsByArtCollection(artcollectionId);
      initialize(result);
      return result;
    }

    public class GetReproductionsByArtCollection extends FreyaRequest<com.appspot.freya_app.freya.model.ReproductionCollection> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/reproductions";

      /**
       * Create a request for the method "artcollections.getReproductionsByArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetReproductionsByArtCollection#execute()} method to invoke the
       * remote operation.
 {@link GetReproductionsByArtCollection#initialize(com.google.api.client.g
       * oogleapis.services.AbstractGoogleClientRequest)} must be called to initialize this instance
       * immediately after invoking the constructor.

       *
       * @param artcollectionId
       * @since 1.13
       */
      protected GetReproductionsByArtCollection(java.lang.Long artcollectionId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ReproductionCollection.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetReproductionsByArtCollection setAlt(java.lang.String alt) {
        return (GetReproductionsByArtCollection) super.setAlt(alt);
      }

      @Override
      public GetReproductionsByArtCollection setFields(java.lang.String fields) {
        return (GetReproductionsByArtCollection) super.setFields(fields);
      }

      @Override
      public GetReproductionsByArtCollection setKey(java.lang.String key) {
        return (GetReproductionsByArtCollection) super.setKey(key);
      }

      @Override
      public GetReproductionsByArtCollection setOauthToken(java.lang.String oauthToken) {
        return (GetReproductionsByArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public GetReproductionsByArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetReproductionsByArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetReproductionsByArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (GetReproductionsByArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetReproductionsByArtCollection setUserIp(java.lang.String userIp) {
        return (GetReproductionsByArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public GetReproductionsByArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @Override
      public GetReproductionsByArtCollection set(String parameterName, Object value) {
        return (GetReproductionsByArtCollection) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.list".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public List list() throws java.io.IOException {
      List result = new List();
      initialize(result);
      return result;
    }

    public class List extends FreyaRequest<com.appspot.freya_app.freya.model.ArtCollectionCollection> {

      private static final String REST_PATH = "artcollections";

      /**
       * Create a request for the method "artcollections.list".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
 {@link
       * List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected List() {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtCollectionCollection.class);
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUserIp(java.lang.String userIp) {
        return (List) super.setUserIp(userIp);
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artcollections.removeArtworkFromArtCollection".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link RemoveArtworkFromArtCollection#execute()} method to invoke the remote
     * operation.
     *
     * @param artcollectionId
     * @param artworkId
     * @return the request
     */
    public RemoveArtworkFromArtCollection removeArtworkFromArtCollection(java.lang.Long artcollectionId, java.lang.String artworkId) throws java.io.IOException {
      RemoveArtworkFromArtCollection result = new RemoveArtworkFromArtCollection(artcollectionId, artworkId);
      initialize(result);
      return result;
    }

    public class RemoveArtworkFromArtCollection extends FreyaRequest<Void> {

      private static final String REST_PATH = "artcollections/{artcollection_id}/artworks/{artwork_id}/delete";

      /**
       * Create a request for the method "artcollections.removeArtworkFromArtCollection".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link RemoveArtworkFromArtCollection#execute()} method to invoke the
       * remote operation.
 {@link RemoveArtworkFromArtCollection#initialize(com.google.api.client.go
       * ogleapis.services.AbstractGoogleClientRequest)} must be called to initialize this instance
       * immediately after invoking the constructor.

       *
       * @param artcollectionId
       * @param artworkId
       * @since 1.13
       */
      protected RemoveArtworkFromArtCollection(java.lang.Long artcollectionId, java.lang.String artworkId) {
        super(Freya.this, "DELETE", REST_PATH, null, Void.class);
        this.artcollectionId = com.google.api.client.util.Preconditions.checkNotNull(artcollectionId, "Required parameter artcollectionId must be specified.");
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public RemoveArtworkFromArtCollection setAlt(java.lang.String alt) {
        return (RemoveArtworkFromArtCollection) super.setAlt(alt);
      }

      @Override
      public RemoveArtworkFromArtCollection setFields(java.lang.String fields) {
        return (RemoveArtworkFromArtCollection) super.setFields(fields);
      }

      @Override
      public RemoveArtworkFromArtCollection setKey(java.lang.String key) {
        return (RemoveArtworkFromArtCollection) super.setKey(key);
      }

      @Override
      public RemoveArtworkFromArtCollection setOauthToken(java.lang.String oauthToken) {
        return (RemoveArtworkFromArtCollection) super.setOauthToken(oauthToken);
      }

      @Override
      public RemoveArtworkFromArtCollection setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (RemoveArtworkFromArtCollection) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public RemoveArtworkFromArtCollection setQuotaUser(java.lang.String quotaUser) {
        return (RemoveArtworkFromArtCollection) super.setQuotaUser(quotaUser);
      }

      @Override
      public RemoveArtworkFromArtCollection setUserIp(java.lang.String userIp) {
        return (RemoveArtworkFromArtCollection) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artcollection_id")
      private java.lang.Long artcollectionId;

      /**

       */
      public java.lang.Long getArtcollectionId() {
        return artcollectionId;
      }

      public RemoveArtworkFromArtCollection setArtcollectionId(java.lang.Long artcollectionId) {
        this.artcollectionId = artcollectionId;
        return this;
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public RemoveArtworkFromArtCollection setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public RemoveArtworkFromArtCollection set(String parameterName, Object value) {
        return (RemoveArtworkFromArtCollection) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Artists collection.
   *
   *
The typical use is:

   *

   *   {@code Freya freya = new Freya(...);}
   *   {@code Freya.Artists.List request = freya.artists().list(parameters ...)}
   *

   *
   * @return the resource collection
   */
  public Artists artists() {
    return new Artists();
  }

  /**
   * The "artists" collection of methods.
   */
  public class Artists {

    /**
     * Create a request for the method "artists.get".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param artistId
     * @return the request
     */
    public Get get(java.lang.String artistId) throws java.io.IOException {
      Get result = new Get(artistId);
      initialize(result);
      return result;
    }

    public class Get extends FreyaRequest<com.appspot.freya_app.freya.model.Artist> {

      private static final String REST_PATH = "artists/{artist_id}";

      /**
       * Create a request for the method "artists.get".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Get#execute()} method to invoke the remote operation.
 {@link
       * Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param artistId
       * @since 1.13
       */
      protected Get(java.lang.String artistId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.Artist.class);
        this.artistId = com.google.api.client.util.Preconditions.checkNotNull(artistId, "Required parameter artistId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUserIp(java.lang.String userIp) {
        return (Get) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artist_id")
      private java.lang.String artistId;

      /**

       */
      public java.lang.String getArtistId() {
        return artistId;
      }

      public Get setArtistId(java.lang.String artistId) {
        this.artistId = artistId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artists.getArtworksByArtist".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetArtworksByArtist#execute()} method to invoke the remote operation.
     *
     * @param artistId
     * @return the request
     */
    public GetArtworksByArtist getArtworksByArtist(java.lang.String artistId) throws java.io.IOException {
      GetArtworksByArtist result = new GetArtworksByArtist(artistId);
      initialize(result);
      return result;
    }

    public class GetArtworksByArtist extends FreyaRequest<com.appspot.freya_app.freya.model.ArtworkCollection> {

      private static final String REST_PATH = "artists/{artist_id}/artworks";

      /**
       * Create a request for the method "artists.getArtworksByArtist".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetArtworksByArtist#execute()} method to invoke the remote
       * operation.
 {@link GetArtworksByArtist#initialize(com.google.api.client.googleapis.services.
       * AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artistId
       * @since 1.13
       */
      protected GetArtworksByArtist(java.lang.String artistId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtworkCollection.class);
        this.artistId = com.google.api.client.util.Preconditions.checkNotNull(artistId, "Required parameter artistId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetArtworksByArtist setAlt(java.lang.String alt) {
        return (GetArtworksByArtist) super.setAlt(alt);
      }

      @Override
      public GetArtworksByArtist setFields(java.lang.String fields) {
        return (GetArtworksByArtist) super.setFields(fields);
      }

      @Override
      public GetArtworksByArtist setKey(java.lang.String key) {
        return (GetArtworksByArtist) super.setKey(key);
      }

      @Override
      public GetArtworksByArtist setOauthToken(java.lang.String oauthToken) {
        return (GetArtworksByArtist) super.setOauthToken(oauthToken);
      }

      @Override
      public GetArtworksByArtist setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetArtworksByArtist) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetArtworksByArtist setQuotaUser(java.lang.String quotaUser) {
        return (GetArtworksByArtist) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetArtworksByArtist setUserIp(java.lang.String userIp) {
        return (GetArtworksByArtist) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artist_id")
      private java.lang.String artistId;

      /**

       */
      public java.lang.String getArtistId() {
        return artistId;
      }

      public GetArtworksByArtist setArtistId(java.lang.String artistId) {
        this.artistId = artistId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String technique;

      /**

       */
      public java.lang.String getTechnique() {
        return technique;
      }

      public GetArtworksByArtist setTechnique(java.lang.String technique) {
        this.technique = technique;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public GetArtworksByArtist setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String support;

      /**

       */
      public java.lang.String getSupport() {
        return support;
      }

      public GetArtworksByArtist setSupport(java.lang.String support) {
        this.support = support;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String year;

      /**

       */
      public java.lang.String getYear() {
        return year;
      }

      public GetArtworksByArtist setYear(java.lang.String year) {
        this.year = year;
        return this;
      }

      @Override
      public GetArtworksByArtist set(String parameterName, Object value) {
        return (GetArtworksByArtist) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artists.getPhotosByArtist".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetPhotosByArtist#execute()} method to invoke the remote operation.
     *
     * @param artistId
     * @return the request
     */
    public GetPhotosByArtist getPhotosByArtist(java.lang.String artistId) throws java.io.IOException {
      GetPhotosByArtist result = new GetPhotosByArtist(artistId);
      initialize(result);
      return result;
    }

    public class GetPhotosByArtist extends FreyaRequest<com.appspot.freya_app.freya.model.PhotoCollection> {

      private static final String REST_PATH = "artists/{artist_id}/photos";

      /**
       * Create a request for the method "artists.getPhotosByArtist".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetPhotosByArtist#execute()} method to invoke the remote operation.
       *
 {@link GetPhotosByArtist#initialize(com.google.api.client.googleapis.services.AbstractGoogl
       * eClientRequest)} must be called to initialize this instance immediately after invoking the
       * constructor.

       *
       * @param artistId
       * @since 1.13
       */
      protected GetPhotosByArtist(java.lang.String artistId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.PhotoCollection.class);
        this.artistId = com.google.api.client.util.Preconditions.checkNotNull(artistId, "Required parameter artistId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetPhotosByArtist setAlt(java.lang.String alt) {
        return (GetPhotosByArtist) super.setAlt(alt);
      }

      @Override
      public GetPhotosByArtist setFields(java.lang.String fields) {
        return (GetPhotosByArtist) super.setFields(fields);
      }

      @Override
      public GetPhotosByArtist setKey(java.lang.String key) {
        return (GetPhotosByArtist) super.setKey(key);
      }

      @Override
      public GetPhotosByArtist setOauthToken(java.lang.String oauthToken) {
        return (GetPhotosByArtist) super.setOauthToken(oauthToken);
      }

      @Override
      public GetPhotosByArtist setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetPhotosByArtist) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetPhotosByArtist setQuotaUser(java.lang.String quotaUser) {
        return (GetPhotosByArtist) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetPhotosByArtist setUserIp(java.lang.String userIp) {
        return (GetPhotosByArtist) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artist_id")
      private java.lang.String artistId;

      /**

       */
      public java.lang.String getArtistId() {
        return artistId;
      }

      public GetPhotosByArtist setArtistId(java.lang.String artistId) {
        this.artistId = artistId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String technique;

      /**

       */
      public java.lang.String getTechnique() {
        return technique;
      }

      public GetPhotosByArtist setTechnique(java.lang.String technique) {
        this.technique = technique;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public GetPhotosByArtist setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String support;

      /**

       */
      public java.lang.String getSupport() {
        return support;
      }

      public GetPhotosByArtist setSupport(java.lang.String support) {
        this.support = support;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String year;

      /**

       */
      public java.lang.String getYear() {
        return year;
      }

      public GetPhotosByArtist setYear(java.lang.String year) {
        this.year = year;
        return this;
      }

      @Override
      public GetPhotosByArtist set(String parameterName, Object value) {
        return (GetPhotosByArtist) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artists.list".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public List list() throws java.io.IOException {
      List result = new List();
      initialize(result);
      return result;
    }

    public class List extends FreyaRequest<com.appspot.freya_app.freya.model.ArtistCollection> {

      private static final String REST_PATH = "artists";

      /**
       * Create a request for the method "artists.list".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
 {@link
       * List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected List() {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtistCollection.class);
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUserIp(java.lang.String userIp) {
        return (List) super.setUserIp(userIp);
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Artworks collection.
   *
   *
The typical use is:

   *

   *   {@code Freya freya = new Freya(...);}
   *   {@code Freya.Artworks.List request = freya.artworks().list(parameters ...)}
   *

   *
   * @return the resource collection
   */
  public Artworks artworks() {
    return new Artworks();
  }

  /**
   * The "artworks" collection of methods.
   */
  public class Artworks {

    /**
     * Create a request for the method "artworks.add".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Add#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.appspot.freya_app.freya.model.Artwork}
     * @return the request
     */
    public Add add(com.appspot.freya_app.freya.model.Artwork content) throws java.io.IOException {
      Add result = new Add(content);
      initialize(result);
      return result;
    }

    public class Add extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/add";

      /**
       * Create a request for the method "artworks.add".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Add#execute()} method to invoke the remote operation.
 {@link
       * Add#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param content the {@link com.appspot.freya_app.freya.model.Artwork}
       * @since 1.13
       */
      protected Add(com.appspot.freya_app.freya.model.Artwork content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
      }

      @Override
      public Add setAlt(java.lang.String alt) {
        return (Add) super.setAlt(alt);
      }

      @Override
      public Add setFields(java.lang.String fields) {
        return (Add) super.setFields(fields);
      }

      @Override
      public Add setKey(java.lang.String key) {
        return (Add) super.setKey(key);
      }

      @Override
      public Add setOauthToken(java.lang.String oauthToken) {
        return (Add) super.setOauthToken(oauthToken);
      }

      @Override
      public Add setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Add) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Add setQuotaUser(java.lang.String quotaUser) {
        return (Add) super.setQuotaUser(quotaUser);
      }

      @Override
      public Add setUserIp(java.lang.String userIp) {
        return (Add) super.setUserIp(userIp);
      }

      @Override
      public Add set(String parameterName, Object value) {
        return (Add) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.addArtistToArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddArtistToArtwork#execute()} method to invoke the remote operation.
     *
     * @param artworkId
     * @param content the {@link com.appspot.freya_app.freya.model.Artist}
     * @return the request
     */
    public AddArtistToArtwork addArtistToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Artist content) throws java.io.IOException {
      AddArtistToArtwork result = new AddArtistToArtwork(artworkId, content);
      initialize(result);
      return result;
    }

    public class AddArtistToArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/{artwork_id}/artist/add";

      /**
       * Create a request for the method "artworks.addArtistToArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddArtistToArtwork#execute()} method to invoke the remote
       * operation.
 {@link AddArtistToArtwork#initialize(com.google.api.client.googleapis.services.A
       * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artworkId
       * @param content the {@link com.appspot.freya_app.freya.model.Artist}
       * @since 1.13
       */
      protected AddArtistToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Artist content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public AddArtistToArtwork setAlt(java.lang.String alt) {
        return (AddArtistToArtwork) super.setAlt(alt);
      }

      @Override
      public AddArtistToArtwork setFields(java.lang.String fields) {
        return (AddArtistToArtwork) super.setFields(fields);
      }

      @Override
      public AddArtistToArtwork setKey(java.lang.String key) {
        return (AddArtistToArtwork) super.setKey(key);
      }

      @Override
      public AddArtistToArtwork setOauthToken(java.lang.String oauthToken) {
        return (AddArtistToArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public AddArtistToArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddArtistToArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddArtistToArtwork setQuotaUser(java.lang.String quotaUser) {
        return (AddArtistToArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddArtistToArtwork setUserIp(java.lang.String userIp) {
        return (AddArtistToArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public AddArtistToArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public AddArtistToArtwork set(String parameterName, Object value) {
        return (AddArtistToArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.addDimensionsToArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddDimensionsToArtwork#execute()} method to invoke the remote
     * operation.
     *
     * @param artworkId
     * @param content the {@link com.appspot.freya_app.freya.model.Dimension}
     * @return the request
     */
    public AddDimensionsToArtwork addDimensionsToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Dimension content) throws java.io.IOException {
      AddDimensionsToArtwork result = new AddDimensionsToArtwork(artworkId, content);
      initialize(result);
      return result;
    }

    public class AddDimensionsToArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/{artwork_id}/dimensions/add";

      /**
       * Create a request for the method "artworks.addDimensionsToArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddDimensionsToArtwork#execute()} method to invoke the remote
       * operation.
 {@link AddDimensionsToArtwork#initialize(com.google.api.client.googleapis.servic
       * es.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artworkId
       * @param content the {@link com.appspot.freya_app.freya.model.Dimension}
       * @since 1.13
       */
      protected AddDimensionsToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Dimension content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public AddDimensionsToArtwork setAlt(java.lang.String alt) {
        return (AddDimensionsToArtwork) super.setAlt(alt);
      }

      @Override
      public AddDimensionsToArtwork setFields(java.lang.String fields) {
        return (AddDimensionsToArtwork) super.setFields(fields);
      }

      @Override
      public AddDimensionsToArtwork setKey(java.lang.String key) {
        return (AddDimensionsToArtwork) super.setKey(key);
      }

      @Override
      public AddDimensionsToArtwork setOauthToken(java.lang.String oauthToken) {
        return (AddDimensionsToArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public AddDimensionsToArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddDimensionsToArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddDimensionsToArtwork setQuotaUser(java.lang.String quotaUser) {
        return (AddDimensionsToArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddDimensionsToArtwork setUserIp(java.lang.String userIp) {
        return (AddDimensionsToArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public AddDimensionsToArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public AddDimensionsToArtwork set(String parameterName, Object value) {
        return (AddDimensionsToArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.addMetadataToArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddMetadataToArtwork#execute()} method to invoke the remote
     * operation.
     *
     * @param artworkId
     * @return the request
     */
    public AddMetadataToArtwork addMetadataToArtwork(java.lang.String artworkId) throws java.io.IOException {
      AddMetadataToArtwork result = new AddMetadataToArtwork(artworkId);
      initialize(result);
      return result;
    }

    public class AddMetadataToArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/{artwork_id}/metadata/add";

      /**
       * Create a request for the method "artworks.addMetadataToArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddMetadataToArtwork#execute()} method to invoke the remote
       * operation.
 {@link AddMetadataToArtwork#initialize(com.google.api.client.googleapis.services
       * .AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artworkId
       * @since 1.13
       */
      protected AddMetadataToArtwork(java.lang.String artworkId) {
        super(Freya.this, "POST", REST_PATH, null, com.appspot.freya_app.freya.model.Response.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public AddMetadataToArtwork setAlt(java.lang.String alt) {
        return (AddMetadataToArtwork) super.setAlt(alt);
      }

      @Override
      public AddMetadataToArtwork setFields(java.lang.String fields) {
        return (AddMetadataToArtwork) super.setFields(fields);
      }

      @Override
      public AddMetadataToArtwork setKey(java.lang.String key) {
        return (AddMetadataToArtwork) super.setKey(key);
      }

      @Override
      public AddMetadataToArtwork setOauthToken(java.lang.String oauthToken) {
        return (AddMetadataToArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public AddMetadataToArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddMetadataToArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddMetadataToArtwork setQuotaUser(java.lang.String quotaUser) {
        return (AddMetadataToArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddMetadataToArtwork setUserIp(java.lang.String userIp) {
        return (AddMetadataToArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public AddMetadataToArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String comment;

      /**

       */
      public java.lang.String getComment() {
        return comment;
      }

      public AddMetadataToArtwork setComment(java.lang.String comment) {
        this.comment = comment;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String title;

      /**

       */
      public java.lang.String getTitle() {
        return title;
      }

      public AddMetadataToArtwork setTitle(java.lang.String title) {
        this.title = title;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String support;

      /**

       */
      public java.lang.String getSupport() {
        return support;
      }

      public AddMetadataToArtwork setSupport(java.lang.String support) {
        this.support = support;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String technique;

      /**

       */
      public java.lang.String getTechnique() {
        return technique;
      }

      public AddMetadataToArtwork setTechnique(java.lang.String technique) {
        this.technique = technique;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String summary;

      /**

       */
      public java.lang.String getSummary() {
        return summary;
      }

      public AddMetadataToArtwork setSummary(java.lang.String summary) {
        this.summary = summary;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public AddMetadataToArtwork setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @Override
      public AddMetadataToArtwork set(String parameterName, Object value) {
        return (AddMetadataToArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.addPhotoToArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddPhotoToArtwork#execute()} method to invoke the remote operation.
     *
     * @param artworkId
     * @param content the {@link com.appspot.freya_app.freya.model.Photo}
     * @return the request
     */
    public AddPhotoToArtwork addPhotoToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Photo content) throws java.io.IOException {
      AddPhotoToArtwork result = new AddPhotoToArtwork(artworkId, content);
      initialize(result);
      return result;
    }

    public class AddPhotoToArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/{artwork_id}/photo/add";

      /**
       * Create a request for the method "artworks.addPhotoToArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddPhotoToArtwork#execute()} method to invoke the remote operation.
       *
 {@link AddPhotoToArtwork#initialize(com.google.api.client.googleapis.services.AbstractGoogl
       * eClientRequest)} must be called to initialize this instance immediately after invoking the
       * constructor.

       *
       * @param artworkId
       * @param content the {@link com.appspot.freya_app.freya.model.Photo}
       * @since 1.13
       */
      protected AddPhotoToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Photo content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public AddPhotoToArtwork setAlt(java.lang.String alt) {
        return (AddPhotoToArtwork) super.setAlt(alt);
      }

      @Override
      public AddPhotoToArtwork setFields(java.lang.String fields) {
        return (AddPhotoToArtwork) super.setFields(fields);
      }

      @Override
      public AddPhotoToArtwork setKey(java.lang.String key) {
        return (AddPhotoToArtwork) super.setKey(key);
      }

      @Override
      public AddPhotoToArtwork setOauthToken(java.lang.String oauthToken) {
        return (AddPhotoToArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public AddPhotoToArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddPhotoToArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddPhotoToArtwork setQuotaUser(java.lang.String quotaUser) {
        return (AddPhotoToArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddPhotoToArtwork setUserIp(java.lang.String userIp) {
        return (AddPhotoToArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public AddPhotoToArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public AddPhotoToArtwork set(String parameterName, Object value) {
        return (AddPhotoToArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.addReproductionToArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddReproductionToArtwork#execute()} method to invoke the remote
     * operation.
     *
     * @param artworkId
     * @param content the {@link com.appspot.freya_app.freya.model.Reproduction}
     * @return the request
     */
    public AddReproductionToArtwork addReproductionToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Reproduction content) throws java.io.IOException {
      AddReproductionToArtwork result = new AddReproductionToArtwork(artworkId, content);
      initialize(result);
      return result;
    }

    public class AddReproductionToArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.Response> {

      private static final String REST_PATH = "artworks/{artwork_id}/reproductions/add";

      /**
       * Create a request for the method "artworks.addReproductionToArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddReproductionToArtwork#execute()} method to invoke the remote
       * operation.
 {@link AddReproductionToArtwork#initialize(com.google.api.client.googleapis.serv
       * ices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artworkId
       * @param content the {@link com.appspot.freya_app.freya.model.Reproduction}
       * @since 1.13
       */
      protected AddReproductionToArtwork(java.lang.String artworkId, com.appspot.freya_app.freya.model.Reproduction content) {
        super(Freya.this, "POST", REST_PATH, content, com.appspot.freya_app.freya.model.Response.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public AddReproductionToArtwork setAlt(java.lang.String alt) {
        return (AddReproductionToArtwork) super.setAlt(alt);
      }

      @Override
      public AddReproductionToArtwork setFields(java.lang.String fields) {
        return (AddReproductionToArtwork) super.setFields(fields);
      }

      @Override
      public AddReproductionToArtwork setKey(java.lang.String key) {
        return (AddReproductionToArtwork) super.setKey(key);
      }

      @Override
      public AddReproductionToArtwork setOauthToken(java.lang.String oauthToken) {
        return (AddReproductionToArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public AddReproductionToArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddReproductionToArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddReproductionToArtwork setQuotaUser(java.lang.String quotaUser) {
        return (AddReproductionToArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddReproductionToArtwork setUserIp(java.lang.String userIp) {
        return (AddReproductionToArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public AddReproductionToArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public AddReproductionToArtwork set(String parameterName, Object value) {
        return (AddReproductionToArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.get".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param artworkId
     * @return the request
     */
    public Get get(java.lang.String artworkId) throws java.io.IOException {
      Get result = new Get(artworkId);
      initialize(result);
      return result;
    }

    public class Get extends FreyaRequest<com.appspot.freya_app.freya.model.Artwork> {

      private static final String REST_PATH = "artworks/{artwork_id}";

      /**
       * Create a request for the method "artworks.get".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Get#execute()} method to invoke the remote operation.
 {@link
       * Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param artworkId
       * @since 1.13
       */
      protected Get(java.lang.String artworkId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.Artwork.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUserIp(java.lang.String userIp) {
        return (Get) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public Get setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.getPhotos".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetPhotos#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public GetPhotos getPhotos() throws java.io.IOException {
      GetPhotos result = new GetPhotos();
      initialize(result);
      return result;
    }

    public class GetPhotos extends FreyaRequest<com.appspot.freya_app.freya.model.PhotoCollection> {

      private static final String REST_PATH = "artworks/photos";

      /**
       * Create a request for the method "artworks.getPhotos".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetPhotos#execute()} method to invoke the remote operation.

       * {@link
       * GetPhotos#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected GetPhotos() {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.PhotoCollection.class);
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetPhotos setAlt(java.lang.String alt) {
        return (GetPhotos) super.setAlt(alt);
      }

      @Override
      public GetPhotos setFields(java.lang.String fields) {
        return (GetPhotos) super.setFields(fields);
      }

      @Override
      public GetPhotos setKey(java.lang.String key) {
        return (GetPhotos) super.setKey(key);
      }

      @Override
      public GetPhotos setOauthToken(java.lang.String oauthToken) {
        return (GetPhotos) super.setOauthToken(oauthToken);
      }

      @Override
      public GetPhotos setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetPhotos) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetPhotos setQuotaUser(java.lang.String quotaUser) {
        return (GetPhotos) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetPhotos setUserIp(java.lang.String userIp) {
        return (GetPhotos) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key
      private java.lang.String technique;

      /**

       */
      public java.lang.String getTechnique() {
        return technique;
      }

      public GetPhotos setTechnique(java.lang.String technique) {
        this.technique = technique;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String support;

      /**

       */
      public java.lang.String getSupport() {
        return support;
      }

      public GetPhotos setSupport(java.lang.String support) {
        this.support = support;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public GetPhotos setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String year;

      /**

       */
      public java.lang.String getYear() {
        return year;
      }

      public GetPhotos setYear(java.lang.String year) {
        this.year = year;
        return this;
      }

      @Override
      public GetPhotos set(String parameterName, Object value) {
        return (GetPhotos) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.getPhotosByArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetPhotosByArtwork#execute()} method to invoke the remote operation.
     *
     * @param artworkId
     * @return the request
     */
    public GetPhotosByArtwork getPhotosByArtwork(java.lang.String artworkId) throws java.io.IOException {
      GetPhotosByArtwork result = new GetPhotosByArtwork(artworkId);
      initialize(result);
      return result;
    }

    public class GetPhotosByArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.PhotoCollection> {

      private static final String REST_PATH = "artworks/{artwork_id}/photos";

      /**
       * Create a request for the method "artworks.getPhotosByArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetPhotosByArtwork#execute()} method to invoke the remote
       * operation.
 {@link GetPhotosByArtwork#initialize(com.google.api.client.googleapis.services.A
       * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param artworkId
       * @since 1.13
       */
      protected GetPhotosByArtwork(java.lang.String artworkId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.PhotoCollection.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetPhotosByArtwork setAlt(java.lang.String alt) {
        return (GetPhotosByArtwork) super.setAlt(alt);
      }

      @Override
      public GetPhotosByArtwork setFields(java.lang.String fields) {
        return (GetPhotosByArtwork) super.setFields(fields);
      }

      @Override
      public GetPhotosByArtwork setKey(java.lang.String key) {
        return (GetPhotosByArtwork) super.setKey(key);
      }

      @Override
      public GetPhotosByArtwork setOauthToken(java.lang.String oauthToken) {
        return (GetPhotosByArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public GetPhotosByArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetPhotosByArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetPhotosByArtwork setQuotaUser(java.lang.String quotaUser) {
        return (GetPhotosByArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetPhotosByArtwork setUserIp(java.lang.String userIp) {
        return (GetPhotosByArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public GetPhotosByArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public GetPhotosByArtwork set(String parameterName, Object value) {
        return (GetPhotosByArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.getReproductionsByArtwork".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetReproductionsByArtwork#execute()} method to invoke the remote
     * operation.
     *
     * @param artworkId
     * @return the request
     */
    public GetReproductionsByArtwork getReproductionsByArtwork(java.lang.String artworkId) throws java.io.IOException {
      GetReproductionsByArtwork result = new GetReproductionsByArtwork(artworkId);
      initialize(result);
      return result;
    }

    public class GetReproductionsByArtwork extends FreyaRequest<com.appspot.freya_app.freya.model.ReproductionCollection> {

      private static final String REST_PATH = "artworks/{artwork_id}/reproductions";

      /**
       * Create a request for the method "artworks.getReproductionsByArtwork".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetReproductionsByArtwork#execute()} method to invoke the remote
       * operation.
 {@link GetReproductionsByArtwork#initialize(com.google.api.client.googleapis.ser
       * vices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately
       * after invoking the constructor.

       *
       * @param artworkId
       * @since 1.13
       */
      protected GetReproductionsByArtwork(java.lang.String artworkId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ReproductionCollection.class);
        this.artworkId = com.google.api.client.util.Preconditions.checkNotNull(artworkId, "Required parameter artworkId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetReproductionsByArtwork setAlt(java.lang.String alt) {
        return (GetReproductionsByArtwork) super.setAlt(alt);
      }

      @Override
      public GetReproductionsByArtwork setFields(java.lang.String fields) {
        return (GetReproductionsByArtwork) super.setFields(fields);
      }

      @Override
      public GetReproductionsByArtwork setKey(java.lang.String key) {
        return (GetReproductionsByArtwork) super.setKey(key);
      }

      @Override
      public GetReproductionsByArtwork setOauthToken(java.lang.String oauthToken) {
        return (GetReproductionsByArtwork) super.setOauthToken(oauthToken);
      }

      @Override
      public GetReproductionsByArtwork setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetReproductionsByArtwork) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetReproductionsByArtwork setQuotaUser(java.lang.String quotaUser) {
        return (GetReproductionsByArtwork) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetReproductionsByArtwork setUserIp(java.lang.String userIp) {
        return (GetReproductionsByArtwork) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("artwork_id")
      private java.lang.String artworkId;

      /**

       */
      public java.lang.String getArtworkId() {
        return artworkId;
      }

      public GetReproductionsByArtwork setArtworkId(java.lang.String artworkId) {
        this.artworkId = artworkId;
        return this;
      }

      @Override
      public GetReproductionsByArtwork set(String parameterName, Object value) {
        return (GetReproductionsByArtwork) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "artworks.list".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public List list() throws java.io.IOException {
      List result = new List();
      initialize(result);
      return result;
    }

    public class List extends FreyaRequest<com.appspot.freya_app.freya.model.ArtworkCollection> {

      private static final String REST_PATH = "artworks";

      /**
       * Create a request for the method "artworks.list".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
 {@link
       * List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected List() {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ArtworkCollection.class);
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUserIp(java.lang.String userIp) {
        return (List) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key
      private java.lang.String technique;

      /**

       */
      public java.lang.String getTechnique() {
        return technique;
      }

      public List setTechnique(java.lang.String technique) {
        this.technique = technique;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String support;

      /**

       */
      public java.lang.String getSupport() {
        return support;
      }

      public List setSupport(java.lang.String support) {
        this.support = support;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String tag;

      /**

       */
      public java.lang.String getTag() {
        return tag;
      }

      public List setTag(java.lang.String tag) {
        this.tag = tag;
        return this;
      }

      @com.google.api.client.util.Key("reproduction_count")
      private java.lang.Integer reproductionCount;

      /**

       */
      public java.lang.Integer getReproductionCount() {
        return reproductionCount;
      }

      public List setReproductionCount(java.lang.Integer reproductionCount) {
        this.reproductionCount = reproductionCount;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String year;

      /**

       */
      public java.lang.String getYear() {
        return year;
      }

      public List setYear(java.lang.String year) {
        this.year = year;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Reproductions collection.
   *
   *
The typical use is:

   *

   *   {@code Freya freya = new Freya(...);}
   *   {@code Freya.Reproductions.List request = freya.reproductions().list(parameters ...)}
   *

   *
   * @return the resource collection
   */
  public Reproductions reproductions() {
    return new Reproductions();
  }

  /**
   * The "reproductions" collection of methods.
   */
  public class Reproductions {

    /**
     * Create a request for the method "reproductions.addPriceToReproduction".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddPriceToReproduction#execute()} method to invoke the remote
     * operation.
     *
     * @param reproductionId
     * @param stock
     * @return the request
     */
    public AddPriceToReproduction addPriceToReproduction(java.lang.String reproductionId, java.lang.String stock) throws java.io.IOException {
      AddPriceToReproduction result = new AddPriceToReproduction(reproductionId, stock);
      initialize(result);
      return result;
    }

    public class AddPriceToReproduction extends FreyaRequest<Void> {

      private static final String REST_PATH = "reproductions/{reproduction_id}/price/add";

      /**
       * Create a request for the method "reproductions.addPriceToReproduction".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddPriceToReproduction#execute()} method to invoke the remote
       * operation.
 {@link AddPriceToReproduction#initialize(com.google.api.client.googleapis.servic
       * es.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param reproductionId
       * @param stock
       * @since 1.13
       */
      protected AddPriceToReproduction(java.lang.String reproductionId, java.lang.String stock) {
        super(Freya.this, "POST", REST_PATH, null, Void.class);
        this.reproductionId = com.google.api.client.util.Preconditions.checkNotNull(reproductionId, "Required parameter reproductionId must be specified.");
        this.stock = com.google.api.client.util.Preconditions.checkNotNull(stock, "Required parameter stock must be specified.");
      }

      @Override
      public AddPriceToReproduction setAlt(java.lang.String alt) {
        return (AddPriceToReproduction) super.setAlt(alt);
      }

      @Override
      public AddPriceToReproduction setFields(java.lang.String fields) {
        return (AddPriceToReproduction) super.setFields(fields);
      }

      @Override
      public AddPriceToReproduction setKey(java.lang.String key) {
        return (AddPriceToReproduction) super.setKey(key);
      }

      @Override
      public AddPriceToReproduction setOauthToken(java.lang.String oauthToken) {
        return (AddPriceToReproduction) super.setOauthToken(oauthToken);
      }

      @Override
      public AddPriceToReproduction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddPriceToReproduction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddPriceToReproduction setQuotaUser(java.lang.String quotaUser) {
        return (AddPriceToReproduction) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddPriceToReproduction setUserIp(java.lang.String userIp) {
        return (AddPriceToReproduction) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("reproduction_id")
      private java.lang.String reproductionId;

      /**

       */
      public java.lang.String getReproductionId() {
        return reproductionId;
      }

      public AddPriceToReproduction setReproductionId(java.lang.String reproductionId) {
        this.reproductionId = reproductionId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String stock;

      /**

       */
      public java.lang.String getStock() {
        return stock;
      }

      public AddPriceToReproduction setStock(java.lang.String stock) {
        this.stock = stock;
        return this;
      }

      @Override
      public AddPriceToReproduction set(String parameterName, Object value) {
        return (AddPriceToReproduction) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "reproductions.addStockToReproduction".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link AddStockToReproduction#execute()} method to invoke the remote
     * operation.
     *
     * @param reproductionId
     * @param stock
     * @return the request
     */
    public AddStockToReproduction addStockToReproduction(java.lang.String reproductionId, java.lang.String stock) throws java.io.IOException {
      AddStockToReproduction result = new AddStockToReproduction(reproductionId, stock);
      initialize(result);
      return result;
    }

    public class AddStockToReproduction extends FreyaRequest<Void> {

      private static final String REST_PATH = "reproductions/{reproduction_id}/stock/add";

      /**
       * Create a request for the method "reproductions.addStockToReproduction".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link AddStockToReproduction#execute()} method to invoke the remote
       * operation.
 {@link AddStockToReproduction#initialize(com.google.api.client.googleapis.servic
       * es.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param reproductionId
       * @param stock
       * @since 1.13
       */
      protected AddStockToReproduction(java.lang.String reproductionId, java.lang.String stock) {
        super(Freya.this, "POST", REST_PATH, null, Void.class);
        this.reproductionId = com.google.api.client.util.Preconditions.checkNotNull(reproductionId, "Required parameter reproductionId must be specified.");
        this.stock = com.google.api.client.util.Preconditions.checkNotNull(stock, "Required parameter stock must be specified.");
      }

      @Override
      public AddStockToReproduction setAlt(java.lang.String alt) {
        return (AddStockToReproduction) super.setAlt(alt);
      }

      @Override
      public AddStockToReproduction setFields(java.lang.String fields) {
        return (AddStockToReproduction) super.setFields(fields);
      }

      @Override
      public AddStockToReproduction setKey(java.lang.String key) {
        return (AddStockToReproduction) super.setKey(key);
      }

      @Override
      public AddStockToReproduction setOauthToken(java.lang.String oauthToken) {
        return (AddStockToReproduction) super.setOauthToken(oauthToken);
      }

      @Override
      public AddStockToReproduction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (AddStockToReproduction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public AddStockToReproduction setQuotaUser(java.lang.String quotaUser) {
        return (AddStockToReproduction) super.setQuotaUser(quotaUser);
      }

      @Override
      public AddStockToReproduction setUserIp(java.lang.String userIp) {
        return (AddStockToReproduction) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("reproduction_id")
      private java.lang.String reproductionId;

      /**

       */
      public java.lang.String getReproductionId() {
        return reproductionId;
      }

      public AddStockToReproduction setReproductionId(java.lang.String reproductionId) {
        this.reproductionId = reproductionId;
        return this;
      }

      @com.google.api.client.util.Key
      private java.lang.String stock;

      /**

       */
      public java.lang.String getStock() {
        return stock;
      }

      public AddStockToReproduction setStock(java.lang.String stock) {
        this.stock = stock;
        return this;
      }

      @Override
      public AddStockToReproduction set(String parameterName, Object value) {
        return (AddStockToReproduction) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "reproductions.get".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param reproductionId
     * @return the request
     */
    public Get get(java.lang.String reproductionId) throws java.io.IOException {
      Get result = new Get(reproductionId);
      initialize(result);
      return result;
    }

    public class Get extends FreyaRequest<com.appspot.freya_app.freya.model.Reproduction> {

      private static final String REST_PATH = "reproductions/{reproduction_id}";

      /**
       * Create a request for the method "reproductions.get".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Get#execute()} method to invoke the remote operation.
 {@link
       * Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @param reproductionId
       * @since 1.13
       */
      protected Get(java.lang.String reproductionId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.Reproduction.class);
        this.reproductionId = com.google.api.client.util.Preconditions.checkNotNull(reproductionId, "Required parameter reproductionId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public Get setAlt(java.lang.String alt) {
        return (Get) super.setAlt(alt);
      }

      @Override
      public Get setFields(java.lang.String fields) {
        return (Get) super.setFields(fields);
      }

      @Override
      public Get setKey(java.lang.String key) {
        return (Get) super.setKey(key);
      }

      @Override
      public Get setOauthToken(java.lang.String oauthToken) {
        return (Get) super.setOauthToken(oauthToken);
      }

      @Override
      public Get setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Get) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Get setQuotaUser(java.lang.String quotaUser) {
        return (Get) super.setQuotaUser(quotaUser);
      }

      @Override
      public Get setUserIp(java.lang.String userIp) {
        return (Get) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("reproduction_id")
      private java.lang.String reproductionId;

      /**

       */
      public java.lang.String getReproductionId() {
        return reproductionId;
      }

      public Get setReproductionId(java.lang.String reproductionId) {
        this.reproductionId = reproductionId;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "reproductions.getArtworkByReproduction".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link GetArtworkByReproduction#execute()} method to invoke the remote
     * operation.
     *
     * @param reproductionId
     * @return the request
     */
    public GetArtworkByReproduction getArtworkByReproduction(java.lang.String reproductionId) throws java.io.IOException {
      GetArtworkByReproduction result = new GetArtworkByReproduction(reproductionId);
      initialize(result);
      return result;
    }

    public class GetArtworkByReproduction extends FreyaRequest<com.appspot.freya_app.freya.model.Artwork> {

      private static final String REST_PATH = "reproductions/{reproduction_id}/artwork";

      /**
       * Create a request for the method "reproductions.getArtworkByReproduction".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link GetArtworkByReproduction#execute()} method to invoke the remote
       * operation.
 {@link GetArtworkByReproduction#initialize(com.google.api.client.googleapis.serv
       * ices.AbstractGoogleClientRequest)} must be called to initialize this instance immediately after
       * invoking the constructor.

       *
       * @param reproductionId
       * @since 1.13
       */
      protected GetArtworkByReproduction(java.lang.String reproductionId) {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.Artwork.class);
        this.reproductionId = com.google.api.client.util.Preconditions.checkNotNull(reproductionId, "Required parameter reproductionId must be specified.");
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public GetArtworkByReproduction setAlt(java.lang.String alt) {
        return (GetArtworkByReproduction) super.setAlt(alt);
      }

      @Override
      public GetArtworkByReproduction setFields(java.lang.String fields) {
        return (GetArtworkByReproduction) super.setFields(fields);
      }

      @Override
      public GetArtworkByReproduction setKey(java.lang.String key) {
        return (GetArtworkByReproduction) super.setKey(key);
      }

      @Override
      public GetArtworkByReproduction setOauthToken(java.lang.String oauthToken) {
        return (GetArtworkByReproduction) super.setOauthToken(oauthToken);
      }

      @Override
      public GetArtworkByReproduction setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (GetArtworkByReproduction) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public GetArtworkByReproduction setQuotaUser(java.lang.String quotaUser) {
        return (GetArtworkByReproduction) super.setQuotaUser(quotaUser);
      }

      @Override
      public GetArtworkByReproduction setUserIp(java.lang.String userIp) {
        return (GetArtworkByReproduction) super.setUserIp(userIp);
      }

      @com.google.api.client.util.Key("reproduction_id")
      private java.lang.String reproductionId;

      /**

       */
      public java.lang.String getReproductionId() {
        return reproductionId;
      }

      public GetArtworkByReproduction setReproductionId(java.lang.String reproductionId) {
        this.reproductionId = reproductionId;
        return this;
      }

      @Override
      public GetArtworkByReproduction set(String parameterName, Object value) {
        return (GetArtworkByReproduction) super.set(parameterName, value);
      }
    }
    /**
     * Create a request for the method "reproductions.list".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link List#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public List list() throws java.io.IOException {
      List result = new List();
      initialize(result);
      return result;
    }

    public class List extends FreyaRequest<com.appspot.freya_app.freya.model.ReproductionCollection> {

      private static final String REST_PATH = "reproductions";

      /**
       * Create a request for the method "reproductions.list".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
 {@link
       * List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must be
       * called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected List() {
        super(Freya.this, "GET", REST_PATH, null, com.appspot.freya_app.freya.model.ReproductionCollection.class);
      }

      @Override
      public com.google.api.client.http.HttpResponse executeUsingHead() throws java.io.IOException {
        return super.executeUsingHead();
      }

      @Override
      public com.google.api.client.http.HttpRequest buildHttpRequestUsingHead() throws java.io.IOException {
        return super.buildHttpRequestUsingHead();
      }

      @Override
      public List setAlt(java.lang.String alt) {
        return (List) super.setAlt(alt);
      }

      @Override
      public List setFields(java.lang.String fields) {
        return (List) super.setFields(fields);
      }

      @Override
      public List setKey(java.lang.String key) {
        return (List) super.setKey(key);
      }

      @Override
      public List setOauthToken(java.lang.String oauthToken) {
        return (List) super.setOauthToken(oauthToken);
      }

      @Override
      public List setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (List) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public List setQuotaUser(java.lang.String quotaUser) {
        return (List) super.setQuotaUser(quotaUser);
      }

      @Override
      public List setUserIp(java.lang.String userIp) {
        return (List) super.setUserIp(userIp);
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }

  }

  /**
   * An accessor for creating requests from the Test collection.
   *
   *
The typical use is:

   *

   *   {@code Freya freya = new Freya(...);}
   *   {@code Freya.Test.List request = freya.test().list(parameters ...)}
   *

   *
   * @return the resource collection
   */
  public Test test() {
    return new Test();
  }

  /**
   * The "test" collection of methods.
   */
  public class Test {

    /**
     * Create a request for the method "test.populate".
     *
     * This request holds the parameters needed by the freya server.  After setting any optional
     * parameters, call the {@link Populate#execute()} method to invoke the remote operation.
     *
     * @return the request
     */
    public Populate populate() throws java.io.IOException {
      Populate result = new Populate();
      initialize(result);
      return result;
    }

    public class Populate extends FreyaRequest<Void> {

      private static final String REST_PATH = "populate";

      /**
       * Create a request for the method "test.populate".
       *
       * This request holds the parameters needed by the the freya server.  After setting any optional
       * parameters, call the {@link Populate#execute()} method to invoke the remote operation.

       * {@link
       * Populate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor.

       *
       * @since 1.13
       */
      protected Populate() {
        super(Freya.this, "POST", REST_PATH, null, Void.class);
      }

      @Override
      public Populate setAlt(java.lang.String alt) {
        return (Populate) super.setAlt(alt);
      }

      @Override
      public Populate setFields(java.lang.String fields) {
        return (Populate) super.setFields(fields);
      }

      @Override
      public Populate setKey(java.lang.String key) {
        return (Populate) super.setKey(key);
      }

      @Override
      public Populate setOauthToken(java.lang.String oauthToken) {
        return (Populate) super.setOauthToken(oauthToken);
      }

      @Override
      public Populate setPrettyPrint(java.lang.Boolean prettyPrint) {
        return (Populate) super.setPrettyPrint(prettyPrint);
      }

      @Override
      public Populate setQuotaUser(java.lang.String quotaUser) {
        return (Populate) super.setQuotaUser(quotaUser);
      }

      @Override
      public Populate setUserIp(java.lang.String userIp) {
        return (Populate) super.setUserIp(userIp);
      }

      @Override
      public Populate set(String parameterName, Object value) {
        return (Populate) super.set(parameterName, value);
      }
    }

  }

  /**
   * Builder for {@link Freya}.
   *
   *

   * Implementation is not thread-safe.
   *

   *
   * @since 1.3.0
   */
  public static final class Builder extends com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient.Builder {

    /**
     * Returns an instance of a new builder.
     *
     * @param transport HTTP transport, which should normally be:
     *

     *
Google App Engine:
     *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}

     *
Android: {@code newCompatibleTransport} from
     *        {@code com.google.api.client.extensions.android.http.AndroidHttp}

     *
Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
     *

     *

     * @param jsonFactory JSON factory, which may be:
     *

     *
Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}

     *
Google GSON: {@code com.google.api.client.json.gson.GsonFactory}

     *
Android Honeycomb or higher:
     *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}

     *

     * @param httpRequestInitializer HTTP request initializer or {@code null} for none
     * @since 1.7
     */
    public Builder(com.google.api.client.http.HttpTransport transport, com.google.api.client.json.JsonFactory jsonFactory,
        com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
      super(
          transport,
          jsonFactory,
          DEFAULT_ROOT_URL,
          DEFAULT_SERVICE_PATH,
          httpRequestInitializer,
          false);
    }

    /** Builds a new instance of {@link Freya}. */
    @Override
    public Freya build() {
      return new Freya(this);
    }

    @Override
    public Builder setRootUrl(String rootUrl) {
      return (Builder) super.setRootUrl(rootUrl);
    }

    @Override
    public Builder setServicePath(String servicePath) {
      return (Builder) super.setServicePath(servicePath);
    }

    @Override
    public Builder setHttpRequestInitializer(com.google.api.client.http.HttpRequestInitializer httpRequestInitializer) {
      return (Builder) super.setHttpRequestInitializer(httpRequestInitializer);
    }

    @Override
    public Builder setApplicationName(String applicationName) {
      return (Builder) super.setApplicationName(applicationName);
    }

    @Override
    public Builder setSuppressPatternChecks(boolean suppressPatternChecks) {
      return (Builder) super.setSuppressPatternChecks(suppressPatternChecks);
    }

    @Override
    public Builder setSuppressRequiredParameterChecks(boolean suppressRequiredParameterChecks) {
      return (Builder) super.setSuppressRequiredParameterChecks(suppressRequiredParameterChecks);
    }

    @Override
    public Builder setSuppressAllChecks(boolean suppressAllChecks) {
      return (Builder) super.setSuppressAllChecks(suppressAllChecks);
    }

    /**
     * Set the {@link FreyaRequestInitializer}.
     *
     * @since 1.12
     */
    public Builder setFreyaRequestInitializer(
        FreyaRequestInitializer freyaRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(freyaRequestInitializer);
    }

    @Override
    public Builder setGoogleClientRequestInitializer(
        com.google.api.client.googleapis.services.GoogleClientRequestInitializer googleClientRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(googleClientRequestInitializer);
    }
  }
}