text: /**
   * Copyright (c) Microsoft Corporation. All rights reserved.
   * Licensed under the MIT License. See License.txt in the project root for
   * license information.
   *
   * Code generated by Microsoft (R) AutoRest Code Generator.
   */
  
  package com.microsoft.azure.management.network.v2018_08_01;
  
  import com.microsoft.azure.arm.model.HasInner;
  import com.microsoft.azure.management.network.v2018_08_01.implementation.ExpressRouteCircuitAuthorizationInner;
  import com.microsoft.azure.arm.model.Indexable;
  import com.microsoft.azure.arm.model.Refreshable;
  import com.microsoft.azure.arm.model.Updatable;
  import com.microsoft.azure.arm.model.Appliable;
  import com.microsoft.azure.arm.model.Creatable;
  import com.microsoft.azure.arm.resources.models.HasManager;
  import com.microsoft.azure.management.network.v2018_08_01.implementation.NetworkManager;
  
  /**
   * Type representing ExpressRouteCircuitAuthorization.
   */
  public interface ExpressRouteCircuitAuthorization extends HasInner<ExpressRouteCircuitAuthorizationInner>, Indexable, Refreshable<ExpressRouteCircuitAuthorization>, Updatable<ExpressRouteCircuitAuthorization.Update>, HasManager<NetworkManager> {
      /**
       * @return the authorizationKey value.
       */
      String authorizationKey();
  
      /**
       * @return the authorizationUseStatus value.
       */
      AuthorizationUseStatus authorizationUseStatus();
  
      /**
       * @return the etag value.
       */
      String etag();
  
      /**
       * @return the id value.
       */
      String id();
  
      /**
       * @return the name value.
       */
      String name();
  
      /**
       * @return the provisioningState value.
       */
      String provisioningState();
  
      /**
       * The entirety of the ExpressRouteCircuitAuthorization definition.
       */
      interface Definition extends DefinitionStages.Blank, DefinitionStages.WithExpressRouteCircuit, DefinitionStages.WithCreate {
      }
  
      /**
       * Grouping of ExpressRouteCircuitAuthorization definition stages.
       */
      interface DefinitionStages {
          /**
           * The first stage of a ExpressRouteCircuitAuthorization definition.
           */
          interface Blank extends WithExpressRouteCircuit {
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify ExpressRouteCircuit.
           */
          interface WithExpressRouteCircuit {
             /**
              * Specifies resourceGroupName, circuitName.
              * @param resourceGroupName The name of the resource group
              * @param circuitName The name of the express route circuit
              * @return the next definition stage
              */
              WithCreate withExistingExpressRouteCircuit(String resourceGroupName, String circuitName);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify AuthorizationKey.
           */
          interface WithAuthorizationKey {
              /**
               * Specifies authorizationKey.
               * @param authorizationKey The authorization key
               * @return the next definition stage
               */
              WithCreate withAuthorizationKey(String authorizationKey);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify AuthorizationUseStatus.
           */
          interface WithAuthorizationUseStatus {
              /**
               * Specifies authorizationUseStatus.
               * @param authorizationUseStatus AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
               * @return the next definition stage
               */
              WithCreate withAuthorizationUseStatus(AuthorizationUseStatus authorizationUseStatus);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify Id.
           */
          interface WithId {
              /**
               * Specifies id.
               * @param id Resource ID
               * @return the next definition stage
               */
              WithCreate withId(String id);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify Name.
           */
          interface WithName {
              /**
               * Specifies name.
               * @param name Gets name of the resource that is unique within a resource group. This name can be used to access the resource
               * @return the next definition stage
               */
              WithCreate withName(String name);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization definition allowing to specify ProvisioningState.
           */
          interface WithProvisioningState {
              /**
               * Specifies provisioningState.
               * @param provisioningState Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'
               * @return the next definition stage
               */
              WithCreate withProvisioningState(String provisioningState);
          }
  
          /**
           * The stage of the definition which contains all the minimum required inputs for
           * the resource to be created (via {@link WithCreate#create()}), but also allows
           * for any other optional settings to be specified.
           */
          interface WithCreate extends Creatable<ExpressRouteCircuitAuthorization>, DefinitionStages.WithAuthorizationKey, DefinitionStages.WithAuthorizationUseStatus, DefinitionStages.WithId, DefinitionStages.WithName, DefinitionStages.WithProvisioningState {
          }
      }
      /**
       * The template for a ExpressRouteCircuitAuthorization update operation, containing all the settings that can be modified.
       */
      interface Update extends Appliable<ExpressRouteCircuitAuthorization>, UpdateStages.WithAuthorizationKey, UpdateStages.WithAuthorizationUseStatus, UpdateStages.WithId, UpdateStages.WithName, UpdateStages.WithProvisioningState {
      }
  
      /**
       * Grouping of ExpressRouteCircuitAuthorization update stages.
       */
      interface UpdateStages {
          /**
           * The stage of the expressroutecircuitauthorization update allowing to specify AuthorizationKey.
           */
          interface WithAuthorizationKey {
              /**
               * Specifies authorizationKey.
               * @param authorizationKey The authorization key
               * @return the next update stage
               */
              Update withAuthorizationKey(String authorizationKey);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization update allowing to specify AuthorizationUseStatus.
           */
          interface WithAuthorizationUseStatus {
              /**
               * Specifies authorizationUseStatus.
               * @param authorizationUseStatus AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
               * @return the next update stage
               */
              Update withAuthorizationUseStatus(AuthorizationUseStatus authorizationUseStatus);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization update allowing to specify Id.
           */
          interface WithId {
              /**
               * Specifies id.
               * @param id Resource ID
               * @return the next update stage
               */
              Update withId(String id);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization update allowing to specify Name.
           */
          interface WithName {
              /**
               * Specifies name.
               * @param name Gets name of the resource that is unique within a resource group. This name can be used to access the resource
               * @return the next update stage
               */
              Update withName(String name);
          }
  
          /**
           * The stage of the expressroutecircuitauthorization update allowing to specify ProvisioningState.
           */
          interface WithProvisioningState {
              /**
               * Specifies provisioningState.
               * @param provisioningState Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'
               * @return the next update stage
               */
              Update withProvisioningState(String provisioningState);
          }
  
      }
  }
  