/*
 * 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.gkebackup.v1;

/**
 * Service definition for BackupforGKE (v1).
 *
 * <p>
 * Backup for GKE is a managed Kubernetes workload backup and restore service for GKE clusters.
 * </p>
 *
 * <p>
 * For more information about this service, see the
 * <a href="https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke" target="_blank">API Documentation</a>
 * </p>
 *
 * <p>
 * This service uses {@link BackupforGKERequestInitializer} to initialize global parameters via its
 * {@link Builder}.
 * </p>
 *
 * @since 1.3
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public class BackupforGKE 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))) ||
        com.google.api.client.googleapis.GoogleUtils.MAJOR_VERSION >= 2,
        "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 " +
        "2.0.0 of the Backup for GKE 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://gkebackup.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://gkebackup.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 BackupforGKE(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
   */
  BackupforGKE(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 Projects collection.
   *
   * <p>The typical use is:</p>
   * <pre>
   *   {@code BackupforGKE gkebackup = new BackupforGKE(...);}
   *   {@code BackupforGKE.Projects.List request = gkebackup.projects().list(parameters ...)}
   * </pre>
   *
   * @return the resource collection
   */
  public Projects projects() {
    return new Projects();
  }

  /**
   * The "projects" collection of methods.
   */
  public class Projects {

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

    /**
     * The "locations" collection of methods.
     */
    public class Locations {

      /**
       * Deletes a long-running operation. This method indicates that the client is no longer interested
       * in the operation result. It does not cancel the operation. If the server doesn't support this
       * method, it returns `google.rpc.Code.UNIMPLEMENTED`.
       *
       * Create a request for the method "locations.deleteOperations".
       *
       * This request holds the parameters needed by the gkebackup server.  After setting any optional
       * parameters, call the {@link DeleteOperations#execute()} method to invoke the remote operation.
       *
       * @param name The name of the operation resource to be deleted.
       * @return the request
       */
      public DeleteOperations deleteOperations(java.lang.String name) throws java.io.IOException {
        DeleteOperations result = new DeleteOperations(name);
        initialize(result);
        return result;
      }

      public class DeleteOperations extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Empty> {

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

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

        /**
         * Deletes a long-running operation. This method indicates that the client is no longer interested
         * in the operation result. It does not cancel the operation. If the server doesn't support this
         * method, it returns `google.rpc.Code.UNIMPLEMENTED`.
         *
         * Create a request for the method "locations.deleteOperations".
         *
         * This request holds the parameters needed by the the gkebackup server.  After setting any
         * optional parameters, call the {@link DeleteOperations#execute()} method to invoke the remote
         * operation. <p> {@link DeleteOperations#initialize(com.google.api.client.googleapis.services.Abs
         * tractGoogleClientRequest)} must be called to initialize this instance immediately after
         * invoking the constructor. </p>
         *
         * @param name The name of the operation resource to be deleted.
         * @since 1.13
         */
        protected DeleteOperations(java.lang.String name) {
          super(BackupforGKE.this, "DELETE", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Empty.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 " +
                "^projects/[^/]+/locations/[^/]+$");
          }
        }

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

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

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

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

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

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

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

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

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

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

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

        /** The name of the operation resource to be deleted. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** The name of the operation resource to be deleted.
         */
        public java.lang.String getName() {
          return name;
        }

        /** The name of the operation resource to be deleted. */
        public DeleteOperations 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 " +
                "^projects/[^/]+/locations/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public DeleteOperations set(String parameterName, Object value) {
          return (DeleteOperations) super.set(parameterName, value);
        }
      }
      /**
       * Gets information about a location.
       *
       * Create a request for the method "locations.get".
       *
       * This request holds the parameters needed by the gkebackup server.  After setting any optional
       * parameters, call the {@link Get#execute()} method to invoke the remote operation.
       *
       * @param name Resource name for the location.
       * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Location> {

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

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

        /**
         * Gets information about a location.
         *
         * Create a request for the method "locations.get".
         *
         * This request holds the parameters needed by the the gkebackup 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 Resource name for the location.
         * @since 1.13
         */
        protected Get(java.lang.String name) {
          super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Location.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 " +
                "^projects/[^/]+/locations/[^/]+$");
          }
        }

        @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);
        }

        /** Resource name for the location. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** Resource name for the location.
         */
        public java.lang.String getName() {
          return name;
        }

        /** Resource name for the location. */
        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 " +
                "^projects/[^/]+/locations/[^/]+$");
          }
          this.name = name;
          return this;
        }

        @Override
        public Get set(String parameterName, Object value) {
          return (Get) super.set(parameterName, value);
        }
      }
      /**
       * Lists information about the supported locations for this service.
       *
       * Create a request for the method "locations.list".
       *
       * This request holds the parameters needed by the gkebackup server.  After setting any optional
       * parameters, call the {@link List#execute()} method to invoke the remote operation.
       *
       * @param name The resource that owns the locations collection, if applicable.
       * @return the request
       */
      public List list(java.lang.String name) throws java.io.IOException {
        List result = new List(name);
        initialize(result);
        return result;
      }

      public class List extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListLocationsResponse> {

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

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

        /**
         * Lists information about the supported locations for this service.
         *
         * Create a request for the method "locations.list".
         *
         * This request holds the parameters needed by the the gkebackup 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 name The resource that owns the locations collection, if applicable.
         * @since 1.13
         */
        protected List(java.lang.String name) {
          super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListLocationsResponse.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 " +
                "^projects/[^/]+$");
          }
        }

        @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 resource that owns the locations collection, if applicable. */
        @com.google.api.client.util.Key
        private java.lang.String name;

        /** The resource that owns the locations collection, if applicable.
         */
        public java.lang.String getName() {
          return name;
        }

        /** The resource that owns the locations collection, if applicable. */
        public List 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 " +
                "^projects/[^/]+$");
          }
          this.name = name;
          return this;
        }

        /**
         * A filter to narrow down results to a preferred subset. The filtering language accepts
         * strings like `"displayName=tokyo"`, and is documented in more detail in
         * [AIP-160](https://google.aip.dev/160).
         */
        @com.google.api.client.util.Key
        private java.lang.String filter;

        /** A filter to narrow down results to a preferred subset. The filtering language accepts strings like
       `"displayName=tokyo"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).
         */
        public java.lang.String getFilter() {
          return filter;
        }

        /**
         * A filter to narrow down results to a preferred subset. The filtering language accepts
         * strings like `"displayName=tokyo"`, and is documented in more detail in
         * [AIP-160](https://google.aip.dev/160).
         */
        public List setFilter(java.lang.String filter) {
          this.filter = filter;
          return this;
        }

        /** The maximum number of results to return. If not set, the service selects a default. */
        @com.google.api.client.util.Key
        private java.lang.Integer pageSize;

        /** The maximum number of results to return. If not set, the service selects a default.
         */
        public java.lang.Integer getPageSize() {
          return pageSize;
        }

        /** The maximum number of results to return. If not set, the service selects a default. */
        public List setPageSize(java.lang.Integer pageSize) {
          this.pageSize = pageSize;
          return this;
        }

        /**
         * A page token received from the `next_page_token` field in the response. Send that page
         * token to receive the subsequent page.
         */
        @com.google.api.client.util.Key
        private java.lang.String pageToken;

        /** A page token received from the `next_page_token` field in the response. Send that page token to
       receive the subsequent page.
         */
        public java.lang.String getPageToken() {
          return pageToken;
        }

        /**
         * A page token received from the `next_page_token` field in the response. Send that page
         * token to receive the subsequent page.
         */
        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 BackupPlans collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code BackupforGKE gkebackup = new BackupforGKE(...);}
       *   {@code BackupforGKE.BackupPlans.List request = gkebackup.backupPlans().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public BackupPlans backupPlans() {
        return new BackupPlans();
      }

      /**
       * The "backupPlans" collection of methods.
       */
      public class BackupPlans {

        /**
         * Creates a new BackupPlan in a given location.
         *
         * Create a request for the method "backupPlans.create".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The location within which to create the BackupPlan. Format: `projects/locations`
         * @param content the {@link com.google.api.services.gkebackup.v1.model.BackupPlan}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.BackupPlan content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

          private static final String REST_PATH = "v1/{+parent}/backupPlans";

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

          /**
           * Creates a new BackupPlan in a given location.
           *
           * Create a request for the method "backupPlans.create".
           *
           * This request holds the parameters needed by the the gkebackup 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 location within which to create the BackupPlan. Format: `projects/locations`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.BackupPlan}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.BackupPlan content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
          }

          @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 location within which to create the BackupPlan. Format:
           * `projects/locations`
           */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The location within which to create the BackupPlan. Format: `projects/locations`
           */
          public java.lang.String getParent() {
            return parent;
          }

          /**
           * Required. The location within which to create the BackupPlan. Format:
           * `projects/locations`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * Required. The client-provided short name for the BackupPlan resource. This name must: -
           * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
           * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
           * letter or number - be unique within the set of BackupPlans in this location
           */
          @com.google.api.client.util.Key
          private java.lang.String backupPlanId;

          /** Required. The client-provided short name for the BackupPlan resource. This name must: - be between
         1 and 63 characters long (inclusive) - consist of only lower-case ASCII letters, numbers, and
         dashes - start with a lower-case letter - end with a lower-case letter or number - be unique within
         the set of BackupPlans in this location
           */
          public java.lang.String getBackupPlanId() {
            return backupPlanId;
          }

          /**
           * Required. The client-provided short name for the BackupPlan resource. This name must: -
           * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
           * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
           * letter or number - be unique within the set of BackupPlans in this location
           */
          public Create setBackupPlanId(java.lang.String backupPlanId) {
            this.backupPlanId = backupPlanId;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Deletes an existing BackupPlan.
         *
         * Create a request for the method "backupPlans.delete".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         *
         * @param name Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

          /**
           * Deletes an existing BackupPlan.
           *
           * Create a request for the method "backupPlans.delete".
           *
           * This request holds the parameters needed by the the gkebackup 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. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           * @since 1.13
           */
          protected Delete(java.lang.String name) {
            super(BackupforGKE.this, "DELETE", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

          @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. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          /**
           * Optional. If provided, this value must match the current value of the target
           * BackupPlan's etag field or the request is rejected.
           */
          @com.google.api.client.util.Key
          private java.lang.String etag;

          /** Optional. If provided, this value must match the current value of the target BackupPlan's etag
         field or the request is rejected.
           */
          public java.lang.String getEtag() {
            return etag;
          }

          /**
           * Optional. If provided, this value must match the current value of the target
           * BackupPlan's etag field or the request is rejected.
           */
          public Delete setEtag(java.lang.String etag) {
            this.etag = etag;
            return this;
          }

          @Override
          public Delete set(String parameterName, Object value) {
            return (Delete) super.set(parameterName, value);
          }
        }
        /**
         * Retrieve the details of a single BackupPlan.
         *
         * Create a request for the method "backupPlans.get".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Get#execute()} method to invoke the remote operation.
         *
         * @param name Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.BackupPlan> {

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

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

          /**
           * Retrieve the details of a single BackupPlan.
           *
           * Create a request for the method "backupPlans.get".
           *
           * This request holds the parameters needed by the the gkebackup 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. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           * @since 1.13
           */
          protected Get(java.lang.String name) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.BackupPlan.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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

          @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. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Required. Fully qualified BackupPlan name. Format: `projects/locations/backupPlans`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          @Override
          public Get set(String parameterName, Object value) {
            return (Get) super.set(parameterName, value);
          }
        }
        /**
         * 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 "backupPlans.getIamPolicy".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @return the request
         */
        public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
          GetIamPolicy result = new GetIamPolicy(resource);
          initialize(result);
          return result;
        }

        public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

          private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");

          /**
           * 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 "backupPlans.getIamPolicy".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
           * operation. <p> {@link
           * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @since 1.13
           */
          protected GetIamPolicy(java.lang.String resource) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy is being requested. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public GetIamPolicy setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

          /**
           * Optional. The maximum policy version that will be used to format the policy. Valid
           * values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests
           * for policies with any conditional role bindings must specify version 3. Policies with
           * no conditional role bindings may specify any valid value or leave the field unset. The
           * policy in the response might use the policy version that you specified, or it might use
           * a lower policy version. For example, if you specify version 3, but the policy has no
           * conditional role bindings, the response uses version 1. To learn which resources
           * support conditions in their IAM policies, see the [IAM
           * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          @com.google.api.client.util.Key("options.requestedPolicyVersion")
          private java.lang.Integer optionsRequestedPolicyVersion;

          /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
         and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
         conditional role bindings must specify version 3. Policies with no conditional role bindings may
         specify any valid value or leave the field unset. The policy in the response might use the policy
         version that you specified, or it might use a lower policy version. For example, if you specify
         version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
         which resources support conditions in their IAM policies, see the [IAM
         documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          public java.lang.Integer getOptionsRequestedPolicyVersion() {
            return optionsRequestedPolicyVersion;
          }

          /**
           * Optional. The maximum policy version that will be used to format the policy. Valid
           * values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests
           * for policies with any conditional role bindings must specify version 3. Policies with
           * no conditional role bindings may specify any valid value or leave the field unset. The
           * policy in the response might use the policy version that you specified, or it might use
           * a lower policy version. For example, if you specify version 3, but the policy has no
           * conditional role bindings, the response uses version 1. To learn which resources
           * support conditions in their IAM policies, see the [IAM
           * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
            this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
            return this;
          }

          @Override
          public GetIamPolicy set(String parameterName, Object value) {
            return (GetIamPolicy) super.set(parameterName, value);
          }
        }
        /**
         * Lists BackupPlans in a given location.
         *
         * Create a request for the method "backupPlans.list".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The location that contains the BackupPlans to list. Format: `projects/locations`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListBackupPlansResponse> {

          private static final String REST_PATH = "v1/{+parent}/backupPlans";

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

          /**
           * Lists BackupPlans in a given location.
           *
           * Create a request for the method "backupPlans.list".
           *
           * This request holds the parameters needed by the the gkebackup 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 location that contains the BackupPlans to list. Format: `projects/locations`
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListBackupPlansResponse.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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
          }

          @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 location that contains the BackupPlans to list. Format:
           * `projects/locations`
           */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The location that contains the BackupPlans to list. Format: `projects/locations`
           */
          public java.lang.String getParent() {
            return parent;
          }

          /**
           * Required. The location that contains the BackupPlans to list. Format:
           * `projects/locations`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /** Optional. Field match expression used to filter the results. */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** Optional. Field match expression used to filter the results.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /** Optional. Field match expression used to filter the results. */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** Optional. Field by which to sort the results. */
          @com.google.api.client.util.Key
          private java.lang.String orderBy;

          /** Optional. Field by which to sort the results.
           */
          public java.lang.String getOrderBy() {
            return orderBy;
          }

          /** Optional. Field by which to sort the results. */
          public List setOrderBy(java.lang.String orderBy) {
            this.orderBy = orderBy;
            return this;
          }

          /**
           * Optional. The target number of results to return in a single response. If not
           * specified, a default value will be chosen by the service. Note that the response may
           * include a partial list and a caller should only rely on the response's next_page_token
           * to determine if there are more instances left to be queried.
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** Optional. The target number of results to return in a single response. If not specified, a default
         value will be chosen by the service. Note that the response may include a partial list and a caller
         should only rely on the response's next_page_token to determine if there are more instances left to
         be queried.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * Optional. The target number of results to return in a single response. If not
           * specified, a default value will be chosen by the service. Note that the response may
           * include a partial list and a caller should only rely on the response's next_page_token
           * to determine if there are more instances left to be queried.
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * Optional. The value of next_page_token received from a previous `ListBackupPlans` call.
           * Provide this to retrieve the subsequent page in a multi-page list of results. When
           * paginating, all other parameters provided to `ListBackupPlans` must match the call that
           * provided the page token.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** Optional. The value of next_page_token received from a previous `ListBackupPlans` call. Provide
         this to retrieve the subsequent page in a multi-page list of results. When paginating, all other
         parameters provided to `ListBackupPlans` must match the call that provided the page token.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * Optional. The value of next_page_token received from a previous `ListBackupPlans` call.
           * Provide this to retrieve the subsequent page in a multi-page list of results. When
           * paginating, all other parameters provided to `ListBackupPlans` must match the call that
           * provided the page token.
           */
          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);
          }
        }
        /**
         * Update a BackupPlan.
         *
         * Create a request for the method "backupPlans.patch".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         *
         * @param name Output only. The full name of the BackupPlan resource. Format: `projects/locations/backupPlans`
         * @param content the {@link com.google.api.services.gkebackup.v1.model.BackupPlan}
         * @return the request
         */
        public Patch patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.BackupPlan content) throws java.io.IOException {
          Patch result = new Patch(name, content);
          initialize(result);
          return result;
        }

        public class Patch extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

          /**
           * Update a BackupPlan.
           *
           * Create a request for the method "backupPlans.patch".
           *
           * This request holds the parameters needed by the the gkebackup 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 full name of the BackupPlan resource. Format: `projects/locations/backupPlans`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.BackupPlan}
           * @since 1.13
           */
          protected Patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.BackupPlan content) {
            super(BackupforGKE.this, "PATCH", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

          @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 full name of the BackupPlan resource. Format:
           * `projects/locations/backupPlans`
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Output only. The full name of the BackupPlan resource. Format: `projects/locations/backupPlans`
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Output only. The full name of the BackupPlan resource. Format:
           * `projects/locations/backupPlans`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          /**
           * Optional. This is used to specify the fields to be overwritten in the BackupPlan
           * targeted for update. The values for each of these updated fields will be taken from the
           * `backup_plan` provided with this request. Field names are relative to the root of the
           * resource (e.g., `description`, `backup_config.include_volume_data`, etc.) If no
           * `update_mask` is provided, all fields in `backup_plan` will be written to the target
           * BackupPlan resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `backup_plan` are
           * ignored and are not used to update the target BackupPlan.
           */
          @com.google.api.client.util.Key
          private String updateMask;

          /** Optional. This is used to specify the fields to be overwritten in the BackupPlan targeted for
         update. The values for each of these updated fields will be taken from the `backup_plan` provided
         with this request. Field names are relative to the root of the resource (e.g., `description`,
         `backup_config.include_volume_data`, etc.) If no `update_mask` is provided, all fields in
         `backup_plan` will be written to the target BackupPlan resource. Note that OUTPUT_ONLY and
         IMMUTABLE fields in `backup_plan` are ignored and are not used to update the target BackupPlan.
           */
          public String getUpdateMask() {
            return updateMask;
          }

          /**
           * Optional. This is used to specify the fields to be overwritten in the BackupPlan
           * targeted for update. The values for each of these updated fields will be taken from the
           * `backup_plan` provided with this request. Field names are relative to the root of the
           * resource (e.g., `description`, `backup_config.include_volume_data`, etc.) If no
           * `update_mask` is provided, all fields in `backup_plan` will be written to the target
           * BackupPlan resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `backup_plan` are
           * ignored and are not used to update the target BackupPlan.
           */
          public Patch setUpdateMask(String updateMask) {
            this.updateMask = updateMask;
            return this;
          }

          @Override
          public Patch set(String parameterName, Object value) {
            return (Patch) super.set(parameterName, value);
          }
        }
        /**
         * Sets the access control policy on the specified resource. Replaces any existing policy. Can
         * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
         *
         * Create a request for the method "backupPlans.setIamPolicy".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
         * @return the request
         */
        public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
          SetIamPolicy result = new SetIamPolicy(resource, content);
          initialize(result);
          return result;
        }

        public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

          private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");

          /**
           * Sets the access control policy on the specified resource. Replaces any existing policy. Can
           * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
           *
           * Create a request for the method "backupPlans.setIamPolicy".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
           * operation. <p> {@link
           * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
           * @since 1.13
           */
          protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy is being specified. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy is being specified. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy is being specified. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public SetIamPolicy setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

          @Override
          public SetIamPolicy set(String parameterName, Object value) {
            return (SetIamPolicy) super.set(parameterName, value);
          }
        }
        /**
         * Returns permissions that a caller has on the specified resource. If the resource does not exist,
         * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
         * designed to be used for building permission-aware UIs and command-line tools, not for
         * authorization checking. This operation may "fail open" without warning.
         *
         * Create a request for the method "backupPlans.testIamPermissions".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
         * @return the request
         */
        public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
          TestIamPermissions result = new TestIamPermissions(resource, content);
          initialize(result);
          return result;
        }

        public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

          private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");

          /**
           * Returns permissions that a caller has on the specified resource. If the resource does not
           * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
           * operation is designed to be used for building permission-aware UIs and command-line tools, not
           * for authorization checking. This operation may "fail open" without warning.
           *
           * Create a request for the method "backupPlans.testIamPermissions".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
           * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
           * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
           * invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
           * @since 1.13
           */
          protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy detail is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy detail is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public TestIamPermissions setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

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

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

        /**
         * The "backups" collection of methods.
         */
        public class Backups {

          /**
           * Creates a Backup for the given BackupPlan.
           *
           * Create a request for the method "backups.create".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Create#execute()} method to invoke the remote operation.
           *
           * @param parent Required. The BackupPlan within which to create the Backup. Format: `projects/locations/backupPlans`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.Backup}
           * @return the request
           */
          public Create create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.Backup content) throws java.io.IOException {
            Create result = new Create(parent, content);
            initialize(result);
            return result;
          }

          public class Create extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

            private static final String REST_PATH = "v1/{+parent}/backups";

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

            /**
             * Creates a Backup for the given BackupPlan.
             *
             * Create a request for the method "backups.create".
             *
             * This request holds the parameters needed by the the gkebackup 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 BackupPlan within which to create the Backup. Format: `projects/locations/backupPlans`
             * @param content the {@link com.google.api.services.gkebackup.v1.model.Backup}
             * @since 1.13
             */
            protected Create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.Backup content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
              }
            }

            @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 BackupPlan within which to create the Backup. Format:
             * `projects/locations/backupPlans`
             */
            @com.google.api.client.util.Key
            private java.lang.String parent;

            /** Required. The BackupPlan within which to create the Backup. Format:
           `projects/locations/backupPlans`
             */
            public java.lang.String getParent() {
              return parent;
            }

            /**
             * Required. The BackupPlan within which to create the Backup. Format:
             * `projects/locations/backupPlans`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
              }
              this.parent = parent;
              return this;
            }

            /**
             * Optional. The client-provided short name for the Backup resource. This name must: -
             * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
             * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
             * letter or number - be unique within the set of Backups in this BackupPlan
             */
            @com.google.api.client.util.Key
            private java.lang.String backupId;

            /** Optional. The client-provided short name for the Backup resource. This name must: - be between 1
           and 63 characters long (inclusive) - consist of only lower-case ASCII letters, numbers, and dashes
           - start with a lower-case letter - end with a lower-case letter or number - be unique within the
           set of Backups in this BackupPlan
             */
            public java.lang.String getBackupId() {
              return backupId;
            }

            /**
             * Optional. The client-provided short name for the Backup resource. This name must: -
             * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
             * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
             * letter or number - be unique within the set of Backups in this BackupPlan
             */
            public Create setBackupId(java.lang.String backupId) {
              this.backupId = backupId;
              return this;
            }

            @Override
            public Create set(String parameterName, Object value) {
              return (Create) super.set(parameterName, value);
            }
          }
          /**
           * Deletes an existing Backup.
           *
           * Create a request for the method "backups.delete".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
           *
           * @param name Required. Name of the Backup resource. Format: `projects/locations/backupPlans/backups`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

            /**
             * Deletes an existing Backup.
             *
             * Create a request for the method "backups.delete".
             *
             * This request holds the parameters needed by the the gkebackup 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. Name of the Backup resource. Format: `projects/locations/backupPlans/backups`
             * @since 1.13
             */
            protected Delete(java.lang.String name) {
              super(BackupforGKE.this, "DELETE", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

            @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. Name of the Backup resource. Format:
             * `projects/locations/backupPlans/backups`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Required. Name of the Backup resource. Format: `projects/locations/backupPlans/backups`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Required. Name of the Backup resource. Format:
             * `projects/locations/backupPlans/backups`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.name = name;
              return this;
            }

            /**
             * Optional. If provided, this value must match the current value of the target Backup's
             * etag field or the request is rejected.
             */
            @com.google.api.client.util.Key
            private java.lang.String etag;

            /** Optional. If provided, this value must match the current value of the target Backup's etag field or
           the request is rejected.
             */
            public java.lang.String getEtag() {
              return etag;
            }

            /**
             * Optional. If provided, this value must match the current value of the target Backup's
             * etag field or the request is rejected.
             */
            public Delete setEtag(java.lang.String etag) {
              this.etag = etag;
              return this;
            }

            /**
             * Optional. If set to true, any VolumeBackups below this Backup will also be deleted.
             * Otherwise, the request will only succeed if the Backup has no VolumeBackups.
             */
            @com.google.api.client.util.Key
            private java.lang.Boolean force;

            /** Optional. If set to true, any VolumeBackups below this Backup will also be deleted. Otherwise, the
           request will only succeed if the Backup has no VolumeBackups.
             */
            public java.lang.Boolean getForce() {
              return force;
            }

            /**
             * Optional. If set to true, any VolumeBackups below this Backup will also be deleted.
             * Otherwise, the request will only succeed if the Backup has no VolumeBackups.
             */
            public Delete setForce(java.lang.Boolean force) {
              this.force = force;
              return this;
            }

            @Override
            public Delete set(String parameterName, Object value) {
              return (Delete) super.set(parameterName, value);
            }
          }
          /**
           * Retrieve the details of a single Backup.
           *
           * Create a request for the method "backups.get".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Get#execute()} method to invoke the remote operation.
           *
           * @param name Required. Full name of the Backup resource. Format: `projects/locations/backupPlans/backups`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Backup> {

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

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

            /**
             * Retrieve the details of a single Backup.
             *
             * Create a request for the method "backups.get".
             *
             * This request holds the parameters needed by the the gkebackup 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. Full name of the Backup resource. Format: `projects/locations/backupPlans/backups`
             * @since 1.13
             */
            protected Get(java.lang.String name) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Backup.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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

            @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. Full name of the Backup resource. Format:
             * `projects/locations/backupPlans/backups`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Required. Full name of the Backup resource. Format: `projects/locations/backupPlans/backups`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Required. Full name of the Backup resource. Format:
             * `projects/locations/backupPlans/backups`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.name = name;
              return this;
            }

            @Override
            public Get set(String parameterName, Object value) {
              return (Get) super.set(parameterName, value);
            }
          }
          /**
           * 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 "backups.getIamPolicy".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @return the request
           */
          public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
            GetIamPolicy result = new GetIamPolicy(resource);
            initialize(result);
            return result;
          }

          public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

            private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");

            /**
             * 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 "backups.getIamPolicy".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
             * operation. <p> {@link
             * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @since 1.13
             */
            protected GetIamPolicy(java.lang.String resource) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy is being requested. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public GetIamPolicy setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

            /**
             * Optional. The maximum policy version that will be used to format the policy. Valid
             * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
             * Requests for policies with any conditional role bindings must specify version 3.
             * Policies with no conditional role bindings may specify any valid value or leave the
             * field unset. The policy in the response might use the policy version that you
             * specified, or it might use a lower policy version. For example, if you specify
             * version 3, but the policy has no conditional role bindings, the response uses version
             * 1. To learn which resources support conditions in their IAM policies, see the [IAM
             * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            @com.google.api.client.util.Key("options.requestedPolicyVersion")
            private java.lang.Integer optionsRequestedPolicyVersion;

            /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
           and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
           conditional role bindings must specify version 3. Policies with no conditional role bindings may
           specify any valid value or leave the field unset. The policy in the response might use the policy
           version that you specified, or it might use a lower policy version. For example, if you specify
           version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
           which resources support conditions in their IAM policies, see the [IAM
           documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            public java.lang.Integer getOptionsRequestedPolicyVersion() {
              return optionsRequestedPolicyVersion;
            }

            /**
             * Optional. The maximum policy version that will be used to format the policy. Valid
             * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
             * Requests for policies with any conditional role bindings must specify version 3.
             * Policies with no conditional role bindings may specify any valid value or leave the
             * field unset. The policy in the response might use the policy version that you
             * specified, or it might use a lower policy version. For example, if you specify
             * version 3, but the policy has no conditional role bindings, the response uses version
             * 1. To learn which resources support conditions in their IAM policies, see the [IAM
             * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
              this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
              return this;
            }

            @Override
            public GetIamPolicy set(String parameterName, Object value) {
              return (GetIamPolicy) super.set(parameterName, value);
            }
          }
          /**
           * Lists the Backups for a given BackupPlan.
           *
           * Create a request for the method "backups.list".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link List#execute()} method to invoke the remote operation.
           *
           * @param parent Required. The BackupPlan that contains the Backups to list. Format: `projects/locations/backupPlans`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListBackupsResponse> {

            private static final String REST_PATH = "v1/{+parent}/backups";

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

            /**
             * Lists the Backups for a given BackupPlan.
             *
             * Create a request for the method "backups.list".
             *
             * This request holds the parameters needed by the the gkebackup 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 BackupPlan that contains the Backups to list. Format: `projects/locations/backupPlans`
             * @since 1.13
             */
            protected List(java.lang.String parent) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListBackupsResponse.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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
              }
            }

            @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 BackupPlan that contains the Backups to list. Format:
             * `projects/locations/backupPlans`
             */
            @com.google.api.client.util.Key
            private java.lang.String parent;

            /** Required. The BackupPlan that contains the Backups to list. Format:
           `projects/locations/backupPlans`
             */
            public java.lang.String getParent() {
              return parent;
            }

            /**
             * Required. The BackupPlan that contains the Backups to list. Format:
             * `projects/locations/backupPlans`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+$");
              }
              this.parent = parent;
              return this;
            }

            /** Optional. Field match expression used to filter the results. */
            @com.google.api.client.util.Key
            private java.lang.String filter;

            /** Optional. Field match expression used to filter the results.
             */
            public java.lang.String getFilter() {
              return filter;
            }

            /** Optional. Field match expression used to filter the results. */
            public List setFilter(java.lang.String filter) {
              this.filter = filter;
              return this;
            }

            /** Optional. Field by which to sort the results. */
            @com.google.api.client.util.Key
            private java.lang.String orderBy;

            /** Optional. Field by which to sort the results.
             */
            public java.lang.String getOrderBy() {
              return orderBy;
            }

            /** Optional. Field by which to sort the results. */
            public List setOrderBy(java.lang.String orderBy) {
              this.orderBy = orderBy;
              return this;
            }

            /**
             * Optional. The target number of results to return in a single response. If not
             * specified, a default value will be chosen by the service. Note that the response may
             * include a partial list and a caller should only rely on the response's
             * next_page_token to determine if there are more instances left to be queried.
             */
            @com.google.api.client.util.Key
            private java.lang.Integer pageSize;

            /** Optional. The target number of results to return in a single response. If not specified, a default
           value will be chosen by the service. Note that the response may include a partial list and a caller
           should only rely on the response's next_page_token to determine if there are more instances left to
           be queried.
             */
            public java.lang.Integer getPageSize() {
              return pageSize;
            }

            /**
             * Optional. The target number of results to return in a single response. If not
             * specified, a default value will be chosen by the service. Note that the response may
             * include a partial list and a caller should only rely on the response's
             * next_page_token to determine if there are more instances left to be queried.
             */
            public List setPageSize(java.lang.Integer pageSize) {
              this.pageSize = pageSize;
              return this;
            }

            /**
             * Optional. The value of next_page_token received from a previous `ListBackups` call.
             * Provide this to retrieve the subsequent page in a multi-page list of results. When
             * paginating, all other parameters provided to `ListBackups` must match the call that
             * provided the page token.
             */
            @com.google.api.client.util.Key
            private java.lang.String pageToken;

            /** Optional. The value of next_page_token received from a previous `ListBackups` call. Provide this to
           retrieve the subsequent page in a multi-page list of results. When paginating, all other parameters
           provided to `ListBackups` must match the call that provided the page token.
             */
            public java.lang.String getPageToken() {
              return pageToken;
            }

            /**
             * Optional. The value of next_page_token received from a previous `ListBackups` call.
             * Provide this to retrieve the subsequent page in a multi-page list of results. When
             * paginating, all other parameters provided to `ListBackups` must match the call that
             * provided the page token.
             */
            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);
            }
          }
          /**
           * Update a Backup.
           *
           * Create a request for the method "backups.patch".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
           *
           * @param name Output only. The fully qualified name of the Backup. `projects/locations/backupPlans/backups`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.Backup}
           * @return the request
           */
          public Patch patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.Backup content) throws java.io.IOException {
            Patch result = new Patch(name, content);
            initialize(result);
            return result;
          }

          public class Patch extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

            /**
             * Update a Backup.
             *
             * Create a request for the method "backups.patch".
             *
             * This request holds the parameters needed by the the gkebackup 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 fully qualified name of the Backup. `projects/locations/backupPlans/backups`
             * @param content the {@link com.google.api.services.gkebackup.v1.model.Backup}
             * @since 1.13
             */
            protected Patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.Backup content) {
              super(BackupforGKE.this, "PATCH", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

            @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 fully qualified name of the Backup.
             * `projects/locations/backupPlans/backups`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Output only. The fully qualified name of the Backup. `projects/locations/backupPlans/backups`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Output only. The fully qualified name of the Backup.
             * `projects/locations/backupPlans/backups`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.name = name;
              return this;
            }

            /**
             * Optional. This is used to specify the fields to be overwritten in the Backup targeted
             * for update. The values for each of these updated fields will be taken from the
             * `backup_plan` provided with this request. Field names are relative to the root of the
             * resource. If no `update_mask` is provided, all fields in `backup` will be written to
             * the target Backup resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `backup`
             * are ignored and are not used to update the target Backup.
             */
            @com.google.api.client.util.Key
            private String updateMask;

            /** Optional. This is used to specify the fields to be overwritten in the Backup targeted for update.
           The values for each of these updated fields will be taken from the `backup_plan` provided with this
           request. Field names are relative to the root of the resource. If no `update_mask` is provided, all
           fields in `backup` will be written to the target Backup resource. Note that OUTPUT_ONLY and
           IMMUTABLE fields in `backup` are ignored and are not used to update the target Backup.
             */
            public String getUpdateMask() {
              return updateMask;
            }

            /**
             * Optional. This is used to specify the fields to be overwritten in the Backup targeted
             * for update. The values for each of these updated fields will be taken from the
             * `backup_plan` provided with this request. Field names are relative to the root of the
             * resource. If no `update_mask` is provided, all fields in `backup` will be written to
             * the target Backup resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `backup`
             * are ignored and are not used to update the target Backup.
             */
            public Patch setUpdateMask(String updateMask) {
              this.updateMask = updateMask;
              return this;
            }

            @Override
            public Patch set(String parameterName, Object value) {
              return (Patch) super.set(parameterName, value);
            }
          }
          /**
           * Sets the access control policy on the specified resource. Replaces any existing policy. Can
           * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
           *
           * Create a request for the method "backups.setIamPolicy".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
           * @return the request
           */
          public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
            SetIamPolicy result = new SetIamPolicy(resource, content);
            initialize(result);
            return result;
          }

          public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

            private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");

            /**
             * Sets the access control policy on the specified resource. Replaces any existing policy. Can
             * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
             *
             * Create a request for the method "backups.setIamPolicy".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
             * operation. <p> {@link
             * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
             * @since 1.13
             */
            protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy is being specified. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy is being specified. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy is being specified. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public SetIamPolicy setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

            @Override
            public SetIamPolicy set(String parameterName, Object value) {
              return (SetIamPolicy) super.set(parameterName, value);
            }
          }
          /**
           * Returns permissions that a caller has on the specified resource. If the resource does not exist,
           * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
           * designed to be used for building permission-aware UIs and command-line tools, not for
           * authorization checking. This operation may "fail open" without warning.
           *
           * Create a request for the method "backups.testIamPermissions".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
           * @return the request
           */
          public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
            TestIamPermissions result = new TestIamPermissions(resource, content);
            initialize(result);
            return result;
          }

          public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

            private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");

            /**
             * Returns permissions that a caller has on the specified resource. If the resource does not
             * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
             * operation is designed to be used for building permission-aware UIs and command-line tools, not
             * for authorization checking. This operation may "fail open" without warning.
             *
             * Create a request for the method "backups.testIamPermissions".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
             * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
             * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
             * invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
             * @since 1.13
             */
            protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy detail is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy detail is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public TestIamPermissions setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

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

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

          /**
           * The "volumeBackups" collection of methods.
           */
          public class VolumeBackups {

            /**
             * Retrieve the details of a single VolumeBackup.
             *
             * Create a request for the method "volumeBackups.get".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link Get#execute()} method to invoke the remote operation.
             *
             * @param name Required. Full name of the VolumeBackup resource. Format:
             *        `projects/locations/backupPlans/backups/volumeBackups`
             * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.VolumeBackup> {

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

              private final java.util.regex.Pattern NAME_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");

              /**
               * Retrieve the details of a single VolumeBackup.
               *
               * Create a request for the method "volumeBackups.get".
               *
               * This request holds the parameters needed by the the gkebackup 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. Full name of the VolumeBackup resource. Format:
             *        `projects/locations/backupPlans/backups/volumeBackups`
               * @since 1.13
               */
              protected Get(java.lang.String name) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.VolumeBackup.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 " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
              }

              @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. Full name of the VolumeBackup resource. Format:
               * `projects/locations/backupPlans/backups/volumeBackups`
               */
              @com.google.api.client.util.Key
              private java.lang.String name;

              /** Required. Full name of the VolumeBackup resource. Format:
             `projects/locations/backupPlans/backups/volumeBackups`
               */
              public java.lang.String getName() {
                return name;
              }

              /**
               * Required. Full name of the VolumeBackup resource. Format:
               * `projects/locations/backupPlans/backups/volumeBackups`
               */
              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 " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
                this.name = name;
                return this;
              }

              @Override
              public Get set(String parameterName, Object value) {
                return (Get) super.set(parameterName, value);
              }
            }
            /**
             * 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 "volumeBackups.getIamPolicy".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @return the request
             */
            public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
              GetIamPolicy result = new GetIamPolicy(resource);
              initialize(result);
              return result;
            }

            public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

              private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");

              /**
               * 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 "volumeBackups.getIamPolicy".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
               * operation. <p> {@link
               * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
               * must be called to initialize this instance immediately after invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @since 1.13
               */
              protected GetIamPolicy(java.lang.String resource) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy is being requested. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy is being requested. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy is being requested. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              public GetIamPolicy setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

              /**
               * Optional. The maximum policy version that will be used to format the policy. Valid
               * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
               * Requests for policies with any conditional role bindings must specify version 3.
               * Policies with no conditional role bindings may specify any valid value or leave the
               * field unset. The policy in the response might use the policy version that you
               * specified, or it might use a lower policy version. For example, if you specify
               * version 3, but the policy has no conditional role bindings, the response uses
               * version 1. To learn which resources support conditions in their IAM policies, see
               * the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
               * policies).
               */
              @com.google.api.client.util.Key("options.requestedPolicyVersion")
              private java.lang.Integer optionsRequestedPolicyVersion;

              /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
             and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
             conditional role bindings must specify version 3. Policies with no conditional role bindings may
             specify any valid value or leave the field unset. The policy in the response might use the policy
             version that you specified, or it might use a lower policy version. For example, if you specify
             version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
             which resources support conditions in their IAM policies, see the [IAM
             documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
               */
              public java.lang.Integer getOptionsRequestedPolicyVersion() {
                return optionsRequestedPolicyVersion;
              }

              /**
               * Optional. The maximum policy version that will be used to format the policy. Valid
               * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
               * Requests for policies with any conditional role bindings must specify version 3.
               * Policies with no conditional role bindings may specify any valid value or leave the
               * field unset. The policy in the response might use the policy version that you
               * specified, or it might use a lower policy version. For example, if you specify
               * version 3, but the policy has no conditional role bindings, the response uses
               * version 1. To learn which resources support conditions in their IAM policies, see
               * the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
               * policies).
               */
              public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
                this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
                return this;
              }

              @Override
              public GetIamPolicy set(String parameterName, Object value) {
                return (GetIamPolicy) super.set(parameterName, value);
              }
            }
            /**
             * Lists the VolumeBackups for a given Backup.
             *
             * Create a request for the method "volumeBackups.list".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link List#execute()} method to invoke the remote operation.
             *
             * @param parent Required. The Backup that contains the VolumeBackups to list. Format:
             *        `projects/locations/backupPlans/backups`
             * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListVolumeBackupsResponse> {

              private static final String REST_PATH = "v1/{+parent}/volumeBackups";

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

              /**
               * Lists the VolumeBackups for a given Backup.
               *
               * Create a request for the method "volumeBackups.list".
               *
               * This request holds the parameters needed by the the gkebackup 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 Backup that contains the VolumeBackups to list. Format:
             *        `projects/locations/backupPlans/backups`
               * @since 1.13
               */
              protected List(java.lang.String parent) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListVolumeBackupsResponse.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 " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
                }
              }

              @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 Backup that contains the VolumeBackups to list. Format:
               * `projects/locations/backupPlans/backups`
               */
              @com.google.api.client.util.Key
              private java.lang.String parent;

              /** Required. The Backup that contains the VolumeBackups to list. Format:
             `projects/locations/backupPlans/backups`
               */
              public java.lang.String getParent() {
                return parent;
              }

              /**
               * Required. The Backup that contains the VolumeBackups to list. Format:
               * `projects/locations/backupPlans/backups`
               */
              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 " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+$");
                }
                this.parent = parent;
                return this;
              }

              /** Optional. Field match expression used to filter the results. */
              @com.google.api.client.util.Key
              private java.lang.String filter;

              /** Optional. Field match expression used to filter the results.
               */
              public java.lang.String getFilter() {
                return filter;
              }

              /** Optional. Field match expression used to filter the results. */
              public List setFilter(java.lang.String filter) {
                this.filter = filter;
                return this;
              }

              /** Optional. Field by which to sort the results. */
              @com.google.api.client.util.Key
              private java.lang.String orderBy;

              /** Optional. Field by which to sort the results.
               */
              public java.lang.String getOrderBy() {
                return orderBy;
              }

              /** Optional. Field by which to sort the results. */
              public List setOrderBy(java.lang.String orderBy) {
                this.orderBy = orderBy;
                return this;
              }

              /**
               * Optional. The target number of results to return in a single response. If not
               * specified, a default value will be chosen by the service. Note that the response
               * may include a partial list and a caller should only rely on the response's
               * next_page_token to determine if there are more instances left to be queried.
               */
              @com.google.api.client.util.Key
              private java.lang.Integer pageSize;

              /** Optional. The target number of results to return in a single response. If not specified, a default
             value will be chosen by the service. Note that the response may include a partial list and a caller
             should only rely on the response's next_page_token to determine if there are more instances left to
             be queried.
               */
              public java.lang.Integer getPageSize() {
                return pageSize;
              }

              /**
               * Optional. The target number of results to return in a single response. If not
               * specified, a default value will be chosen by the service. Note that the response
               * may include a partial list and a caller should only rely on the response's
               * next_page_token to determine if there are more instances left to be queried.
               */
              public List setPageSize(java.lang.Integer pageSize) {
                this.pageSize = pageSize;
                return this;
              }

              /**
               * Optional. The value of next_page_token received from a previous `ListVolumeBackups`
               * call. Provide this to retrieve the subsequent page in a multi-page list of results.
               * When paginating, all other parameters provided to `ListVolumeBackups` must match
               * the call that provided the page token.
               */
              @com.google.api.client.util.Key
              private java.lang.String pageToken;

              /** Optional. The value of next_page_token received from a previous `ListVolumeBackups` call. Provide
             this to retrieve the subsequent page in a multi-page list of results. When paginating, all other
             parameters provided to `ListVolumeBackups` must match the call that provided the page token.
               */
              public java.lang.String getPageToken() {
                return pageToken;
              }

              /**
               * Optional. The value of next_page_token received from a previous `ListVolumeBackups`
               * call. Provide this to retrieve the subsequent page in a multi-page list of results.
               * When paginating, all other parameters provided to `ListVolumeBackups` must match
               * the call that provided the page token.
               */
              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);
              }
            }
            /**
             * Sets the access control policy on the specified resource. Replaces any existing policy. Can
             * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
             *
             * Create a request for the method "volumeBackups.setIamPolicy".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
             * @return the request
             */
            public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
              SetIamPolicy result = new SetIamPolicy(resource, content);
              initialize(result);
              return result;
            }

            public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

              private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");

              /**
               * Sets the access control policy on the specified resource. Replaces any existing policy. Can
               * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
               *
               * Create a request for the method "volumeBackups.setIamPolicy".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
               * operation. <p> {@link
               * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
               * must be called to initialize this instance immediately after invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
               * @since 1.13
               */
              protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
                super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy is being specified. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy is being specified. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy is being specified. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              public SetIamPolicy setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

              @Override
              public SetIamPolicy set(String parameterName, Object value) {
                return (SetIamPolicy) super.set(parameterName, value);
              }
            }
            /**
             * Returns permissions that a caller has on the specified resource. If the resource does not exist,
             * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
             * designed to be used for building permission-aware UIs and command-line tools, not for
             * authorization checking. This operation may "fail open" without warning.
             *
             * Create a request for the method "volumeBackups.testIamPermissions".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
             * @return the request
             */
            public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
              TestIamPermissions result = new TestIamPermissions(resource, content);
              initialize(result);
              return result;
            }

            public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

              private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");

              /**
               * Returns permissions that a caller has on the specified resource. If the resource does not
               * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
               * operation is designed to be used for building permission-aware UIs and command-line tools, not
               * for authorization checking. This operation may "fail open" without warning.
               *
               * Create a request for the method "volumeBackups.testIamPermissions".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
               * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
               * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
               * invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
               * @since 1.13
               */
              protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
                super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy detail is being requested. See
               * [Resource names](https://cloud.google.com/apis/design/resource_names) for the
               * appropriate value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy detail is being requested. See
               * [Resource names](https://cloud.google.com/apis/design/resource_names) for the
               * appropriate value for this field.
               */
              public TestIamPermissions setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/backupPlans/[^/]+/backups/[^/]+/volumeBackups/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

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

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

      /**
       * The "operations" collection of methods.
       */
      public class Operations {

        /**
         * Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
         * cancel the operation, but success is not guaranteed. If the server doesn't support this method,
         * it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other
         * methods to check whether the cancellation succeeded or whether the operation completed despite
         * cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an
         * operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to
         * `Code.CANCELLED`.
         *
         * Create a request for the method "operations.cancel".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
         *
         * @param name The name of the operation resource to be cancelled.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.GoogleLongrunningCancelOperationRequest}
         * @return the request
         */
        public Cancel cancel(java.lang.String name, com.google.api.services.gkebackup.v1.model.GoogleLongrunningCancelOperationRequest content) throws java.io.IOException {
          Cancel result = new Cancel(name, content);
          initialize(result);
          return result;
        }

        public class Cancel extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Empty> {

          private static final String REST_PATH = "v1/{+name}:cancel";

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

          /**
           * Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
           * cancel the operation, but success is not guaranteed. If the server doesn't support this method,
           * it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other
           * methods to check whether the cancellation succeeded or whether the operation completed despite
           * cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an
           * operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to
           * `Code.CANCELLED`.
           *
           * Create a request for the method "operations.cancel".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link Cancel#execute()} method to invoke the remote operation.
           * <p> {@link
           * Cancel#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)} must
           * be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param name The name of the operation resource to be cancelled.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.GoogleLongrunningCancelOperationRequest}
           * @since 1.13
           */
          protected Cancel(java.lang.String name, com.google.api.services.gkebackup.v1.model.GoogleLongrunningCancelOperationRequest content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Empty.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 " +
                  "^projects/[^/]+/locations/[^/]+/operations/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /** The name of the operation resource to be cancelled. */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** The name of the operation resource to be cancelled.
           */
          public java.lang.String getName() {
            return name;
          }

          /** The name of the operation resource to be cancelled. */
          public Cancel 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 " +
                  "^projects/[^/]+/locations/[^/]+/operations/[^/]+$");
            }
            this.name = name;
            return this;
          }

          @Override
          public Cancel set(String parameterName, Object value) {
            return (Cancel) super.set(parameterName, value);
          }
        }
        /**
         * Gets the latest state of a long-running operation. Clients can use this method to poll the
         * operation result at intervals as recommended by the API service.
         *
         * Create a request for the method "operations.get".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Get#execute()} method to invoke the remote operation.
         *
         * @param name The name of the operation resource.
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

          /**
           * Gets the latest state of a long-running operation. Clients can use this method to poll the
           * operation result at intervals as recommended by the API service.
           *
           * Create a request for the method "operations.get".
           *
           * This request holds the parameters needed by the the gkebackup 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 The name of the operation resource.
           * @since 1.13
           */
          protected Get(java.lang.String name) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+/operations/[^/]+$");
            }
          }

          @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);
          }

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

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

          /** The name of the operation resource. */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/operations/[^/]+$");
            }
            this.name = name;
            return this;
          }

          @Override
          public Get set(String parameterName, Object value) {
            return (Get) super.set(parameterName, value);
          }
        }
        /**
         * Lists operations that match the specified filter in the request. If the server doesn't support
         * this method, it returns `UNIMPLEMENTED`.
         *
         * Create a request for the method "operations.list".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param name The name of the operation's parent resource.
         * @return the request
         */
        public List list(java.lang.String name) throws java.io.IOException {
          List result = new List(name);
          initialize(result);
          return result;
        }

        public class List extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningListOperationsResponse> {

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

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

          /**
           * Lists operations that match the specified filter in the request. If the server doesn't support
           * this method, it returns `UNIMPLEMENTED`.
           *
           * Create a request for the method "operations.list".
           *
           * This request holds the parameters needed by the the gkebackup 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 name The name of the operation's parent resource.
           * @since 1.13
           */
          protected List(java.lang.String name) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningListOperationsResponse.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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
          }

          @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 name of the operation's parent resource. */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** The name of the operation's parent resource.
           */
          public java.lang.String getName() {
            return name;
          }

          /** The name of the operation's parent resource. */
          public List 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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
            this.name = name;
            return this;
          }

          /** The standard list filter. */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** The standard list filter.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /** The standard list filter. */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** The standard list page size. */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** The standard list page size.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /** The standard list page size. */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /** The standard list page token. */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** The standard list page token.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /** The standard list page token. */
          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 RestorePlans collection.
       *
       * <p>The typical use is:</p>
       * <pre>
       *   {@code BackupforGKE gkebackup = new BackupforGKE(...);}
       *   {@code BackupforGKE.RestorePlans.List request = gkebackup.restorePlans().list(parameters ...)}
       * </pre>
       *
       * @return the resource collection
       */
      public RestorePlans restorePlans() {
        return new RestorePlans();
      }

      /**
       * The "restorePlans" collection of methods.
       */
      public class RestorePlans {

        /**
         * Creates a new RestorePlan in a given location.
         *
         * Create a request for the method "restorePlans.create".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Create#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The location within which to create the RestorePlan. Format: `projects/locations`
         * @param content the {@link com.google.api.services.gkebackup.v1.model.RestorePlan}
         * @return the request
         */
        public Create create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.RestorePlan content) throws java.io.IOException {
          Create result = new Create(parent, content);
          initialize(result);
          return result;
        }

        public class Create extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

          private static final String REST_PATH = "v1/{+parent}/restorePlans";

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

          /**
           * Creates a new RestorePlan in a given location.
           *
           * Create a request for the method "restorePlans.create".
           *
           * This request holds the parameters needed by the the gkebackup 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 location within which to create the RestorePlan. Format: `projects/locations`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.RestorePlan}
           * @since 1.13
           */
          protected Create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.RestorePlan content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
          }

          @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 location within which to create the RestorePlan. Format:
           * `projects/locations`
           */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The location within which to create the RestorePlan. Format: `projects/locations`
           */
          public java.lang.String getParent() {
            return parent;
          }

          /**
           * Required. The location within which to create the RestorePlan. Format:
           * `projects/locations`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /**
           * Required. The client-provided short name for the RestorePlan resource. This name must:
           * - be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
           * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
           * letter or number - be unique within the set of RestorePlans in this location
           */
          @com.google.api.client.util.Key
          private java.lang.String restorePlanId;

          /** Required. The client-provided short name for the RestorePlan resource. This name must: - be between
         1 and 63 characters long (inclusive) - consist of only lower-case ASCII letters, numbers, and
         dashes - start with a lower-case letter - end with a lower-case letter or number - be unique within
         the set of RestorePlans in this location
           */
          public java.lang.String getRestorePlanId() {
            return restorePlanId;
          }

          /**
           * Required. The client-provided short name for the RestorePlan resource. This name must:
           * - be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
           * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
           * letter or number - be unique within the set of RestorePlans in this location
           */
          public Create setRestorePlanId(java.lang.String restorePlanId) {
            this.restorePlanId = restorePlanId;
            return this;
          }

          @Override
          public Create set(String parameterName, Object value) {
            return (Create) super.set(parameterName, value);
          }
        }
        /**
         * Deletes an existing RestorePlan.
         *
         * Create a request for the method "restorePlans.delete".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
         *
         * @param name Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

          /**
           * Deletes an existing RestorePlan.
           *
           * Create a request for the method "restorePlans.delete".
           *
           * This request holds the parameters needed by the the gkebackup 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. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           * @since 1.13
           */
          protected Delete(java.lang.String name) {
            super(BackupforGKE.this, "DELETE", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

          @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. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          /**
           * Optional. If provided, this value must match the current value of the target
           * RestorePlan's etag field or the request is rejected.
           */
          @com.google.api.client.util.Key
          private java.lang.String etag;

          /** Optional. If provided, this value must match the current value of the target RestorePlan's etag
         field or the request is rejected.
           */
          public java.lang.String getEtag() {
            return etag;
          }

          /**
           * Optional. If provided, this value must match the current value of the target
           * RestorePlan's etag field or the request is rejected.
           */
          public Delete setEtag(java.lang.String etag) {
            this.etag = etag;
            return this;
          }

          /**
           * Optional. If set to true, any Restores below this RestorePlan will also be deleted.
           * Otherwise, the request will only succeed if the RestorePlan has no Restores.
           */
          @com.google.api.client.util.Key
          private java.lang.Boolean force;

          /** Optional. If set to true, any Restores below this RestorePlan will also be deleted. Otherwise, the
         request will only succeed if the RestorePlan has no Restores.
           */
          public java.lang.Boolean getForce() {
            return force;
          }

          /**
           * Optional. If set to true, any Restores below this RestorePlan will also be deleted.
           * Otherwise, the request will only succeed if the RestorePlan has no Restores.
           */
          public Delete setForce(java.lang.Boolean force) {
            this.force = force;
            return this;
          }

          @Override
          public Delete set(String parameterName, Object value) {
            return (Delete) super.set(parameterName, value);
          }
        }
        /**
         * Retrieve the details of a single RestorePlan.
         *
         * Create a request for the method "restorePlans.get".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Get#execute()} method to invoke the remote operation.
         *
         * @param name Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.RestorePlan> {

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

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

          /**
           * Retrieve the details of a single RestorePlan.
           *
           * Create a request for the method "restorePlans.get".
           *
           * This request holds the parameters needed by the the gkebackup 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. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           * @since 1.13
           */
          protected Get(java.lang.String name) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.RestorePlan.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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

          @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. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Required. Fully qualified RestorePlan name. Format: `projects/locations/restorePlans`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          @Override
          public Get set(String parameterName, Object value) {
            return (Get) super.set(parameterName, value);
          }
        }
        /**
         * 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 "restorePlans.getIamPolicy".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @return the request
         */
        public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
          GetIamPolicy result = new GetIamPolicy(resource);
          initialize(result);
          return result;
        }

        public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

          private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");

          /**
           * 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 "restorePlans.getIamPolicy".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
           * operation. <p> {@link
           * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @since 1.13
           */
          protected GetIamPolicy(java.lang.String resource) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy is being requested. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public GetIamPolicy setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

          /**
           * Optional. The maximum policy version that will be used to format the policy. Valid
           * values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests
           * for policies with any conditional role bindings must specify version 3. Policies with
           * no conditional role bindings may specify any valid value or leave the field unset. The
           * policy in the response might use the policy version that you specified, or it might use
           * a lower policy version. For example, if you specify version 3, but the policy has no
           * conditional role bindings, the response uses version 1. To learn which resources
           * support conditions in their IAM policies, see the [IAM
           * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          @com.google.api.client.util.Key("options.requestedPolicyVersion")
          private java.lang.Integer optionsRequestedPolicyVersion;

          /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
         and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
         conditional role bindings must specify version 3. Policies with no conditional role bindings may
         specify any valid value or leave the field unset. The policy in the response might use the policy
         version that you specified, or it might use a lower policy version. For example, if you specify
         version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
         which resources support conditions in their IAM policies, see the [IAM
         documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          public java.lang.Integer getOptionsRequestedPolicyVersion() {
            return optionsRequestedPolicyVersion;
          }

          /**
           * Optional. The maximum policy version that will be used to format the policy. Valid
           * values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests
           * for policies with any conditional role bindings must specify version 3. Policies with
           * no conditional role bindings may specify any valid value or leave the field unset. The
           * policy in the response might use the policy version that you specified, or it might use
           * a lower policy version. For example, if you specify version 3, but the policy has no
           * conditional role bindings, the response uses version 1. To learn which resources
           * support conditions in their IAM policies, see the [IAM
           * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
           */
          public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
            this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
            return this;
          }

          @Override
          public GetIamPolicy set(String parameterName, Object value) {
            return (GetIamPolicy) super.set(parameterName, value);
          }
        }
        /**
         * Lists RestorePlans in a given location.
         *
         * Create a request for the method "restorePlans.list".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link List#execute()} method to invoke the remote operation.
         *
         * @param parent Required. The location that contains the RestorePlans to list. Format: `projects/locations`
         * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListRestorePlansResponse> {

          private static final String REST_PATH = "v1/{+parent}/restorePlans";

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

          /**
           * Lists RestorePlans in a given location.
           *
           * Create a request for the method "restorePlans.list".
           *
           * This request holds the parameters needed by the the gkebackup 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 location that contains the RestorePlans to list. Format: `projects/locations`
           * @since 1.13
           */
          protected List(java.lang.String parent) {
            super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListRestorePlansResponse.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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
          }

          @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 location that contains the RestorePlans to list. Format:
           * `projects/locations`
           */
          @com.google.api.client.util.Key
          private java.lang.String parent;

          /** Required. The location that contains the RestorePlans to list. Format: `projects/locations`
           */
          public java.lang.String getParent() {
            return parent;
          }

          /**
           * Required. The location that contains the RestorePlans to list. Format:
           * `projects/locations`
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+$");
            }
            this.parent = parent;
            return this;
          }

          /** Optional. Field match expression used to filter the results. */
          @com.google.api.client.util.Key
          private java.lang.String filter;

          /** Optional. Field match expression used to filter the results.
           */
          public java.lang.String getFilter() {
            return filter;
          }

          /** Optional. Field match expression used to filter the results. */
          public List setFilter(java.lang.String filter) {
            this.filter = filter;
            return this;
          }

          /** Optional. Field by which to sort the results. */
          @com.google.api.client.util.Key
          private java.lang.String orderBy;

          /** Optional. Field by which to sort the results.
           */
          public java.lang.String getOrderBy() {
            return orderBy;
          }

          /** Optional. Field by which to sort the results. */
          public List setOrderBy(java.lang.String orderBy) {
            this.orderBy = orderBy;
            return this;
          }

          /**
           * Optional. The target number of results to return in a single response. If not
           * specified, a default value will be chosen by the service. Note that the response may
           * include a partial list and a caller should only rely on the response's next_page_token
           * to determine if there are more instances left to be queried.
           */
          @com.google.api.client.util.Key
          private java.lang.Integer pageSize;

          /** Optional. The target number of results to return in a single response. If not specified, a default
         value will be chosen by the service. Note that the response may include a partial list and a caller
         should only rely on the response's next_page_token to determine if there are more instances left to
         be queried.
           */
          public java.lang.Integer getPageSize() {
            return pageSize;
          }

          /**
           * Optional. The target number of results to return in a single response. If not
           * specified, a default value will be chosen by the service. Note that the response may
           * include a partial list and a caller should only rely on the response's next_page_token
           * to determine if there are more instances left to be queried.
           */
          public List setPageSize(java.lang.Integer pageSize) {
            this.pageSize = pageSize;
            return this;
          }

          /**
           * Optional. The value of next_page_token received from a previous `ListRestorePlans`
           * call. Provide this to retrieve the subsequent page in a multi-page list of results.
           * When paginating, all other parameters provided to `ListRestorePlans` must match the
           * call that provided the page token.
           */
          @com.google.api.client.util.Key
          private java.lang.String pageToken;

          /** Optional. The value of next_page_token received from a previous `ListRestorePlans` call. Provide
         this to retrieve the subsequent page in a multi-page list of results. When paginating, all other
         parameters provided to `ListRestorePlans` must match the call that provided the page token.
           */
          public java.lang.String getPageToken() {
            return pageToken;
          }

          /**
           * Optional. The value of next_page_token received from a previous `ListRestorePlans`
           * call. Provide this to retrieve the subsequent page in a multi-page list of results.
           * When paginating, all other parameters provided to `ListRestorePlans` must match the
           * call that provided the page token.
           */
          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);
          }
        }
        /**
         * Update a RestorePlan.
         *
         * Create a request for the method "restorePlans.patch".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
         *
         * @param name Output only. The full name of the RestorePlan resource. Format: `projects/locations/restorePlans`.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.RestorePlan}
         * @return the request
         */
        public Patch patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.RestorePlan content) throws java.io.IOException {
          Patch result = new Patch(name, content);
          initialize(result);
          return result;
        }

        public class Patch extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

          /**
           * Update a RestorePlan.
           *
           * Create a request for the method "restorePlans.patch".
           *
           * This request holds the parameters needed by the the gkebackup 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 full name of the RestorePlan resource. Format: `projects/locations/restorePlans`.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.RestorePlan}
           * @since 1.13
           */
          protected Patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.RestorePlan content) {
            super(BackupforGKE.this, "PATCH", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

          @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 full name of the RestorePlan resource. Format:
           * `projects/locations/restorePlans`.
           */
          @com.google.api.client.util.Key
          private java.lang.String name;

          /** Output only. The full name of the RestorePlan resource. Format: `projects/locations/restorePlans`.
           */
          public java.lang.String getName() {
            return name;
          }

          /**
           * Output only. The full name of the RestorePlan resource. Format:
           * `projects/locations/restorePlans`.
           */
          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 " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.name = name;
            return this;
          }

          /**
           * Optional. This is used to specify the fields to be overwritten in the RestorePlan
           * targeted for update. The values for each of these updated fields will be taken from the
           * `restore_plan` provided with this request. Field names are relative to the root of the
           * resource. If no `update_mask` is provided, all fields in `restore_plan` will be written
           * to the target RestorePlan resource. Note that OUTPUT_ONLY and IMMUTABLE fields in
           * `restore_plan` are ignored and are not used to update the target RestorePlan.
           */
          @com.google.api.client.util.Key
          private String updateMask;

          /** Optional. This is used to specify the fields to be overwritten in the RestorePlan targeted for
         update. The values for each of these updated fields will be taken from the `restore_plan` provided
         with this request. Field names are relative to the root of the resource. If no `update_mask` is
         provided, all fields in `restore_plan` will be written to the target RestorePlan resource. Note
         that OUTPUT_ONLY and IMMUTABLE fields in `restore_plan` are ignored and are not used to update the
         target RestorePlan.
           */
          public String getUpdateMask() {
            return updateMask;
          }

          /**
           * Optional. This is used to specify the fields to be overwritten in the RestorePlan
           * targeted for update. The values for each of these updated fields will be taken from the
           * `restore_plan` provided with this request. Field names are relative to the root of the
           * resource. If no `update_mask` is provided, all fields in `restore_plan` will be written
           * to the target RestorePlan resource. Note that OUTPUT_ONLY and IMMUTABLE fields in
           * `restore_plan` are ignored and are not used to update the target RestorePlan.
           */
          public Patch setUpdateMask(String updateMask) {
            this.updateMask = updateMask;
            return this;
          }

          @Override
          public Patch set(String parameterName, Object value) {
            return (Patch) super.set(parameterName, value);
          }
        }
        /**
         * Sets the access control policy on the specified resource. Replaces any existing policy. Can
         * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
         *
         * Create a request for the method "restorePlans.setIamPolicy".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
         * @return the request
         */
        public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
          SetIamPolicy result = new SetIamPolicy(resource, content);
          initialize(result);
          return result;
        }

        public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

          private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");

          /**
           * Sets the access control policy on the specified resource. Replaces any existing policy. Can
           * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
           *
           * Create a request for the method "restorePlans.setIamPolicy".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
           * operation. <p> {@link
           * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
           * must be called to initialize this instance immediately after invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
           * @since 1.13
           */
          protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy is being specified. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy is being specified. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy is being specified. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public SetIamPolicy setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

          @Override
          public SetIamPolicy set(String parameterName, Object value) {
            return (SetIamPolicy) super.set(parameterName, value);
          }
        }
        /**
         * Returns permissions that a caller has on the specified resource. If the resource does not exist,
         * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
         * designed to be used for building permission-aware UIs and command-line tools, not for
         * authorization checking. This operation may "fail open" without warning.
         *
         * Create a request for the method "restorePlans.testIamPermissions".
         *
         * This request holds the parameters needed by the gkebackup server.  After setting any optional
         * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
         *
         * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
         * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
         * @return the request
         */
        public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
          TestIamPermissions result = new TestIamPermissions(resource, content);
          initialize(result);
          return result;
        }

        public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

          private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

          private final java.util.regex.Pattern RESOURCE_PATTERN =
              java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");

          /**
           * Returns permissions that a caller has on the specified resource. If the resource does not
           * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
           * operation is designed to be used for building permission-aware UIs and command-line tools, not
           * for authorization checking. This operation may "fail open" without warning.
           *
           * Create a request for the method "restorePlans.testIamPermissions".
           *
           * This request holds the parameters needed by the the gkebackup server.  After setting any
           * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
           * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
           * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
           * invoking the constructor. </p>
           *
           * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
         *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
         *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
           * @since 1.13
           */
          protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
            super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
            this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
          }

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

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

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

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

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

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

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

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

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

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

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

          /**
           * REQUIRED: The resource for which the policy detail is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          @com.google.api.client.util.Key
          private java.lang.String resource;

          /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
         names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
         field.
           */
          public java.lang.String getResource() {
            return resource;
          }

          /**
           * REQUIRED: The resource for which the policy detail is being requested. See [Resource
           * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
           * for this field.
           */
          public TestIamPermissions setResource(java.lang.String resource) {
            if (!getSuppressPatternChecks()) {
              com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                  "Parameter resource must conform to the pattern " +
                  "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
            }
            this.resource = resource;
            return this;
          }

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

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

        /**
         * The "restores" collection of methods.
         */
        public class Restores {

          /**
           * Creates a new Restore for the given RestorePlan.
           *
           * Create a request for the method "restores.create".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Create#execute()} method to invoke the remote operation.
           *
           * @param parent Required. The RestorePlan within which to create the Restore. Format:
           *        `projects/locations/restorePlans`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.Restore}
           * @return the request
           */
          public Create create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.Restore content) throws java.io.IOException {
            Create result = new Create(parent, content);
            initialize(result);
            return result;
          }

          public class Create extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

            private static final String REST_PATH = "v1/{+parent}/restores";

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

            /**
             * Creates a new Restore for the given RestorePlan.
             *
             * Create a request for the method "restores.create".
             *
             * This request holds the parameters needed by the the gkebackup 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 RestorePlan within which to create the Restore. Format:
           *        `projects/locations/restorePlans`
             * @param content the {@link com.google.api.services.gkebackup.v1.model.Restore}
             * @since 1.13
             */
            protected Create(java.lang.String parent, com.google.api.services.gkebackup.v1.model.Restore content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
              }
            }

            @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 RestorePlan within which to create the Restore. Format:
             * `projects/locations/restorePlans`
             */
            @com.google.api.client.util.Key
            private java.lang.String parent;

            /** Required. The RestorePlan within which to create the Restore. Format:
           `projects/locations/restorePlans`
             */
            public java.lang.String getParent() {
              return parent;
            }

            /**
             * Required. The RestorePlan within which to create the Restore. Format:
             * `projects/locations/restorePlans`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
              }
              this.parent = parent;
              return this;
            }

            /**
             * Required. The client-provided short name for the Restore resource. This name must: -
             * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
             * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
             * letter or number - be unique within the set of Restores in this RestorePlan.
             */
            @com.google.api.client.util.Key
            private java.lang.String restoreId;

            /** Required. The client-provided short name for the Restore resource. This name must: - be between 1
           and 63 characters long (inclusive) - consist of only lower-case ASCII letters, numbers, and dashes
           - start with a lower-case letter - end with a lower-case letter or number - be unique within the
           set of Restores in this RestorePlan.
             */
            public java.lang.String getRestoreId() {
              return restoreId;
            }

            /**
             * Required. The client-provided short name for the Restore resource. This name must: -
             * be between 1 and 63 characters long (inclusive) - consist of only lower-case ASCII
             * letters, numbers, and dashes - start with a lower-case letter - end with a lower-case
             * letter or number - be unique within the set of Restores in this RestorePlan.
             */
            public Create setRestoreId(java.lang.String restoreId) {
              this.restoreId = restoreId;
              return this;
            }

            @Override
            public Create set(String parameterName, Object value) {
              return (Create) super.set(parameterName, value);
            }
          }
          /**
           * Deletes an existing Restore.
           *
           * Create a request for the method "restores.delete".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Delete#execute()} method to invoke the remote operation.
           *
           * @param name Required. Full name of the Restore Format: `projects/locations/restorePlans/restores`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

            /**
             * Deletes an existing Restore.
             *
             * Create a request for the method "restores.delete".
             *
             * This request holds the parameters needed by the the gkebackup 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. Full name of the Restore Format: `projects/locations/restorePlans/restores`
             * @since 1.13
             */
            protected Delete(java.lang.String name) {
              super(BackupforGKE.this, "DELETE", REST_PATH, null, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

            @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. Full name of the Restore Format: `projects/locations/restorePlans/restores`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Required. Full name of the Restore Format: `projects/locations/restorePlans/restores`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Required. Full name of the Restore Format: `projects/locations/restorePlans/restores`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.name = name;
              return this;
            }

            /**
             * Optional. If provided, this value must match the current value of the target
             * Restore's etag field or the request is rejected.
             */
            @com.google.api.client.util.Key
            private java.lang.String etag;

            /** Optional. If provided, this value must match the current value of the target Restore's etag field
           or the request is rejected.
             */
            public java.lang.String getEtag() {
              return etag;
            }

            /**
             * Optional. If provided, this value must match the current value of the target
             * Restore's etag field or the request is rejected.
             */
            public Delete setEtag(java.lang.String etag) {
              this.etag = etag;
              return this;
            }

            /**
             * Optional. If set to true, any VolumeRestores below this restore will also be deleted.
             * Otherwise, the request will only succeed if the restore has no VolumeRestores.
             */
            @com.google.api.client.util.Key
            private java.lang.Boolean force;

            /** Optional. If set to true, any VolumeRestores below this restore will also be deleted. Otherwise,
           the request will only succeed if the restore has no VolumeRestores.
             */
            public java.lang.Boolean getForce() {
              return force;
            }

            /**
             * Optional. If set to true, any VolumeRestores below this restore will also be deleted.
             * Otherwise, the request will only succeed if the restore has no VolumeRestores.
             */
            public Delete setForce(java.lang.Boolean force) {
              this.force = force;
              return this;
            }

            @Override
            public Delete set(String parameterName, Object value) {
              return (Delete) super.set(parameterName, value);
            }
          }
          /**
           * Retrieves the details of a single Restore.
           *
           * Create a request for the method "restores.get".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Get#execute()} method to invoke the remote operation.
           *
           * @param name Required. Name of the restore resource. Format: `projects/locations/restorePlans/restores`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Restore> {

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

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

            /**
             * Retrieves the details of a single Restore.
             *
             * Create a request for the method "restores.get".
             *
             * This request holds the parameters needed by the the gkebackup 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. Name of the restore resource. Format: `projects/locations/restorePlans/restores`
             * @since 1.13
             */
            protected Get(java.lang.String name) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Restore.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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

            @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. Name of the restore resource. Format:
             * `projects/locations/restorePlans/restores`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Required. Name of the restore resource. Format: `projects/locations/restorePlans/restores`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Required. Name of the restore resource. Format:
             * `projects/locations/restorePlans/restores`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.name = name;
              return this;
            }

            @Override
            public Get set(String parameterName, Object value) {
              return (Get) super.set(parameterName, value);
            }
          }
          /**
           * 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 "restores.getIamPolicy".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @return the request
           */
          public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
            GetIamPolicy result = new GetIamPolicy(resource);
            initialize(result);
            return result;
          }

          public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

            private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");

            /**
             * 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 "restores.getIamPolicy".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
             * operation. <p> {@link
             * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @since 1.13
             */
            protected GetIamPolicy(java.lang.String resource) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy is being requested. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public GetIamPolicy setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

            /**
             * Optional. The maximum policy version that will be used to format the policy. Valid
             * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
             * Requests for policies with any conditional role bindings must specify version 3.
             * Policies with no conditional role bindings may specify any valid value or leave the
             * field unset. The policy in the response might use the policy version that you
             * specified, or it might use a lower policy version. For example, if you specify
             * version 3, but the policy has no conditional role bindings, the response uses version
             * 1. To learn which resources support conditions in their IAM policies, see the [IAM
             * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            @com.google.api.client.util.Key("options.requestedPolicyVersion")
            private java.lang.Integer optionsRequestedPolicyVersion;

            /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
           and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
           conditional role bindings must specify version 3. Policies with no conditional role bindings may
           specify any valid value or leave the field unset. The policy in the response might use the policy
           version that you specified, or it might use a lower policy version. For example, if you specify
           version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
           which resources support conditions in their IAM policies, see the [IAM
           documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            public java.lang.Integer getOptionsRequestedPolicyVersion() {
              return optionsRequestedPolicyVersion;
            }

            /**
             * Optional. The maximum policy version that will be used to format the policy. Valid
             * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
             * Requests for policies with any conditional role bindings must specify version 3.
             * Policies with no conditional role bindings may specify any valid value or leave the
             * field unset. The policy in the response might use the policy version that you
             * specified, or it might use a lower policy version. For example, if you specify
             * version 3, but the policy has no conditional role bindings, the response uses version
             * 1. To learn which resources support conditions in their IAM policies, see the [IAM
             * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
             */
            public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
              this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
              return this;
            }

            @Override
            public GetIamPolicy set(String parameterName, Object value) {
              return (GetIamPolicy) super.set(parameterName, value);
            }
          }
          /**
           * Lists the Restores for a given RestorePlan.
           *
           * Create a request for the method "restores.list".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link List#execute()} method to invoke the remote operation.
           *
           * @param parent Required. The RestorePlan that contains the Restores to list. Format:
           *        `projects/locations/restorePlans`
           * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListRestoresResponse> {

            private static final String REST_PATH = "v1/{+parent}/restores";

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

            /**
             * Lists the Restores for a given RestorePlan.
             *
             * Create a request for the method "restores.list".
             *
             * This request holds the parameters needed by the the gkebackup 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 RestorePlan that contains the Restores to list. Format:
           *        `projects/locations/restorePlans`
             * @since 1.13
             */
            protected List(java.lang.String parent) {
              super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListRestoresResponse.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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
              }
            }

            @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 RestorePlan that contains the Restores to list. Format:
             * `projects/locations/restorePlans`
             */
            @com.google.api.client.util.Key
            private java.lang.String parent;

            /** Required. The RestorePlan that contains the Restores to list. Format:
           `projects/locations/restorePlans`
             */
            public java.lang.String getParent() {
              return parent;
            }

            /**
             * Required. The RestorePlan that contains the Restores to list. Format:
             * `projects/locations/restorePlans`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+$");
              }
              this.parent = parent;
              return this;
            }

            /** Optional. Field match expression used to filter the results. */
            @com.google.api.client.util.Key
            private java.lang.String filter;

            /** Optional. Field match expression used to filter the results.
             */
            public java.lang.String getFilter() {
              return filter;
            }

            /** Optional. Field match expression used to filter the results. */
            public List setFilter(java.lang.String filter) {
              this.filter = filter;
              return this;
            }

            /** Optional. Field by which to sort the results. */
            @com.google.api.client.util.Key
            private java.lang.String orderBy;

            /** Optional. Field by which to sort the results.
             */
            public java.lang.String getOrderBy() {
              return orderBy;
            }

            /** Optional. Field by which to sort the results. */
            public List setOrderBy(java.lang.String orderBy) {
              this.orderBy = orderBy;
              return this;
            }

            /**
             * Optional. The target number of results to return in a single response. If not
             * specified, a default value will be chosen by the service. Note that the response may
             * include a partial list and a caller should only rely on the response's
             * next_page_token to determine if there are more instances left to be queried.
             */
            @com.google.api.client.util.Key
            private java.lang.Integer pageSize;

            /** Optional. The target number of results to return in a single response. If not specified, a default
           value will be chosen by the service. Note that the response may include a partial list and a caller
           should only rely on the response's next_page_token to determine if there are more instances left to
           be queried.
             */
            public java.lang.Integer getPageSize() {
              return pageSize;
            }

            /**
             * Optional. The target number of results to return in a single response. If not
             * specified, a default value will be chosen by the service. Note that the response may
             * include a partial list and a caller should only rely on the response's
             * next_page_token to determine if there are more instances left to be queried.
             */
            public List setPageSize(java.lang.Integer pageSize) {
              this.pageSize = pageSize;
              return this;
            }

            /**
             * Optional. The value of next_page_token received from a previous `ListRestores` call.
             * Provide this to retrieve the subsequent page in a multi-page list of results. When
             * paginating, all other parameters provided to `ListRestores` must match the call that
             * provided the page token.
             */
            @com.google.api.client.util.Key
            private java.lang.String pageToken;

            /** Optional. The value of next_page_token received from a previous `ListRestores` call. Provide this
           to retrieve the subsequent page in a multi-page list of results. When paginating, all other
           parameters provided to `ListRestores` must match the call that provided the page token.
             */
            public java.lang.String getPageToken() {
              return pageToken;
            }

            /**
             * Optional. The value of next_page_token received from a previous `ListRestores` call.
             * Provide this to retrieve the subsequent page in a multi-page list of results. When
             * paginating, all other parameters provided to `ListRestores` must match the call that
             * provided the page token.
             */
            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);
            }
          }
          /**
           * Update a Restore.
           *
           * Create a request for the method "restores.patch".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link Patch#execute()} method to invoke the remote operation.
           *
           * @param name Output only. The full name of the Restore resource. Format:
           *        `projects/locations/restorePlans/restores`
           * @param content the {@link com.google.api.services.gkebackup.v1.model.Restore}
           * @return the request
           */
          public Patch patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.Restore content) throws java.io.IOException {
            Patch result = new Patch(name, content);
            initialize(result);
            return result;
          }

          public class Patch extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation> {

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

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

            /**
             * Update a Restore.
             *
             * Create a request for the method "restores.patch".
             *
             * This request holds the parameters needed by the the gkebackup 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 full name of the Restore resource. Format:
           *        `projects/locations/restorePlans/restores`
             * @param content the {@link com.google.api.services.gkebackup.v1.model.Restore}
             * @since 1.13
             */
            protected Patch(java.lang.String name, com.google.api.services.gkebackup.v1.model.Restore content) {
              super(BackupforGKE.this, "PATCH", REST_PATH, content, com.google.api.services.gkebackup.v1.model.GoogleLongrunningOperation.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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

            @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 full name of the Restore resource. Format:
             * `projects/locations/restorePlans/restores`
             */
            @com.google.api.client.util.Key
            private java.lang.String name;

            /** Output only. The full name of the Restore resource. Format:
           `projects/locations/restorePlans/restores`
             */
            public java.lang.String getName() {
              return name;
            }

            /**
             * Output only. The full name of the Restore resource. Format:
             * `projects/locations/restorePlans/restores`
             */
            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 " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.name = name;
              return this;
            }

            /**
             * Optional. This is used to specify the fields to be overwritten in the Restore
             * targeted for update. The values for each of these updated fields will be taken from
             * the `restore` provided with this request. Field names are relative to the root of the
             * resource. If no `update_mask` is provided, all fields in `restore` will be written to
             * the target Restore resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `restore`
             * are ignored and are not used to update the target Restore.
             */
            @com.google.api.client.util.Key
            private String updateMask;

            /** Optional. This is used to specify the fields to be overwritten in the Restore targeted for update.
           The values for each of these updated fields will be taken from the `restore` provided with this
           request. Field names are relative to the root of the resource. If no `update_mask` is provided, all
           fields in `restore` will be written to the target Restore resource. Note that OUTPUT_ONLY and
           IMMUTABLE fields in `restore` are ignored and are not used to update the target Restore.
             */
            public String getUpdateMask() {
              return updateMask;
            }

            /**
             * Optional. This is used to specify the fields to be overwritten in the Restore
             * targeted for update. The values for each of these updated fields will be taken from
             * the `restore` provided with this request. Field names are relative to the root of the
             * resource. If no `update_mask` is provided, all fields in `restore` will be written to
             * the target Restore resource. Note that OUTPUT_ONLY and IMMUTABLE fields in `restore`
             * are ignored and are not used to update the target Restore.
             */
            public Patch setUpdateMask(String updateMask) {
              this.updateMask = updateMask;
              return this;
            }

            @Override
            public Patch set(String parameterName, Object value) {
              return (Patch) super.set(parameterName, value);
            }
          }
          /**
           * Sets the access control policy on the specified resource. Replaces any existing policy. Can
           * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
           *
           * Create a request for the method "restores.setIamPolicy".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
           * @return the request
           */
          public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
            SetIamPolicy result = new SetIamPolicy(resource, content);
            initialize(result);
            return result;
          }

          public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

            private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");

            /**
             * Sets the access control policy on the specified resource. Replaces any existing policy. Can
             * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
             *
             * Create a request for the method "restores.setIamPolicy".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
             * operation. <p> {@link
             * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
             * must be called to initialize this instance immediately after invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
             * @since 1.13
             */
            protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy is being specified. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy is being specified. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy is being specified. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public SetIamPolicy setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

            @Override
            public SetIamPolicy set(String parameterName, Object value) {
              return (SetIamPolicy) super.set(parameterName, value);
            }
          }
          /**
           * Returns permissions that a caller has on the specified resource. If the resource does not exist,
           * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
           * designed to be used for building permission-aware UIs and command-line tools, not for
           * authorization checking. This operation may "fail open" without warning.
           *
           * Create a request for the method "restores.testIamPermissions".
           *
           * This request holds the parameters needed by the gkebackup server.  After setting any optional
           * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
           *
           * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
           * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
           * @return the request
           */
          public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
            TestIamPermissions result = new TestIamPermissions(resource, content);
            initialize(result);
            return result;
          }

          public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

            private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

            private final java.util.regex.Pattern RESOURCE_PATTERN =
                java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");

            /**
             * Returns permissions that a caller has on the specified resource. If the resource does not
             * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
             * operation is designed to be used for building permission-aware UIs and command-line tools, not
             * for authorization checking. This operation may "fail open" without warning.
             *
             * Create a request for the method "restores.testIamPermissions".
             *
             * This request holds the parameters needed by the the gkebackup server.  After setting any
             * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
             * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
             * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
             * invoking the constructor. </p>
             *
             * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
           *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
           *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
             * @since 1.13
             */
            protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
              super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
              this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
            }

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

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

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

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

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

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

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

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

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

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

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

            /**
             * REQUIRED: The resource for which the policy detail is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            @com.google.api.client.util.Key
            private java.lang.String resource;

            /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
           names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
           field.
             */
            public java.lang.String getResource() {
              return resource;
            }

            /**
             * REQUIRED: The resource for which the policy detail is being requested. See [Resource
             * names](https://cloud.google.com/apis/design/resource_names) for the appropriate value
             * for this field.
             */
            public TestIamPermissions setResource(java.lang.String resource) {
              if (!getSuppressPatternChecks()) {
                com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                    "Parameter resource must conform to the pattern " +
                    "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
              }
              this.resource = resource;
              return this;
            }

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

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

          /**
           * The "volumeRestores" collection of methods.
           */
          public class VolumeRestores {

            /**
             * Retrieve the details of a single VolumeRestore.
             *
             * Create a request for the method "volumeRestores.get".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link Get#execute()} method to invoke the remote operation.
             *
             * @param name Required. Full name of the VolumeRestore resource. Format:
             *        `projects/locations/restorePlans/restores/volumeRestores`
             * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.VolumeRestore> {

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

              private final java.util.regex.Pattern NAME_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");

              /**
               * Retrieve the details of a single VolumeRestore.
               *
               * Create a request for the method "volumeRestores.get".
               *
               * This request holds the parameters needed by the the gkebackup 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. Full name of the VolumeRestore resource. Format:
             *        `projects/locations/restorePlans/restores/volumeRestores`
               * @since 1.13
               */
              protected Get(java.lang.String name) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.VolumeRestore.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 " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
              }

              @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. Full name of the VolumeRestore resource. Format:
               * `projects/locations/restorePlans/restores/volumeRestores`
               */
              @com.google.api.client.util.Key
              private java.lang.String name;

              /** Required. Full name of the VolumeRestore resource. Format:
             `projects/locations/restorePlans/restores/volumeRestores`
               */
              public java.lang.String getName() {
                return name;
              }

              /**
               * Required. Full name of the VolumeRestore resource. Format:
               * `projects/locations/restorePlans/restores/volumeRestores`
               */
              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 " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
                this.name = name;
                return this;
              }

              @Override
              public Get set(String parameterName, Object value) {
                return (Get) super.set(parameterName, value);
              }
            }
            /**
             * 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 "volumeRestores.getIamPolicy".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @return the request
             */
            public GetIamPolicy getIamPolicy(java.lang.String resource) throws java.io.IOException {
              GetIamPolicy result = new GetIamPolicy(resource);
              initialize(result);
              return result;
            }

            public class GetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

              private static final String REST_PATH = "v1/{+resource}:getIamPolicy";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");

              /**
               * 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 "volumeRestores.getIamPolicy".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link GetIamPolicy#execute()} method to invoke the remote
               * operation. <p> {@link
               * GetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
               * must be called to initialize this instance immediately after invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @since 1.13
               */
              protected GetIamPolicy(java.lang.String resource) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.Policy.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy is being requested. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy is being requested. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy is being requested. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              public GetIamPolicy setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

              /**
               * Optional. The maximum policy version that will be used to format the policy. Valid
               * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
               * Requests for policies with any conditional role bindings must specify version 3.
               * Policies with no conditional role bindings may specify any valid value or leave the
               * field unset. The policy in the response might use the policy version that you
               * specified, or it might use a lower policy version. For example, if you specify
               * version 3, but the policy has no conditional role bindings, the response uses
               * version 1. To learn which resources support conditions in their IAM policies, see
               * the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
               * policies).
               */
              @com.google.api.client.util.Key("options.requestedPolicyVersion")
              private java.lang.Integer optionsRequestedPolicyVersion;

              /** Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1,
             and 3. Requests specifying an invalid value will be rejected. Requests for policies with any
             conditional role bindings must specify version 3. Policies with no conditional role bindings may
             specify any valid value or leave the field unset. The policy in the response might use the policy
             version that you specified, or it might use a lower policy version. For example, if you specify
             version 3, but the policy has no conditional role bindings, the response uses version 1. To learn
             which resources support conditions in their IAM policies, see the [IAM
             documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
               */
              public java.lang.Integer getOptionsRequestedPolicyVersion() {
                return optionsRequestedPolicyVersion;
              }

              /**
               * Optional. The maximum policy version that will be used to format the policy. Valid
               * values are 0, 1, and 3. Requests specifying an invalid value will be rejected.
               * Requests for policies with any conditional role bindings must specify version 3.
               * Policies with no conditional role bindings may specify any valid value or leave the
               * field unset. The policy in the response might use the policy version that you
               * specified, or it might use a lower policy version. For example, if you specify
               * version 3, but the policy has no conditional role bindings, the response uses
               * version 1. To learn which resources support conditions in their IAM policies, see
               * the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
               * policies).
               */
              public GetIamPolicy setOptionsRequestedPolicyVersion(java.lang.Integer optionsRequestedPolicyVersion) {
                this.optionsRequestedPolicyVersion = optionsRequestedPolicyVersion;
                return this;
              }

              @Override
              public GetIamPolicy set(String parameterName, Object value) {
                return (GetIamPolicy) super.set(parameterName, value);
              }
            }
            /**
             * Lists the VolumeRestores for a given Restore.
             *
             * Create a request for the method "volumeRestores.list".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link List#execute()} method to invoke the remote operation.
             *
             * @param parent Required. The Restore that contains the VolumeRestores to list. Format:
             *        `projects/locations/restorePlans/restores`
             * @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 BackupforGKERequest<com.google.api.services.gkebackup.v1.model.ListVolumeRestoresResponse> {

              private static final String REST_PATH = "v1/{+parent}/volumeRestores";

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

              /**
               * Lists the VolumeRestores for a given Restore.
               *
               * Create a request for the method "volumeRestores.list".
               *
               * This request holds the parameters needed by the the gkebackup 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 Restore that contains the VolumeRestores to list. Format:
             *        `projects/locations/restorePlans/restores`
               * @since 1.13
               */
              protected List(java.lang.String parent) {
                super(BackupforGKE.this, "GET", REST_PATH, null, com.google.api.services.gkebackup.v1.model.ListVolumeRestoresResponse.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 " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
                }
              }

              @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 Restore that contains the VolumeRestores to list. Format:
               * `projects/locations/restorePlans/restores`
               */
              @com.google.api.client.util.Key
              private java.lang.String parent;

              /** Required. The Restore that contains the VolumeRestores to list. Format:
             `projects/locations/restorePlans/restores`
               */
              public java.lang.String getParent() {
                return parent;
              }

              /**
               * Required. The Restore that contains the VolumeRestores to list. Format:
               * `projects/locations/restorePlans/restores`
               */
              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 " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+$");
                }
                this.parent = parent;
                return this;
              }

              /** Optional. Field match expression used to filter the results. */
              @com.google.api.client.util.Key
              private java.lang.String filter;

              /** Optional. Field match expression used to filter the results.
               */
              public java.lang.String getFilter() {
                return filter;
              }

              /** Optional. Field match expression used to filter the results. */
              public List setFilter(java.lang.String filter) {
                this.filter = filter;
                return this;
              }

              /** Optional. Field by which to sort the results. */
              @com.google.api.client.util.Key
              private java.lang.String orderBy;

              /** Optional. Field by which to sort the results.
               */
              public java.lang.String getOrderBy() {
                return orderBy;
              }

              /** Optional. Field by which to sort the results. */
              public List setOrderBy(java.lang.String orderBy) {
                this.orderBy = orderBy;
                return this;
              }

              /**
               * Optional. The target number of results to return in a single response. If not
               * specified, a default value will be chosen by the service. Note that the response
               * may include a partial list and a caller should only rely on the response's
               * next_page_token to determine if there are more instances left to be queried.
               */
              @com.google.api.client.util.Key
              private java.lang.Integer pageSize;

              /** Optional. The target number of results to return in a single response. If not specified, a default
             value will be chosen by the service. Note that the response may include a partial list and a caller
             should only rely on the response's next_page_token to determine if there are more instances left to
             be queried.
               */
              public java.lang.Integer getPageSize() {
                return pageSize;
              }

              /**
               * Optional. The target number of results to return in a single response. If not
               * specified, a default value will be chosen by the service. Note that the response
               * may include a partial list and a caller should only rely on the response's
               * next_page_token to determine if there are more instances left to be queried.
               */
              public List setPageSize(java.lang.Integer pageSize) {
                this.pageSize = pageSize;
                return this;
              }

              /**
               * Optional. The value of next_page_token received from a previous
               * `ListVolumeRestores` call. Provide this to retrieve the subsequent page in a multi-
               * page list of results. When paginating, all other parameters provided to
               * `ListVolumeRestores` must match the call that provided the page token.
               */
              @com.google.api.client.util.Key
              private java.lang.String pageToken;

              /** Optional. The value of next_page_token received from a previous `ListVolumeRestores` call. Provide
             this to retrieve the subsequent page in a multi-page list of results. When paginating, all other
             parameters provided to `ListVolumeRestores` must match the call that provided the page token.
               */
              public java.lang.String getPageToken() {
                return pageToken;
              }

              /**
               * Optional. The value of next_page_token received from a previous
               * `ListVolumeRestores` call. Provide this to retrieve the subsequent page in a multi-
               * page list of results. When paginating, all other parameters provided to
               * `ListVolumeRestores` must match the call that provided the page token.
               */
              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);
              }
            }
            /**
             * Sets the access control policy on the specified resource. Replaces any existing policy. Can
             * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
             *
             * Create a request for the method "volumeRestores.setIamPolicy".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
             * @return the request
             */
            public SetIamPolicy setIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) throws java.io.IOException {
              SetIamPolicy result = new SetIamPolicy(resource, content);
              initialize(result);
              return result;
            }

            public class SetIamPolicy extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.Policy> {

              private static final String REST_PATH = "v1/{+resource}:setIamPolicy";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");

              /**
               * Sets the access control policy on the specified resource. Replaces any existing policy. Can
               * return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.
               *
               * Create a request for the method "volumeRestores.setIamPolicy".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link SetIamPolicy#execute()} method to invoke the remote
               * operation. <p> {@link
               * SetIamPolicy#initialize(com.google.api.client.googleapis.services.AbstractGoogleClientRequest)}
               * must be called to initialize this instance immediately after invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy is being specified. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @param content the {@link com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest}
               * @since 1.13
               */
              protected SetIamPolicy(java.lang.String resource, com.google.api.services.gkebackup.v1.model.SetIamPolicyRequest content) {
                super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.Policy.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy is being specified. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy is being specified. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy is being specified. See [Resource
               * names](https://cloud.google.com/apis/design/resource_names) for the appropriate
               * value for this field.
               */
              public SetIamPolicy setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

              @Override
              public SetIamPolicy set(String parameterName, Object value) {
                return (SetIamPolicy) super.set(parameterName, value);
              }
            }
            /**
             * Returns permissions that a caller has on the specified resource. If the resource does not exist,
             * this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is
             * designed to be used for building permission-aware UIs and command-line tools, not for
             * authorization checking. This operation may "fail open" without warning.
             *
             * Create a request for the method "volumeRestores.testIamPermissions".
             *
             * This request holds the parameters needed by the gkebackup server.  After setting any optional
             * parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote operation.
             *
             * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
             * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
             * @return the request
             */
            public TestIamPermissions testIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) throws java.io.IOException {
              TestIamPermissions result = new TestIamPermissions(resource, content);
              initialize(result);
              return result;
            }

            public class TestIamPermissions extends BackupforGKERequest<com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse> {

              private static final String REST_PATH = "v1/{+resource}:testIamPermissions";

              private final java.util.regex.Pattern RESOURCE_PATTERN =
                  java.util.regex.Pattern.compile("^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");

              /**
               * Returns permissions that a caller has on the specified resource. If the resource does not
               * exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This
               * operation is designed to be used for building permission-aware UIs and command-line tools, not
               * for authorization checking. This operation may "fail open" without warning.
               *
               * Create a request for the method "volumeRestores.testIamPermissions".
               *
               * This request holds the parameters needed by the the gkebackup server.  After setting any
               * optional parameters, call the {@link TestIamPermissions#execute()} method to invoke the remote
               * operation. <p> {@link TestIamPermissions#initialize(com.google.api.client.googleapis.services.A
               * bstractGoogleClientRequest)} must be called to initialize this instance immediately after
               * invoking the constructor. </p>
               *
               * @param resource REQUIRED: The resource for which the policy detail is being requested. See [Resource
             *        names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for
             *        this field.
               * @param content the {@link com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest}
               * @since 1.13
               */
              protected TestIamPermissions(java.lang.String resource, com.google.api.services.gkebackup.v1.model.TestIamPermissionsRequest content) {
                super(BackupforGKE.this, "POST", REST_PATH, content, com.google.api.services.gkebackup.v1.model.TestIamPermissionsResponse.class);
                this.resource = com.google.api.client.util.Preconditions.checkNotNull(resource, "Required parameter resource must be specified.");
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
              }

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

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

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

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

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

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

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

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

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

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

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

              /**
               * REQUIRED: The resource for which the policy detail is being requested. See
               * [Resource names](https://cloud.google.com/apis/design/resource_names) for the
               * appropriate value for this field.
               */
              @com.google.api.client.util.Key
              private java.lang.String resource;

              /** REQUIRED: The resource for which the policy detail is being requested. See [Resource
             names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this
             field.
               */
              public java.lang.String getResource() {
                return resource;
              }

              /**
               * REQUIRED: The resource for which the policy detail is being requested. See
               * [Resource names](https://cloud.google.com/apis/design/resource_names) for the
               * appropriate value for this field.
               */
              public TestIamPermissions setResource(java.lang.String resource) {
                if (!getSuppressPatternChecks()) {
                  com.google.api.client.util.Preconditions.checkArgument(RESOURCE_PATTERN.matcher(resource).matches(),
                      "Parameter resource must conform to the pattern " +
                      "^projects/[^/]+/locations/[^/]+/restorePlans/[^/]+/restores/[^/]+/volumeRestores/[^/]+$");
                }
                this.resource = resource;
                return this;
              }

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

          }
        }
      }
    }
  }

  /**
   * Builder for {@link BackupforGKE}.
   *
   * <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 BackupforGKE}. */
    @Override
    public BackupforGKE build() {
      return new BackupforGKE(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 BackupforGKERequestInitializer}.
     *
     * @since 1.12
     */
    public Builder setBackupforGKERequestInitializer(
        BackupforGKERequestInitializer backupforgkeRequestInitializer) {
      return (Builder) super.setGoogleClientRequestInitializer(backupforgkeRequestInitializer);
    }

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