/*
 * 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://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.sasportal.v1alpha1;

/**
 * Service definition for Sasportal (v1alpha1).
 *
 * <p>
 * 
 * </p>
 *
 * <p>
 * For more information about this service, see the
 * <a href="https://developers.google.com/spectrum-access-system/" target="_blank">API Documentation</a>
 * </p>
 *
 * <p>
 * This service uses {@link SasportalRequestInitializer} to initialize global parameters via its
 * {@link Builder}.
 * </p>
 *
 * @since 1.3
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public class Sasportal 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 >= 32 ||
        (com.google.api.client.googleapis.GoogleUtils.MINOR_VERSION == 31 &&
        com.google.api.client.googleapis.GoogleUtils.BUGFIX_VERSION >= 1)),
        "You are currently running with version %s of google-api-client. " +
        "You need at least version 1.31.1 of google-api-client to run version " +
        "1.32.1 of the SAS Portal API 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://sasportal.googleapis.com/";

  /**
   * The default encoded mTLS root URL of the service. This is determined when the library is generated
   * and normally should not be changed.
   *
   * @since 1.31
   */
  public static final String DEFAULT_MTLS_ROOT_URL = "https://sasportal.mtls.googleapis.com/";

  /**
   * 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 = "";

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

  /**
   * 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.
   *
   * <p>
   * Use {@link Builder} if you need to specify any of the optional parameters.
   * </p>
   *
   * @param transport HTTP transport, which should normally be:
   *        <ul>
   *        <li>Google App Engine:
   *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}</li>
   *        <li>Android: {@code newCompatibleTransport} from
   *        {@code com.google.api.client.extensions.android.http.AndroidHttp}</li>
   *        <li>Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
   *        </li>
   *        </ul>
   * @param jsonFactory JSON factory, which may be:
   *        <ul>
   *        <li>Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}</li>
   *        <li>Google GSON: {@code com.google.api.client.json.gson.GsonFactory}</li>
   *        <li>Android Honeycomb or higher:
   *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}</li>
   *        </ul>
   * @param httpRequestInitializer HTTP request initializer or {@code null} for none
   * @since 1.7
   */
  public Sasportal(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
   */
  Sasportal(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 Customers collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code Sasportal sasportal = new Sasportal(...);}
   *   {@code Sasportal.Customers.List request = sasportal.customers().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Customers customers() {
    return new Customers();
  }

  /**
   * The "customers" collection of methods.
   */
  public class Customers {

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

    public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer> {

      private static final String REST_PATH = "v1alpha1/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^customers/[^/]+$");

      /**
       * Returns a requested customer.
       *
       * Create a request for the method "customers.get".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the customer.
       * @since 1.13
       */
      protected Get(java.lang.String name) {
        super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^customers/[^/]+$");
        }
      }

      @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 set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

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

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @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 setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The name of the customer. */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the customer.
       */
      public java.lang.String getName() {
        return name;
      }

      /** Required. The name of the customer. */
      public Get setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^customers/[^/]+$");
        }
        this.name = name;
        return this;
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Returns a list of requested customers.
     *
     * Create a request for the method "customers.list".
     *
     * This request holds the parameters needed by the sasportal 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 SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListCustomersResponse> {

      private static final String REST_PATH = "v1alpha1/customers";

      /**
       * Returns a list of requested customers.
       *
       * Create a request for the method "customers.list".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
       * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @since 1.13
       */
      protected List() {
        super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListCustomersResponse.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 set$Xgafv(java.lang.String $Xgafv) {
        return (List) super.set$Xgafv($Xgafv);
      }

      @Override
      public List setAccessToken(java.lang.String accessToken) {
        return (List) super.setAccessToken(accessToken);
      }

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

      @Override
      public List setCallback(java.lang.String callback) {
        return (List) super.setCallback(callback);
      }

      @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 setUploadType(java.lang.String uploadType) {
        return (List) super.setUploadType(uploadType);
      }

      @Override
      public List setUploadProtocol(java.lang.String uploadProtocol) {
        return (List) super.setUploadProtocol(uploadProtocol);
      }

      /** The maximum number of customers to return in the response. */
      @com.google.api.client.util.Key
      private java.lang.Integer pageSize;

      /** The maximum number of customers to return in the response.
       */
      public java.lang.Integer getPageSize() {
        return pageSize;
      }

      /** The maximum number of customers to return in the response. */
      public List setPageSize(java.lang.Integer pageSize) {
        this.pageSize = pageSize;
        return this;
      }

      /**
       * A pagination token returned from a previous call to ListCustomers that indicates where this
       * listing should continue from.
       */
      @com.google.api.client.util.Key
      private java.lang.String pageToken;

      /** A pagination token returned from a previous call to ListCustomers that indicates where this listing
     should continue from.
       */
      public java.lang.String getPageToken() {
        return pageToken;
      }

      /**
       * A pagination token returned from a previous call to ListCustomers that indicates where this
       * listing should continue from.
       */
      public List setPageToken(java.lang.String pageToken) {
        this.pageToken = pageToken;
        return this;
      }

      @Override
      public List set(String parameterName, Object value) {
        return (List) super.set(parameterName, value);
      }
    }
    /**
     * Updates an existing customer.
     *
     * Create a request for the method "customers.patch".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
     *
     * @param name Output only. Resource name of the customer.
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer}
     * @return the request
     */
    public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer content) throws java.io.IOException {
      Patch result = new Patch(name, content);
      initialize(result);
      return result;
    }

    public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer> {

      private static final String REST_PATH = "v1alpha1/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^customers/[^/]+$");

      /**
       * Updates an existing customer.
       *
       * Create a request for the method "customers.patch".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       * <p> {@link
       * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
       * be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Output only. Resource name of the customer.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer}
       * @since 1.13
       */
      protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer content) {
        super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalCustomer.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^customers/[^/]+$");
        }
      }

      @Override
      public Patch set$Xgafv(java.lang.String $Xgafv) {
        return (Patch) super.set$Xgafv($Xgafv);
      }

      @Override
      public Patch setAccessToken(java.lang.String accessToken) {
        return (Patch) super.setAccessToken(accessToken);
      }

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

      @Override
      public Patch setCallback(java.lang.String callback) {
        return (Patch) super.setCallback(callback);
      }

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

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

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

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

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

      @Override
      public Patch setUploadType(java.lang.String uploadType) {
        return (Patch) super.setUploadType(uploadType);
      }

      @Override
      public Patch setUploadProtocol(java.lang.String uploadProtocol) {
        return (Patch) super.setUploadProtocol(uploadProtocol);
      }

      /** Output only. Resource name of the customer. */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Output only. Resource name of the customer.
       */
      public java.lang.String getName() {
        return name;
      }

      /** Output only. Resource name of the customer. */
      public Patch setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^customers/[^/]+$");
        }
        this.name = name;
        return this;
      }

      /** Fields to be updated. */
      @com.google.api.client.util.Key
      private String updateMask;

      /** Fields to be updated.
       */
      public String getUpdateMask() {
        return updateMask;
      }

      /** Fields to be updated. */
      public Patch setUpdateMask(String updateMask) {
        this.updateMask = updateMask;
        return this;
      }

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

    /**
     * An accessor for creating requests from the Deployments collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Deployments.List request = sasportal.deployments().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Deployments deployments() {
      return new Deployments();
    }

    /**
     * The "deployments" collection of methods.
     */
    public class Deployments {

      /**
       * Creates a new deployment.
       *
       * Create a request for the method "deployments.create".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name where the deployment is to be created.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
       * @return the request
       */
      public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) throws java.io.IOException {
        Create result = new Create(parent, content);
        initialize(result);
        return result;
      }

      public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

        private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Creates a new deployment.
         *
         * Create a request for the method "deployments.create".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name where the deployment is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
         * @since 1.13
         */
        protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

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

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name where the deployment is to be created. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name where the deployment is to be created.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name where the deployment is to be created. */
        public Create setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

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

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

        /**
         * Deletes a deployment.
         *
         * Create a request for the method "deployments.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

        /**
         * Returns a requested deployment.
         *
         * Create a request for the method "deployments.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists deployments.
       *
       * Create a request for the method "deployments.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Lists deployments.
         *
         * Create a request for the method "deployments.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no deployments
         * are filtered.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
       "direct_children". The filter is case insensitive. If empty, then no deployments are filtered.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no deployments
         * are filtered.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /** The maximum number of deployments to return in the response. */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of deployments to return in the response.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /** The maximum number of deployments to return in the response. */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListDeployments that indicates where
         * this listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListDeployments that indicates where this
       listing should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListDeployments that indicates where
         * this listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a deployment under another node or customer.
       *
       * Create a request for the method "deployments.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the deployment to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

        /**
         * Moves a deployment under another node or customer.
         *
         * Create a request for the method "deployments.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates an existing deployment.
       *
       * Create a request for the method "deployments.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. Resource name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

        /**
         * Updates an existing deployment.
         *
         * Create a request for the method "deployments.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. Resource name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. Resource name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. Resource name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. Resource name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

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

      /**
       * An accessor for creating requests from the Devices collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Devices devices() {
        return new Devices();
      }

      /**
       * The "devices" collection of methods.
       */
      public class Devices {

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

          /**
           * Creates a device under a node or customer.
           *
           * Create a request for the method "devices.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @return the request
         */
        public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
          CreateSigned result = new CreateSigned(parent, content);
          initialize(result);
          return result;
        }

        public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

          /**
           * Creates a signed device under a node or customer.
           *
           * Create a request for the method "devices.createSigned".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
           * operation. <p> {@link
           * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
           * @since 1.13
           */
          protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
          }

          @Override
          public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
            return (CreateSigned) super.set$Xgafv($Xgafv);
          }

          @Override
          public CreateSigned setAccessToken(java.lang.String accessToken) {
            return (CreateSigned) super.setAccessToken(accessToken);
          }

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

          @Override
          public CreateSigned setCallback(java.lang.String callback) {
            return (CreateSigned) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public CreateSigned setUploadType(java.lang.String uploadType) {
            return (CreateSigned) super.setUploadType(uploadType);
          }

          @Override
          public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
            return (CreateSigned) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public CreateSigned setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public CreateSigned set(String parameterName, Object value) {
            return (CreateSigned) super.set(parameterName, value);
          }
        }
        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/deployments/[^/]+$");

          /**
           * Lists devices under a node or customer.
           *
           * Create a request for the method "devices.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have one of the following formats: "sn=123454" or
         "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
         insensitive.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of devices to return in the response. If empty or zero, all devices will be
         listed. Must be in the range [0, 1000].
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDevices that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
    }
    /**
     * An accessor for creating requests from the Devices collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Devices devices() {
      return new Devices();
    }

    /**
     * The "devices" collection of methods.
     */
    public class Devices {

      /**
       * Creates a device under a node or customer.
       *
       * Create a request for the method "devices.create".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
       * @return the request
       */
      public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
        Create result = new Create(parent, content);
        initialize(result);
        return result;
      }

      public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @since 1.13
         */
        protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

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

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public Create setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Creates a signed device under a node or customer.
       *
       * Create a request for the method "devices.createSigned".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
       * @return the request
       */
      public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
        CreateSigned result = new CreateSigned(parent, content);
        initialize(result);
        return result;
      }

      public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
         * operation. <p> {@link
         * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @since 1.13
         */
        protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @Override
        public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
          return (CreateSigned) super.set$Xgafv($Xgafv);
        }

        @Override
        public CreateSigned setAccessToken(java.lang.String accessToken) {
          return (CreateSigned) super.setAccessToken(accessToken);
        }

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

        @Override
        public CreateSigned setCallback(java.lang.String callback) {
          return (CreateSigned) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public CreateSigned setUploadType(java.lang.String uploadType) {
          return (CreateSigned) super.setUploadType(uploadType);
        }

        @Override
        public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
          return (CreateSigned) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public CreateSigned setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

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

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Deletes a device.
         *
         * Create a request for the method "devices.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Gets details about a device.
         *
         * Create a request for the method "devices.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists devices under a node or customer.
       *
       * Create a request for the method "devices.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have one of the following formats: "sn=123454"
         * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter is
         * case insensitive.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have one of the following formats: "sn=123454" or
       "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
       insensitive.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have one of the following formats: "sn=123454"
         * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter is
         * case insensitive.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /**
         * The maximum number of devices to return in the response. If empty or zero, all devices
         * will be listed. Must be in the range [0, 1000].
         */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of devices to return in the response. If empty or zero, all devices will be
       listed. Must be in the range [0, 1000].
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /**
         * The maximum number of devices to return in the response. If empty or zero, all devices
         * will be listed. Must be in the range [0, 1000].
         */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListDevices that indicates where this
         * listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListDevices that indicates where this listing
       should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListDevices that indicates where this
         * listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a device under another node or customer.
       *
       * Create a request for the method "devices.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Moves a device under another node or customer.
         *
         * Create a request for the method "devices.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates a device.
       *
       * Create a request for the method "devices.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Updates a device.
         *
         * Create a request for the method "devices.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Signs a device.
       *
       * Create a request for the method "devices.signDevice".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link SignDevice#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
       * @return the request
       */
      public SignDevice signDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) throws java.io.IOException {
        SignDevice result = new SignDevice(name, content);
        initialize(result);
        return result;
      }

      public class SignDevice extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}:signDevice";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Signs a device.
         *
         * Create a request for the method "devices.signDevice".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link SignDevice#execute()} method to invoke the remote
         * operation. <p> {@link
         * SignDevice#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
         * @since 1.13
         */
        protected SignDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public SignDevice set$Xgafv(java.lang.String $Xgafv) {
          return (SignDevice) super.set$Xgafv($Xgafv);
        }

        @Override
        public SignDevice setAccessToken(java.lang.String accessToken) {
          return (SignDevice) super.setAccessToken(accessToken);
        }

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

        @Override
        public SignDevice setCallback(java.lang.String callback) {
          return (SignDevice) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public SignDevice setUploadType(java.lang.String uploadType) {
          return (SignDevice) super.setUploadType(uploadType);
        }

        @Override
        public SignDevice setUploadProtocol(java.lang.String uploadProtocol) {
          return (SignDevice) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public SignDevice setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public SignDevice set(String parameterName, Object value) {
          return (SignDevice) super.set(parameterName, value);
        }
      }
      /**
       * Updates a signed device.
       *
       * Create a request for the method "devices.updateSigned".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link UpdateSigned#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to update.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
       * @return the request
       */
      public UpdateSigned updateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) throws java.io.IOException {
        UpdateSigned result = new UpdateSigned(name, content);
        initialize(result);
        return result;
      }

      public class UpdateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}:updateSigned";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/devices/[^/]+$");

        /**
         * Updates a signed device.
         *
         * Create a request for the method "devices.updateSigned".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link UpdateSigned#execute()} method to invoke the remote
         * operation. <p> {@link
         * UpdateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to update.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
         * @since 1.13
         */
        protected UpdateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public UpdateSigned set$Xgafv(java.lang.String $Xgafv) {
          return (UpdateSigned) super.set$Xgafv($Xgafv);
        }

        @Override
        public UpdateSigned setAccessToken(java.lang.String accessToken) {
          return (UpdateSigned) super.setAccessToken(accessToken);
        }

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

        @Override
        public UpdateSigned setCallback(java.lang.String callback) {
          return (UpdateSigned) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public UpdateSigned setUploadType(java.lang.String uploadType) {
          return (UpdateSigned) super.setUploadType(uploadType);
        }

        @Override
        public UpdateSigned setUploadProtocol(java.lang.String uploadProtocol) {
          return (UpdateSigned) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to update. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to update.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to update. */
        public UpdateSigned setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

    }
    /**
     * An accessor for creating requests from the Nodes collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Nodes.List request = sasportal.nodes().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Nodes nodes() {
      return new Nodes();
    }

    /**
     * The "nodes" collection of methods.
     */
    public class Nodes {

      /**
       * Creates a new node.
       *
       * Create a request for the method "nodes.create".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name where the node is to be created.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
       * @return the request
       */
      public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
        Create result = new Create(parent, content);
        initialize(result);
        return result;
      }

      public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Creates a new node.
         *
         * Create a request for the method "nodes.create".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name where the node is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @since 1.13
         */
        protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

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

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name where the node is to be created. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name where the node is to be created.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name where the node is to be created. */
        public Create setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

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

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

        /**
         * Deletes a node.
         *
         * Create a request for the method "nodes.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

        /**
         * Returns a requested node.
         *
         * Create a request for the method "nodes.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists nodes.
       *
       * Create a request for the method "nodes.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name, for example, "nodes/1".
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+$");

        /**
         * Lists nodes.
         *
         * Create a request for the method "nodes.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name, for example, "nodes/1".
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name, for example, "nodes/1". */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name, for example, "nodes/1".
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name, for example, "nodes/1". */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^customers/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no nodes are
         * filtered.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
       "direct_children". The filter is case insensitive. If empty, then no nodes are filtered.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no nodes are
         * filtered.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /** The maximum number of nodes to return in the response. */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of nodes to return in the response.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /** The maximum number of nodes to return in the response. */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListNodes that indicates where this
         * listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListNodes that indicates where this listing
       should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListNodes that indicates where this
         * listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a node under another node or customer.
       *
       * Create a request for the method "nodes.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the node to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

        /**
         * Moves a node under another node or customer.
         *
         * Create a request for the method "nodes.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates an existing node.
       *
       * Create a request for the method "nodes.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. Resource name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

        /**
         * Updates an existing node.
         *
         * Create a request for the method "nodes.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. Resource name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. Resource name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. Resource name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. Resource name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^customers/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

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

      /**
       * An accessor for creating requests from the Deployments collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Deployments.List request = sasportal.deployments().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Deployments deployments() {
        return new Deployments();
      }

      /**
       * The "deployments" collection of methods.
       */
      public class Deployments {

        /**
         * Creates a new deployment.
         *
         * Create a request for the method "deployments.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name where the deployment is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

          private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Creates a new deployment.
           *
           * Create a request for the method "deployments.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name where the deployment is to be created.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name where the deployment is to be created. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name where the deployment is to be created.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name where the deployment is to be created. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Lists deployments.
         *
         * Create a request for the method "deployments.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Lists deployments.
           *
           * Create a request for the method "deployments.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no
           * deployments are filtered.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
         "direct_children". The filter is case insensitive. If empty, then no deployments are filtered.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no
           * deployments are filtered.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** The maximum number of deployments to return in the response. */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of deployments to return in the response.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /** The maximum number of deployments to return in the response. */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDeployments that indicates
           * where this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDeployments that indicates where this
         listing should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDeployments that indicates
           * where this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
      /**
       * An accessor for creating requests from the Devices collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Devices devices() {
        return new Devices();
      }

      /**
       * The "devices" collection of methods.
       */
      public class Devices {

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Creates a device under a node or customer.
           *
           * Create a request for the method "devices.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @return the request
         */
        public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
          CreateSigned result = new CreateSigned(parent, content);
          initialize(result);
          return result;
        }

        public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Creates a signed device under a node or customer.
           *
           * Create a request for the method "devices.createSigned".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
           * operation. <p> {@link
           * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
           * @since 1.13
           */
          protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
            return (CreateSigned) super.set$Xgafv($Xgafv);
          }

          @Override
          public CreateSigned setAccessToken(java.lang.String accessToken) {
            return (CreateSigned) super.setAccessToken(accessToken);
          }

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

          @Override
          public CreateSigned setCallback(java.lang.String callback) {
            return (CreateSigned) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public CreateSigned setUploadType(java.lang.String uploadType) {
            return (CreateSigned) super.setUploadType(uploadType);
          }

          @Override
          public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
            return (CreateSigned) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public CreateSigned setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public CreateSigned set(String parameterName, Object value) {
            return (CreateSigned) super.set(parameterName, value);
          }
        }
        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Lists devices under a node or customer.
           *
           * Create a request for the method "devices.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have one of the following formats: "sn=123454" or
         "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
         insensitive.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of devices to return in the response. If empty or zero, all devices will be
         listed. Must be in the range [0, 1000].
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDevices that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
      /**
       * An accessor for creating requests from the Nodes collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Nodes.List request = sasportal.nodes().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Nodes nodes() {
        return new Nodes();
      }

      /**
       * The "nodes" collection of methods.
       */
      public class Nodes {

        /**
         * Creates a new node.
         *
         * Create a request for the method "nodes.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name where the node is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

          private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Creates a new node.
           *
           * Create a request for the method "nodes.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name where the node is to be created.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name where the node is to be created. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name where the node is to be created.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name where the node is to be created. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Lists nodes.
         *
         * Create a request for the method "nodes.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name, for example, "nodes/1".
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^customers/[^/]+/nodes/[^/]+$");

          /**
           * Lists nodes.
           *
           * Create a request for the method "nodes.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name, for example, "nodes/1".
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name, for example, "nodes/1". */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name, for example, "nodes/1".
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name, for example, "nodes/1". */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^customers/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no nodes
           * are filtered.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
         "direct_children". The filter is case insensitive. If empty, then no nodes are filtered.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no nodes
           * are filtered.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** The maximum number of nodes to return in the response. */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of nodes to return in the response.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /** The maximum number of nodes to return in the response. */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListNodes that indicates where this
           * listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListNodes that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListNodes that indicates where this
           * listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
    }
  }

  /**
   * An accessor for creating requests from the Deployments collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code Sasportal sasportal = new Sasportal(...);}
   *   {@code Sasportal.Deployments.List request = sasportal.deployments().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Deployments deployments() {
    return new Deployments();
  }

  /**
   * The "deployments" collection of methods.
   */
  public class Deployments {

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

    public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

      private static final String REST_PATH = "v1alpha1/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^deployments/[^/]+$");

      /**
       * Returns a requested deployment.
       *
       * Create a request for the method "deployments.get".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the deployment.
       * @since 1.13
       */
      protected Get(java.lang.String name) {
        super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^deployments/[^/]+$");
        }
      }

      @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 set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

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

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @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 setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The name of the deployment. */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the deployment.
       */
      public java.lang.String getName() {
        return name;
      }

      /** Required. The name of the deployment. */
      public Get setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^deployments/[^/]+$");
        }
        this.name = name;
        return this;
      }

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

    /**
     * An accessor for creating requests from the Devices collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Devices devices() {
      return new Devices();
    }

    /**
     * The "devices" collection of methods.
     */
    public class Devices {

      /**
       * Deletes a device.
       *
       * Create a request for the method "devices.delete".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device.
       * @return the request
       */
      public Delete delete(java.lang.String name) throws java.io.IOException {
        Delete result = new Delete(name);
        initialize(result);
        return result;
      }

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Deletes a device.
         *
         * Create a request for the method "devices.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Gets details about a device.
         *
         * Create a request for the method "devices.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Moves a device under another node or customer.
       *
       * Create a request for the method "devices.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Moves a device under another node or customer.
         *
         * Create a request for the method "devices.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates a device.
       *
       * Create a request for the method "devices.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Updates a device.
         *
         * Create a request for the method "devices.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Signs a device.
       *
       * Create a request for the method "devices.signDevice".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link SignDevice#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
       * @return the request
       */
      public SignDevice signDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) throws java.io.IOException {
        SignDevice result = new SignDevice(name, content);
        initialize(result);
        return result;
      }

      public class SignDevice extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}:signDevice";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Signs a device.
         *
         * Create a request for the method "devices.signDevice".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link SignDevice#execute()} method to invoke the remote
         * operation. <p> {@link
         * SignDevice#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
         * @since 1.13
         */
        protected SignDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public SignDevice set$Xgafv(java.lang.String $Xgafv) {
          return (SignDevice) super.set$Xgafv($Xgafv);
        }

        @Override
        public SignDevice setAccessToken(java.lang.String accessToken) {
          return (SignDevice) super.setAccessToken(accessToken);
        }

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

        @Override
        public SignDevice setCallback(java.lang.String callback) {
          return (SignDevice) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public SignDevice setUploadType(java.lang.String uploadType) {
          return (SignDevice) super.setUploadType(uploadType);
        }

        @Override
        public SignDevice setUploadProtocol(java.lang.String uploadProtocol) {
          return (SignDevice) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public SignDevice setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public SignDevice set(String parameterName, Object value) {
          return (SignDevice) super.set(parameterName, value);
        }
      }
      /**
       * Updates a signed device.
       *
       * Create a request for the method "devices.updateSigned".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link UpdateSigned#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to update.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
       * @return the request
       */
      public UpdateSigned updateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) throws java.io.IOException {
        UpdateSigned result = new UpdateSigned(name, content);
        initialize(result);
        return result;
      }

      public class UpdateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}:updateSigned";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^deployments/[^/]+/devices/[^/]+$");

        /**
         * Updates a signed device.
         *
         * Create a request for the method "devices.updateSigned".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link UpdateSigned#execute()} method to invoke the remote
         * operation. <p> {@link
         * UpdateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to update.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
         * @since 1.13
         */
        protected UpdateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public UpdateSigned set$Xgafv(java.lang.String $Xgafv) {
          return (UpdateSigned) super.set$Xgafv($Xgafv);
        }

        @Override
        public UpdateSigned setAccessToken(java.lang.String accessToken) {
          return (UpdateSigned) super.setAccessToken(accessToken);
        }

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

        @Override
        public UpdateSigned setCallback(java.lang.String callback) {
          return (UpdateSigned) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public UpdateSigned setUploadType(java.lang.String uploadType) {
          return (UpdateSigned) super.setUploadType(uploadType);
        }

        @Override
        public UpdateSigned setUploadProtocol(java.lang.String uploadProtocol) {
          return (UpdateSigned) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to update. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to update.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to update. */
        public UpdateSigned setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^deployments/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

    }
  }

  /**
   * An accessor for creating requests from the Installer collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code Sasportal sasportal = new Sasportal(...);}
   *   {@code Sasportal.Installer.List request = sasportal.installer().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Installer installer() {
    return new Installer();
  }

  /**
   * The "installer" collection of methods.
   */
  public class Installer {

    /**
     * Generates a secret to be used with the ValidateInstaller.
     *
     * Create a request for the method "installer.generateSecret".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link GenerateSecret#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretRequest}
     * @return the request
     */
    public GenerateSecret generateSecret(com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretRequest content) throws java.io.IOException {
      GenerateSecret result = new GenerateSecret(content);
      initialize(result);
      return result;
    }

    public class GenerateSecret extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretResponse> {

      private static final String REST_PATH = "v1alpha1/installer:generateSecret";

      /**
       * Generates a secret to be used with the ValidateInstaller.
       *
       * Create a request for the method "installer.generateSecret".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link GenerateSecret#execute()} method to invoke the remote
       * operation. <p> {@link GenerateSecret#initialize(com.google.api.client.googleapis.services.Abstr
       * actGoogleClientRequest)} must be called to initialize this instance immediately after invoking
       * the constructor. </p>
       *
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretRequest}
       * @since 1.13
       */
      protected GenerateSecret(com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretRequest content) {
        super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalGenerateSecretResponse.class);
      }

      @Override
      public GenerateSecret set$Xgafv(java.lang.String $Xgafv) {
        return (GenerateSecret) super.set$Xgafv($Xgafv);
      }

      @Override
      public GenerateSecret setAccessToken(java.lang.String accessToken) {
        return (GenerateSecret) super.setAccessToken(accessToken);
      }

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

      @Override
      public GenerateSecret setCallback(java.lang.String callback) {
        return (GenerateSecret) super.setCallback(callback);
      }

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

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

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

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

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

      @Override
      public GenerateSecret setUploadType(java.lang.String uploadType) {
        return (GenerateSecret) super.setUploadType(uploadType);
      }

      @Override
      public GenerateSecret setUploadProtocol(java.lang.String uploadProtocol) {
        return (GenerateSecret) super.setUploadProtocol(uploadProtocol);
      }

      @Override
      public GenerateSecret set(String parameterName, Object value) {
        return (GenerateSecret) super.set(parameterName, value);
      }
    }
    /**
     * Validates the identity of a Certified Professional Installer (CPI).
     *
     * Create a request for the method "installer.validate".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link Validate#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerRequest}
     * @return the request
     */
    public Validate validate(com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerRequest content) throws java.io.IOException {
      Validate result = new Validate(content);
      initialize(result);
      return result;
    }

    public class Validate extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerResponse> {

      private static final String REST_PATH = "v1alpha1/installer:validate";

      /**
       * Validates the identity of a Certified Professional Installer (CPI).
       *
       * Create a request for the method "installer.validate".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Validate#execute()} method to invoke the remote operation.
       * <p> {@link
       * Validate#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerRequest}
       * @since 1.13
       */
      protected Validate(com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerRequest content) {
        super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalValidateInstallerResponse.class);
      }

      @Override
      public Validate set$Xgafv(java.lang.String $Xgafv) {
        return (Validate) super.set$Xgafv($Xgafv);
      }

      @Override
      public Validate setAccessToken(java.lang.String accessToken) {
        return (Validate) super.setAccessToken(accessToken);
      }

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

      @Override
      public Validate setCallback(java.lang.String callback) {
        return (Validate) super.setCallback(callback);
      }

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

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

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

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

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

      @Override
      public Validate setUploadType(java.lang.String uploadType) {
        return (Validate) super.setUploadType(uploadType);
      }

      @Override
      public Validate setUploadProtocol(java.lang.String uploadProtocol) {
        return (Validate) super.setUploadProtocol(uploadProtocol);
      }

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

  }

  /**
   * An accessor for creating requests from the Nodes collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code Sasportal sasportal = new Sasportal(...);}
   *   {@code Sasportal.Nodes.List request = sasportal.nodes().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Nodes nodes() {
    return new Nodes();
  }

  /**
   * The "nodes" collection of methods.
   */
  public class Nodes {

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

    public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

      private static final String REST_PATH = "v1alpha1/{+name}";

      private final java.util.regex.Pattern NAME_PATTERN =
          java.util.regex.Pattern.compile("^nodes/[^/]+$");

      /**
       * Returns a requested node.
       *
       * Create a request for the method "nodes.get".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param name Required. The name of the node.
       * @since 1.13
       */
      protected Get(java.lang.String name) {
        super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
        this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^nodes/[^/]+$");
        }
      }

      @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 set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

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

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @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 setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      /** Required. The name of the node. */
      @com.google.api.client.util.Key
      private java.lang.String name;

      /** Required. The name of the node.
       */
      public java.lang.String getName() {
        return name;
      }

      /** Required. The name of the node. */
      public Get setName(java.lang.String name) {
        if (!getSuppressPatternChecks()) {
          com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
              "Parameter name must conform to the pattern " +
              "^nodes/[^/]+$");
        }
        this.name = name;
        return this;
      }

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

    /**
     * An accessor for creating requests from the Deployments collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Deployments.List request = sasportal.deployments().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Deployments deployments() {
      return new Deployments();
    }

    /**
     * The "deployments" collection of methods.
     */
    public class Deployments {

      /**
       * Deletes a deployment.
       *
       * Create a request for the method "deployments.delete".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the deployment.
       * @return the request
       */
      public Delete delete(java.lang.String name) throws java.io.IOException {
        Delete result = new Delete(name);
        initialize(result);
        return result;
      }

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

        /**
         * Deletes a deployment.
         *
         * Create a request for the method "deployments.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

        /**
         * Returns a requested deployment.
         *
         * Create a request for the method "deployments.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists deployments.
       *
       * Create a request for the method "deployments.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Lists deployments.
         *
         * Create a request for the method "deployments.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no deployments
         * are filtered.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
       "direct_children". The filter is case insensitive. If empty, then no deployments are filtered.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no deployments
         * are filtered.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /** The maximum number of deployments to return in the response. */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of deployments to return in the response.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /** The maximum number of deployments to return in the response. */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListDeployments that indicates where
         * this listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListDeployments that indicates where this
       listing should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListDeployments that indicates where
         * this listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a deployment under another node or customer.
       *
       * Create a request for the method "deployments.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the deployment to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

        /**
         * Moves a deployment under another node or customer.
         *
         * Create a request for the method "deployments.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the deployment to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeploymentRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the deployment to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the deployment to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the deployment to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates an existing deployment.
       *
       * Create a request for the method "deployments.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. Resource name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

        /**
         * Updates an existing deployment.
         *
         * Create a request for the method "deployments.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. Resource name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. Resource name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. Resource name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. Resource name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/deployments/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

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

      /**
       * An accessor for creating requests from the Devices collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Devices devices() {
        return new Devices();
      }

      /**
       * The "devices" collection of methods.
       */
      public class Devices {

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

          /**
           * Creates a device under a node or customer.
           *
           * Create a request for the method "devices.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @return the request
         */
        public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
          CreateSigned result = new CreateSigned(parent, content);
          initialize(result);
          return result;
        }

        public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

          /**
           * Creates a signed device under a node or customer.
           *
           * Create a request for the method "devices.createSigned".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
           * operation. <p> {@link
           * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
           * @since 1.13
           */
          protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
          }

          @Override
          public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
            return (CreateSigned) super.set$Xgafv($Xgafv);
          }

          @Override
          public CreateSigned setAccessToken(java.lang.String accessToken) {
            return (CreateSigned) super.setAccessToken(accessToken);
          }

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

          @Override
          public CreateSigned setCallback(java.lang.String callback) {
            return (CreateSigned) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public CreateSigned setUploadType(java.lang.String uploadType) {
            return (CreateSigned) super.setUploadType(uploadType);
          }

          @Override
          public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
            return (CreateSigned) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public CreateSigned setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public CreateSigned set(String parameterName, Object value) {
            return (CreateSigned) super.set(parameterName, value);
          }
        }
        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/deployments/[^/]+$");

          /**
           * Lists devices under a node or customer.
           *
           * Create a request for the method "devices.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/deployments/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have one of the following formats: "sn=123454" or
         "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
         insensitive.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of devices to return in the response. If empty or zero, all devices will be
         listed. Must be in the range [0, 1000].
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDevices that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
    }
    /**
     * An accessor for creating requests from the Devices collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Devices devices() {
      return new Devices();
    }

    /**
     * The "devices" collection of methods.
     */
    public class Devices {

      /**
       * Creates a device under a node or customer.
       *
       * Create a request for the method "devices.create".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
       * @return the request
       */
      public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
        Create result = new Create(parent, content);
        initialize(result);
        return result;
      }

      public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @since 1.13
         */
        protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

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

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public Create setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        @Override
        public Create set(String parameterName, Object value) {
          return (Create) super.set(parameterName, value);
        }
      }
      /**
       * Creates a signed device under a node or customer.
       *
       * Create a request for the method "devices.createSigned".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
       * @return the request
       */
      public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
        CreateSigned result = new CreateSigned(parent, content);
        initialize(result);
        return result;
      }

      public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
         * operation. <p> {@link
         * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @since 1.13
         */
        protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @Override
        public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
          return (CreateSigned) super.set$Xgafv($Xgafv);
        }

        @Override
        public CreateSigned setAccessToken(java.lang.String accessToken) {
          return (CreateSigned) super.setAccessToken(accessToken);
        }

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

        @Override
        public CreateSigned setCallback(java.lang.String callback) {
          return (CreateSigned) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public CreateSigned setUploadType(java.lang.String uploadType) {
          return (CreateSigned) super.setUploadType(uploadType);
        }

        @Override
        public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
          return (CreateSigned) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public CreateSigned setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

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

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Deletes a device.
         *
         * Create a request for the method "devices.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Gets details about a device.
         *
         * Create a request for the method "devices.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists devices under a node or customer.
       *
       * Create a request for the method "devices.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The name of the parent resource.
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/devices";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The name of the parent resource.
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the parent resource. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The name of the parent resource.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The name of the parent resource. */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have one of the following formats: "sn=123454"
         * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter is
         * case insensitive.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have one of the following formats: "sn=123454" or
       "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
       insensitive.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have one of the following formats: "sn=123454"
         * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter is
         * case insensitive.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /**
         * The maximum number of devices to return in the response. If empty or zero, all devices
         * will be listed. Must be in the range [0, 1000].
         */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of devices to return in the response. If empty or zero, all devices will be
       listed. Must be in the range [0, 1000].
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /**
         * The maximum number of devices to return in the response. If empty or zero, all devices
         * will be listed. Must be in the range [0, 1000].
         */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListDevices that indicates where this
         * listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListDevices that indicates where this listing
       should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListDevices that indicates where this
         * listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a device under another node or customer.
       *
       * Create a request for the method "devices.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Moves a device under another node or customer.
         *
         * Create a request for the method "devices.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates a device.
       *
       * Create a request for the method "devices.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Updates a device.
         *
         * Create a request for the method "devices.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

        @Override
        public Patch set(String parameterName, Object value) {
          return (Patch) super.set(parameterName, value);
        }
      }
      /**
       * Signs a device.
       *
       * Create a request for the method "devices.signDevice".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link SignDevice#execute()} method to invoke the remote operation.
       *
       * @param name Output only. The resource path name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
       * @return the request
       */
      public SignDevice signDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) throws java.io.IOException {
        SignDevice result = new SignDevice(name, content);
        initialize(result);
        return result;
      }

      public class SignDevice extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}:signDevice";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Signs a device.
         *
         * Create a request for the method "devices.signDevice".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link SignDevice#execute()} method to invoke the remote
         * operation. <p> {@link
         * SignDevice#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. The resource path name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest}
         * @since 1.13
         */
        protected SignDevice(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalSignDeviceRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public SignDevice set$Xgafv(java.lang.String $Xgafv) {
          return (SignDevice) super.set$Xgafv($Xgafv);
        }

        @Override
        public SignDevice setAccessToken(java.lang.String accessToken) {
          return (SignDevice) super.setAccessToken(accessToken);
        }

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

        @Override
        public SignDevice setCallback(java.lang.String callback) {
          return (SignDevice) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public SignDevice setUploadType(java.lang.String uploadType) {
          return (SignDevice) super.setUploadType(uploadType);
        }

        @Override
        public SignDevice setUploadProtocol(java.lang.String uploadProtocol) {
          return (SignDevice) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. The resource path name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. The resource path name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. The resource path name. */
        public SignDevice setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public SignDevice set(String parameterName, Object value) {
          return (SignDevice) super.set(parameterName, value);
        }
      }
      /**
       * Updates a signed device.
       *
       * Create a request for the method "devices.updateSigned".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link UpdateSigned#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the device to update.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
       * @return the request
       */
      public UpdateSigned updateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) throws java.io.IOException {
        UpdateSigned result = new UpdateSigned(name, content);
        initialize(result);
        return result;
      }

      public class UpdateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

        private static final String REST_PATH = "v1alpha1/{+name}:updateSigned";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/devices/[^/]+$");

        /**
         * Updates a signed device.
         *
         * Create a request for the method "devices.updateSigned".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link UpdateSigned#execute()} method to invoke the remote
         * operation. <p> {@link
         * UpdateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the device to update.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest}
         * @since 1.13
         */
        protected UpdateSigned(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalUpdateSignedDeviceRequest content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
        }

        @Override
        public UpdateSigned set$Xgafv(java.lang.String $Xgafv) {
          return (UpdateSigned) super.set$Xgafv($Xgafv);
        }

        @Override
        public UpdateSigned setAccessToken(java.lang.String accessToken) {
          return (UpdateSigned) super.setAccessToken(accessToken);
        }

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

        @Override
        public UpdateSigned setCallback(java.lang.String callback) {
          return (UpdateSigned) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public UpdateSigned setUploadType(java.lang.String uploadType) {
          return (UpdateSigned) super.setUploadType(uploadType);
        }

        @Override
        public UpdateSigned setUploadProtocol(java.lang.String uploadProtocol) {
          return (UpdateSigned) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the device to update. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the device to update.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the device to update. */
        public UpdateSigned setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/devices/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

    }
    /**
     * An accessor for creating requests from the Nodes collection.
     *
     * <p>The typical use is:</p>
     * <pre>
     *   {@code Sasportal sasportal = new Sasportal(...);}
     *   {@code Sasportal.Nodes.List request = sasportal.nodes().list(parameters ...)}
     * </pre>
     *
     * @return the resource collection
     */
    public Nodes nodes() {
      return new Nodes();
    }

    /**
     * The "nodes" collection of methods.
     */
    public class Nodes {

      /**
       * Creates a new node.
       *
       * Create a request for the method "nodes.create".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Create#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name where the node is to be created.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
       * @return the request
       */
      public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
        Create result = new Create(parent, content);
        initialize(result);
        return result;
      }

      public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Creates a new node.
         *
         * Create a request for the method "nodes.create".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
         * <p> {@link
         * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name where the node is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @since 1.13
         */
        protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @Override
        public Create set$Xgafv(java.lang.String $Xgafv) {
          return (Create) super.set$Xgafv($Xgafv);
        }

        @Override
        public Create setAccessToken(java.lang.String accessToken) {
          return (Create) super.setAccessToken(accessToken);
        }

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

        @Override
        public Create setCallback(java.lang.String callback) {
          return (Create) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Create setUploadType(java.lang.String uploadType) {
          return (Create) super.setUploadType(uploadType);
        }

        @Override
        public Create setUploadProtocol(java.lang.String uploadProtocol) {
          return (Create) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name where the node is to be created. */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name where the node is to be created.
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name where the node is to be created. */
        public Create setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

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

      public class Delete extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

        /**
         * Deletes a node.
         *
         * Create a request for the method "nodes.delete".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         * <p> {@link
         * Delete#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node.
         * @since 1.13
         */
        protected Delete(java.lang.String name) {
          super(Sasportal.this, "DELETE", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalEmpty.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Delete set$Xgafv(java.lang.String $Xgafv) {
          return (Delete) super.set$Xgafv($Xgafv);
        }

        @Override
        public Delete setAccessToken(java.lang.String accessToken) {
          return (Delete) super.setAccessToken(accessToken);
        }

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

        @Override
        public Delete setCallback(java.lang.String callback) {
          return (Delete) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Delete) super.setUploadType(uploadType);
        }

        @Override
        public Delete setUploadProtocol(java.lang.String uploadProtocol) {
          return (Delete) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node. */
        public Delete setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

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

      public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

        /**
         * Returns a requested node.
         *
         * Create a request for the method "nodes.get".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
         * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (Get) super.set$Xgafv($Xgafv);
        }

        @Override
        public Get setAccessToken(java.lang.String accessToken) {
          return (Get) super.setAccessToken(accessToken);
        }

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

        @Override
        public Get setCallback(java.lang.String callback) {
          return (Get) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (Get) super.setUploadType(uploadType);
        }

        @Override
        public Get setUploadProtocol(java.lang.String uploadProtocol) {
          return (Get) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node. */
        public Get setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists nodes.
       *
       * Create a request for the method "nodes.list".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param parent Required. The parent resource name, for example, "nodes/1".
       * @return the request
       */
      public List list(java.lang.String parent) throws java.io.IOException {
        List result = new List(parent);
        initialize(result);
        return result;
      }

      public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse> {

        private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

        private final java.util.regex.Pattern PARENT_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+$");

        /**
         * Lists nodes.
         *
         * Create a request for the method "nodes.list".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
         * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param parent Required. The parent resource name, for example, "nodes/1".
         * @since 1.13
         */
        protected List(java.lang.String parent) {
          super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse.class);
          this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
        }

        @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 set$Xgafv(java.lang.String $Xgafv) {
          return (List) super.set$Xgafv($Xgafv);
        }

        @Override
        public List setAccessToken(java.lang.String accessToken) {
          return (List) super.setAccessToken(accessToken);
        }

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

        @Override
        public List setCallback(java.lang.String callback) {
          return (List) super.setCallback(callback);
        }

        @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 setUploadType(java.lang.String uploadType) {
          return (List) super.setUploadType(uploadType);
        }

        @Override
        public List setUploadProtocol(java.lang.String uploadProtocol) {
          return (List) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The parent resource name, for example, "nodes/1". */
        @com.google.api.client.util.Key
        private java.lang.String parent;

        /** Required. The parent resource name, for example, "nodes/1".
         */
        public java.lang.String getParent() {
          return parent;
        }

        /** Required. The parent resource name, for example, "nodes/1". */
        public List setParent(java.lang.String parent) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                "Parameter parent must conform to the pattern " +
                "^nodes/[^/]+$");
          }
          this.parent = parent;
          return this;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no nodes are
         * filtered.
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
       "direct_children". The filter is case insensitive. If empty, then no nodes are filtered.
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or
         * format: "direct_children". The filter is case insensitive. If empty, then no nodes are
         * filtered.
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /** The maximum number of nodes to return in the response. */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of nodes to return in the response.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /** The maximum number of nodes to return in the response. */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A pagination token returned from a previous call to ListNodes that indicates where this
         * listing should continue from.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A pagination token returned from a previous call to ListNodes that indicates where this listing
       should continue from.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A pagination token returned from a previous call to ListNodes that indicates where this
         * listing should continue from.
         */
        public List setPageToken(java.lang.String pageToken) {
          this.pageToken = pageToken;
          return this;
        }

        @Override
        public List set(String parameterName, Object value) {
          return (List) super.set(parameterName, value);
        }
      }
      /**
       * Moves a node under another node or customer.
       *
       * Create a request for the method "nodes.move".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Move#execute()} method to invoke the remote operation.
       *
       * @param name Required. The name of the node to move.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest}
       * @return the request
       */
      public Move move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest content) throws java.io.IOException {
        Move result = new Move(name, content);
        initialize(result);
        return result;
      }

      public class Move extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation> {

        private static final String REST_PATH = "v1alpha1/{+name}:move";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

        /**
         * Moves a node under another node or customer.
         *
         * Create a request for the method "nodes.move".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Move#execute()} method to invoke the remote operation. <p>
         * {@link Move#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
         * must be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Required. The name of the node to move.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest}
         * @since 1.13
         */
        protected Move(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalMoveNodeRequest content) {
          super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalOperation.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Move set$Xgafv(java.lang.String $Xgafv) {
          return (Move) super.set$Xgafv($Xgafv);
        }

        @Override
        public Move setAccessToken(java.lang.String accessToken) {
          return (Move) super.setAccessToken(accessToken);
        }

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

        @Override
        public Move setCallback(java.lang.String callback) {
          return (Move) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Move setUploadType(java.lang.String uploadType) {
          return (Move) super.setUploadType(uploadType);
        }

        @Override
        public Move setUploadProtocol(java.lang.String uploadProtocol) {
          return (Move) super.setUploadProtocol(uploadProtocol);
        }

        /** Required. The name of the node to move. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Required. The name of the node to move.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Required. The name of the node to move. */
        public Move setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Move set(String parameterName, Object value) {
          return (Move) super.set(parameterName, value);
        }
      }
      /**
       * Updates an existing node.
       *
       * Create a request for the method "nodes.patch".
       *
       * This request holds the parameters needed by the sasportal server.  After setting any optional
       * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
       *
       * @param name Output only. Resource name.
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
       * @return the request
       */
      public Patch patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
        Patch result = new Patch(name, content);
        initialize(result);
        return result;
      }

      public class Patch extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

        private static final String REST_PATH = "v1alpha1/{+name}";

        private final java.util.regex.Pattern NAME_PATTERN =
            java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

        /**
         * Updates an existing node.
         *
         * Create a request for the method "nodes.patch".
         *
         * This request holds the parameters needed by the the sasportal server.  After setting any
         * optional parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         * <p> {@link
         * Patch#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
         * be called to initialize this instance immediately after invoking the constructor. </p>
         *
         * @param name Output only. Resource name.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @since 1.13
         */
        protected Patch(java.lang.String name, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
          super(Sasportal.this, "PATCH", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
          this.name = com.google.api.client.util.Preconditions.checkNotNull(name, "Required parameter name must be specified.");
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
        }

        @Override
        public Patch set$Xgafv(java.lang.String $Xgafv) {
          return (Patch) super.set$Xgafv($Xgafv);
        }

        @Override
        public Patch setAccessToken(java.lang.String accessToken) {
          return (Patch) super.setAccessToken(accessToken);
        }

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

        @Override
        public Patch setCallback(java.lang.String callback) {
          return (Patch) super.setCallback(callback);
        }

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

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

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

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

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

        @Override
        public Patch setUploadType(java.lang.String uploadType) {
          return (Patch) super.setUploadType(uploadType);
        }

        @Override
        public Patch setUploadProtocol(java.lang.String uploadProtocol) {
          return (Patch) super.setUploadProtocol(uploadProtocol);
        }

        /** Output only. Resource name. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Output only. Resource name.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Output only. Resource name. */
        public Patch setName(java.lang.String name) {
          if (!getSuppressPatternChecks()) {
            com.google.api.client.util.Preconditions.checkArgument(NAME_PATTERN.matcher(name).matches(),
                "Parameter name must conform to the pattern " +
                "^nodes/[^/]+/nodes/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /** Fields to be updated. */
        @com.google.api.client.util.Key
        private String updateMask;

        /** Fields to be updated.
         */
        public String getUpdateMask() {
          return updateMask;
        }

        /** Fields to be updated. */
        public Patch setUpdateMask(String updateMask) {
          this.updateMask = updateMask;
          return this;
        }

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

      /**
       * An accessor for creating requests from the Deployments collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Deployments.List request = sasportal.deployments().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Deployments deployments() {
        return new Deployments();
      }

      /**
       * The "deployments" collection of methods.
       */
      public class Deployments {

        /**
         * Creates a new deployment.
         *
         * Create a request for the method "deployments.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name where the deployment is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment> {

          private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Creates a new deployment.
           *
           * Create a request for the method "deployments.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name where the deployment is to be created.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDeployment.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name where the deployment is to be created. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name where the deployment is to be created.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name where the deployment is to be created. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Lists deployments.
         *
         * Create a request for the method "deployments.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/deployments";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Lists deployments.
           *
           * Create a request for the method "deployments.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDeploymentsResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name, for example, "nodes/1", customer/1/nodes/2. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no
           * deployments are filtered.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
         "direct_children". The filter is case insensitive. If empty, then no deployments are filtered.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no
           * deployments are filtered.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** The maximum number of deployments to return in the response. */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of deployments to return in the response.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /** The maximum number of deployments to return in the response. */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDeployments that indicates
           * where this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDeployments that indicates where this
         listing should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDeployments that indicates
           * where this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
      /**
       * An accessor for creating requests from the Devices collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Devices.List request = sasportal.devices().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Devices devices() {
        return new Devices();
      }

      /**
       * The "devices" collection of methods.
       */
      public class Devices {

        /**
         * Creates a device under a node or customer.
         *
         * Create a request for the method "devices.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Creates a device under a node or customer.
           *
           * Create a request for the method "devices.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Creates a signed device under a node or customer.
         *
         * Create a request for the method "devices.createSigned".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link CreateSigned#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
         * @return the request
         */
        public CreateSigned createSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) throws java.io.IOException {
          CreateSigned result = new CreateSigned(parent, content);
          initialize(result);
          return result;
        }

        public class CreateSigned extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices:createSigned";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Creates a signed device under a node or customer.
           *
           * Create a request for the method "devices.createSigned".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link CreateSigned#execute()} method to invoke the remote
           * operation. <p> {@link
           * CreateSigned#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest}
           * @since 1.13
           */
          protected CreateSigned(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalCreateSignedDeviceRequest content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalDevice.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public CreateSigned set$Xgafv(java.lang.String $Xgafv) {
            return (CreateSigned) super.set$Xgafv($Xgafv);
          }

          @Override
          public CreateSigned setAccessToken(java.lang.String accessToken) {
            return (CreateSigned) super.setAccessToken(accessToken);
          }

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

          @Override
          public CreateSigned setCallback(java.lang.String callback) {
            return (CreateSigned) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public CreateSigned setUploadType(java.lang.String uploadType) {
            return (CreateSigned) super.setUploadType(uploadType);
          }

          @Override
          public CreateSigned setUploadProtocol(java.lang.String uploadProtocol) {
            return (CreateSigned) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public CreateSigned setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public CreateSigned set(String parameterName, Object value) {
            return (CreateSigned) super.set(parameterName, value);
          }
        }
        /**
         * Lists devices under a node or customer.
         *
         * Create a request for the method "devices.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The name of the parent resource.
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/devices";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Lists devices under a node or customer.
           *
           * Create a request for the method "devices.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The name of the parent resource.
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListDevicesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The name of the parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The name of the parent resource.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The name of the parent resource. */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have one of the following formats: "sn=123454" or
         "display_name=MyDevice". sn corresponds to serial number of the device. The filter is case
         insensitive.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have one of the following formats: "sn=123454"
           * or "display_name=MyDevice". sn corresponds to serial number of the device. The filter
           * is case insensitive.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of devices to return in the response. If empty or zero, all devices will be
         listed. Must be in the range [0, 1000].
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * The maximum number of devices to return in the response. If empty or zero, all devices
           * will be listed. Must be in the range [0, 1000].
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListDevices that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListDevices that indicates where
           * this listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
      /**
       * An accessor for creating requests from the Nodes collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code Sasportal sasportal = new Sasportal(...);}
       *   {@code Sasportal.Nodes.List request = sasportal.nodes().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public Nodes nodes() {
        return new Nodes();
      }

      /**
       * The "nodes" collection of methods.
       */
      public class Nodes {

        /**
         * Creates a new node.
         *
         * Create a request for the method "nodes.create".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name where the node is to be created.
         * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalNode> {

          private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Creates a new node.
           *
           * Create a request for the method "nodes.create".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link Create#execute()} method to invoke the remote operation.
           * <p> {@link
           * Create#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name where the node is to be created.
           * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalNode}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode content) {
            super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalNode.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @Override
          public Create set$Xgafv(java.lang.String $Xgafv) {
            return (Create) super.set$Xgafv($Xgafv);
          }

          @Override
          public Create setAccessToken(java.lang.String accessToken) {
            return (Create) super.setAccessToken(accessToken);
          }

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

          @Override
          public Create setCallback(java.lang.String callback) {
            return (Create) super.setCallback(callback);
          }

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

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

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

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

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

          @Override
          public Create setUploadType(java.lang.String uploadType) {
            return (Create) super.setUploadType(uploadType);
          }

          @Override
          public Create setUploadProtocol(java.lang.String uploadProtocol) {
            return (Create) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name where the node is to be created. */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name where the node is to be created.
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name where the node is to be created. */
          public Create setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Lists nodes.
         *
         * Create a request for the method "nodes.list".
         *
         * This request holds the parameters needed by the sasportal server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The parent resource name, for example, "nodes/1".
         * @return the request
         */
        public List list(java.lang.String parent) throws java.io.IOException {
          List result = new List(parent);
          initialize(result);
          return result;
        }

        public class List extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse> {

          private static final String REST_PATH = "v1alpha1/{+parent}/nodes";

          private final java.util.regex.Pattern PARENT_PATTERN =
              java.util.regex.Pattern.compile("^nodes/[^/]+/nodes/[^/]+$");

          /**
           * Lists nodes.
           *
           * Create a request for the method "nodes.list".
           *
           * This request holds the parameters needed by the the sasportal server.  After setting any
           * optional parameters, call the {@link List#execute()} method to invoke the remote operation. <p>
           * {@link List#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param parent Required. The parent resource name, for example, "nodes/1".
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(Sasportal.this, "GET", REST_PATH, null, com.google.api.services.sasportal.v1alpha1.model.SasPortalListNodesResponse.class);
            this.parent = com.google.api.client.util.Preconditions.checkNotNull(parent, "Required parameter parent must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
          }

          @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 set$Xgafv(java.lang.String $Xgafv) {
            return (List) super.set$Xgafv($Xgafv);
          }

          @Override
          public List setAccessToken(java.lang.String accessToken) {
            return (List) super.setAccessToken(accessToken);
          }

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

          @Override
          public List setCallback(java.lang.String callback) {
            return (List) super.setCallback(callback);
          }

          @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 setUploadType(java.lang.String uploadType) {
            return (List) super.setUploadType(uploadType);
          }

          @Override
          public List setUploadProtocol(java.lang.String uploadProtocol) {
            return (List) super.setUploadProtocol(uploadProtocol);
          }

          /** Required. The parent resource name, for example, "nodes/1". */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The parent resource name, for example, "nodes/1".
           */
          public java.lang.String getParent() {
            return parent;
          }

          /** Required. The parent resource name, for example, "nodes/1". */
          public List setParent(java.lang.String parent) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(PARENT_PATTERN.matcher(parent).matches(),
                  "Parameter parent must conform to the pattern " +
                  "^nodes/[^/]+/nodes/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no nodes
           * are filtered.
           */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The filter expression. The filter should have the following format: "DIRECT_CHILDREN" or format:
         "direct_children". The filter is case insensitive. If empty, then no nodes are filtered.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /**
           * The filter expression. The filter should have the following format: "DIRECT_CHILDREN"
           * or format: "direct_children". The filter is case insensitive. If empty, then no nodes
           * are filtered.
           */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** The maximum number of nodes to return in the response. */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The maximum number of nodes to return in the response.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /** The maximum number of nodes to return in the response. */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * A pagination token returned from a previous call to ListNodes that indicates where this
           * listing should continue from.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** A pagination token returned from a previous call to ListNodes that indicates where this listing
         should continue from.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * A pagination token returned from a previous call to ListNodes that indicates where this
           * listing should continue from.
           */
          public List setPageToken(java.lang.String pageToken) {
            this.pageToken = pageToken;
            return this;
          }

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

      }
    }
  }

  /**
   * An accessor for creating requests from the Policies collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code Sasportal sasportal = new Sasportal(...);}
   *   {@code Sasportal.Policies.List request = sasportal.policies().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Policies policies() {
    return new Policies();
  }

  /**
   * The "policies" collection of methods.
   */
  public class Policies {

    /**
     * Gets the access control policy for a resource. Returns an empty policy if the resource exists and
     * does not have a policy set.
     *
     * Create a request for the method "policies.get".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link Get#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalGetPolicyRequest}
     * @return the request
     */
    public Get get(com.google.api.services.sasportal.v1alpha1.model.SasPortalGetPolicyRequest content) throws java.io.IOException {
      Get result = new Get(content);
      initialize(result);
      return result;
    }

    public class Get extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalPolicy> {

      private static final String REST_PATH = "v1alpha1/policies:get";

      /**
       * Gets the access control policy for a resource. Returns an empty policy if the resource exists
       * and does not have a policy set.
       *
       * Create a request for the method "policies.get".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Get#execute()} method to invoke the remote operation. <p>
       * {@link Get#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalGetPolicyRequest}
       * @since 1.13
       */
      protected Get(com.google.api.services.sasportal.v1alpha1.model.SasPortalGetPolicyRequest content) {
        super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalPolicy.class);
      }

      @Override
      public Get set$Xgafv(java.lang.String $Xgafv) {
        return (Get) super.set$Xgafv($Xgafv);
      }

      @Override
      public Get setAccessToken(java.lang.String accessToken) {
        return (Get) super.setAccessToken(accessToken);
      }

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

      @Override
      public Get setCallback(java.lang.String callback) {
        return (Get) super.setCallback(callback);
      }

      @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 setUploadType(java.lang.String uploadType) {
        return (Get) super.setUploadType(uploadType);
      }

      @Override
      public Get setUploadProtocol(java.lang.String uploadProtocol) {
        return (Get) super.setUploadProtocol(uploadProtocol);
      }

      @Override
      public Get set(String parameterName, Object value) {
        return (Get) super.set(parameterName, value);
      }
    }
    /**
     * Sets the access control policy on the specified resource. Replaces any existing policy.
     *
     * Create a request for the method "policies.set".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link Set#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSetPolicyRequest}
     * @return the request
     */
    public Set set(com.google.api.services.sasportal.v1alpha1.model.SasPortalSetPolicyRequest content) throws java.io.IOException {
      Set result = new Set(content);
      initialize(result);
      return result;
    }

    public class Set extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalPolicy> {

      private static final String REST_PATH = "v1alpha1/policies:set";

      /**
       * Sets the access control policy on the specified resource. Replaces any existing policy.
       *
       * Create a request for the method "policies.set".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Set#execute()} method to invoke the remote operation. <p>
       * {@link Set#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalSetPolicyRequest}
       * @since 1.13
       */
      protected Set(com.google.api.services.sasportal.v1alpha1.model.SasPortalSetPolicyRequest content) {
        super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalPolicy.class);
      }

      @Override
      public Set set$Xgafv(java.lang.String $Xgafv) {
        return (Set) super.set$Xgafv($Xgafv);
      }

      @Override
      public Set setAccessToken(java.lang.String accessToken) {
        return (Set) super.setAccessToken(accessToken);
      }

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

      @Override
      public Set setCallback(java.lang.String callback) {
        return (Set) super.setCallback(callback);
      }

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

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

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

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

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

      @Override
      public Set setUploadType(java.lang.String uploadType) {
        return (Set) super.setUploadType(uploadType);
      }

      @Override
      public Set setUploadProtocol(java.lang.String uploadProtocol) {
        return (Set) super.setUploadProtocol(uploadProtocol);
      }

      @Override
      public Set set(String parameterName, Object value) {
        return (Set) super.set(parameterName, value);
      }
    }
    /**
     * Returns permissions that a caller has on the specified resource.
     *
     * Create a request for the method "policies.test".
     *
     * This request holds the parameters needed by the sasportal server.  After setting any optional
     * parameters, call the {@link Test#execute()} method to invoke the remote operation.
     *
     * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsRequest}
     * @return the request
     */
    public Test test(com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsRequest content) throws java.io.IOException {
      Test result = new Test(content);
      initialize(result);
      return result;
    }

    public class Test extends SasportalRequest<com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsResponse> {

      private static final String REST_PATH = "v1alpha1/policies:test";

      /**
       * Returns permissions that a caller has on the specified resource.
       *
       * Create a request for the method "policies.test".
       *
       * This request holds the parameters needed by the the sasportal server.  After setting any
       * optional parameters, call the {@link Test#execute()} method to invoke the remote operation. <p>
       * {@link Test#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
       * must be called to initialize this instance immediately after invoking the constructor. </p>
       *
       * @param content the {@link com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsRequest}
       * @since 1.13
       */
      protected Test(com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsRequest content) {
        super(Sasportal.this, "POST", REST_PATH, content, com.google.api.services.sasportal.v1alpha1.model.SasPortalTestPermissionsResponse.class);
      }

      @Override
      public Test set$Xgafv(java.lang.String $Xgafv) {
        return (Test) super.set$Xgafv($Xgafv);
      }

      @Override
      public Test setAccessToken(java.lang.String accessToken) {
        return (Test) super.setAccessToken(accessToken);
      }

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

      @Override
      public Test setCallback(java.lang.String callback) {
        return (Test) super.setCallback(callback);
      }

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

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

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

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

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

      @Override
      public Test setUploadType(java.lang.String uploadType) {
        return (Test) super.setUploadType(uploadType);
      }

      @Override
      public Test setUploadProtocol(java.lang.String uploadProtocol) {
        return (Test) super.setUploadProtocol(uploadProtocol);
      }

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

  }

  /**
   * Builder for {@link Sasportal}.
   *
   * <p>
   * Implementation is not thread-safe.
   * </p>
   *
   * @since 1.3.0
   */
  public static final class Builder extends com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient.Builder {

    private static String chooseEndpoint(com.google.api.client.http.HttpTransport transport) {
      // If the GOOGLE_API_USE_MTLS_ENDPOINT environment variable value is "always", use mTLS endpoint.
      // If the env variable is "auto", use mTLS endpoint if and only if the transport is mTLS.
      // Use the regular endpoint for all other cases.
      String useMtlsEndpoint = System.getenv("GOOGLE_API_USE_MTLS_ENDPOINT");
      useMtlsEndpoint = useMtlsEndpoint == null ? "auto" : useMtlsEndpoint;
      if ("always".equals(useMtlsEndpoint) || ("auto".equals(useMtlsEndpoint) && transport != null && transport.isMtls())) {
        return DEFAULT_MTLS_ROOT_URL;
      }
      return DEFAULT_ROOT_URL;
    }

    /**
     * Returns an instance of a new builder.
     *
     * @param transport HTTP transport, which should normally be:
     *        <ul>
     *        <li>Google App Engine:
     *        {@code com.google.api.client.extensions.appengine.http.UrlFetchTransport}</li>
     *        <li>Android: {@code newCompatibleTransport} from
     *        {@code com.google.api.client.extensions.android.http.AndroidHttp}</li>
     *        <li>Java: {@link com.google.api.client.googleapis.javanet.GoogleNetHttpTransport#newTrustedTransport()}
     *        </li>
     *        </ul>
     * @param jsonFactory JSON factory, which may be:
     *        <ul>
     *        <li>Jackson: {@code com.google.api.client.json.jackson2.JacksonFactory}</li>
     *        <li>Google GSON: {@code com.google.api.client.json.gson.GsonFactory}</li>
     *        <li>Android Honeycomb or higher:
     *        {@code com.google.api.client.extensions.android.json.AndroidJsonFactory}</li>
     *        </ul>
     * @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,
          Builder.chooseEndpoint(transport),
          DEFAULT_SERVICE_PATH,
          httpRequestInitializer,
          false);
      setBatchPath(DEFAULT_BATCH_PATH);
    }

    /** Builds a new instance of {@link Sasportal}. */
    @Override
    public Sasportal build() {
      return new Sasportal(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 setBatchPath(String batchPath) {
      return (Builder) super.setBatchPath(batchPath);
    }

    @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 SasportalRequestInitializer}.
     *
     * @since 1.12
     */
    public Builder setSasportalRequestInitializer(
        SasportalRequestInitializer sasportalRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(sasportalRequestInitializer);
    }

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