/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for
* license information.
*/
package com.microsoft.azure.management.appservice;
import com.microsoft.azure.management.apigeneration.Beta;
import com.microsoft.azure.management.apigeneration.Fluent;
import com.microsoft.azure.management.resources.fluentcore.arm.models.ChildResource;
import com.microsoft.azure.management.resources.fluentcore.model.Attachable;
import com.microsoft.azure.management.resources.fluentcore.model.HasInner;
import com.microsoft.azure.management.appservice.implementation.SiteSourceControlInner;
/**
* An immutable representation of a web app source control configuration in a web app.
*/
@Fluent(ContainerName = "/Microsoft.Azure.Management.AppService.Fluent")
@Beta
public interface WebAppSourceControl extends
HasInner<SiteSourceControlInner>,
ChildResource<WebAppBase> {
/**
* @return the repository or source control url
*/
String repositoryUrl();
/**
* @return the name of the branch to use for deployment
*/
String branch();
/**
* @return whether to do manual or continuous integration
*/
boolean isManualIntegration();
/**
* @return whether deployment rollback is enabled
*/
boolean deploymentRollbackEnabled();
/**
* @return mercurial or Git repository type
*/
RepositoryType repositoryType();
/**
* The entirety of a web app source control definition.
* @param <ParentT> the return type of the final {@link Attachable#attach()}
*/
interface Definition<ParentT> extends
DefinitionStages.Blank<ParentT>,
DefinitionStages.WithAttach<ParentT>,
DefinitionStages.GitHubWithAttach<ParentT>,
DefinitionStages.WithRepositoryType<ParentT>,
DefinitionStages.WithBranch<ParentT>,
DefinitionStages.WithGitHubBranch<ParentT> {
}
/**
* Grouping of web app source control definition stages applicable as part of a web app creation.
*/
interface DefinitionStages {
/**
* The first stage of a web app source control definition as part of a definition of a web app.
* @param <ParentT> the return type of the final {@link Attachable#attach()}
*/
interface Blank<ParentT> extends WithRepositoryType<ParentT> {
}
/**
* A web app source control definition allowing repository type to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithRepositoryType<ParentT> {
/**
* Specifies the repository to be a public external repository, either Git or Mercurial.
* Continuous integration will not be turned on.
* @param url the url of the Git repository
* @return the next stage of the definition
*/
WithBranch<ParentT> withPublicGitRepository(String url);
/**
* Specifies the repository to be a public external repository, either Git or Mercurial.
* Continuous integration will not be turned on.
* @param url the url of the Mercurial repository
* @return the next stage of the definition
*/
WithBranch<ParentT> withPublicMercurialRepository(String url);
/**
* Specifies the repository to be a GitHub repository. Continuous integration
* will be turned on.
* This repository can be either public or private, but your GitHub access token
* must have enough privileges to add a webhook to the repository.
* @param organization the user name or organization name the GitHub repository belongs to, e.g. Azure
* @param repository the name of the repository, e.g. azure-sdk-for-java
* @return the next stage of the definition
*/
WithGitHubBranch<ParentT> withContinuouslyIntegratedGitHubRepository(String organization, String repository);
/**
* Specifies the repository to be a GitHub repository. Continuous integration
* will be turned on.
* This repository can be either public or private, but your GitHub access token
* must have enough privileges to add a webhook to the repository.
* @param url the URL pointing to the repository, e.g. https://github.com/Azure/azure-sdk-for-java
* @return the next stage of the definition
*/
WithGitHubBranch<ParentT> withContinuouslyIntegratedGitHubRepository(String url);
}
/**
* A web app source control definition allowing branch to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithBranch<ParentT> {
/**
* Specifies the branch in the repository to use.
* @param branch the branch to use
* @return the next stage of the definition
*/
WithAttach<ParentT> withBranch(String branch);
}
/**
* A web app source control definition allowing branch to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithGitHubBranch<ParentT> {
/**
* Specifies the branch in the repository to use.
* @param branch the branch to use
* @return the next stage of the definition
*/
GitHubWithAttach<ParentT> withBranch(String branch);
}
/**
* A web app source control definition allowing GitHub access token to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithGitHubAccessToken<ParentT> {
/**
* Specifies the GitHub personal access token. You can acquire one from
* https://github.com/settings/tokens.
* @param personalAccessToken the personal access token from GitHub.
* @return the next stage of the definition
*/
GitHubWithAttach<ParentT> withGitHubAccessToken(String personalAccessToken);
}
/** The final stage of the web app source control definition.
* <p>
* At this stage, any remaining optional settings can be specified, or the web app source control definition
* can be attached to the parent web app definition using {@link WithAttach#attach()}.
* @param <ParentT> the return type of {@link WithAttach#attach()}
*/
interface WithAttach<ParentT> extends
Attachable.InDefinition<ParentT> {
}
/** The final stage of the web app source control definition that binds to a GitHub account.
* <p>
* At this stage, any remaining optional settings can be specified, or the web app source control definition
* can be attached to the parent web app definition using {@link WithAttach#attach()}.
* @param <ParentT> the return type of {@link WithAttach#attach()}
*/
interface GitHubWithAttach<ParentT> extends
WithAttach<ParentT>,
WithGitHubAccessToken<ParentT> {
}
}
/** The entirety of a web app source control definition as part of a web app update.
* @param <ParentT> the return type of the final {@link UpdateDefinitionStages.WithAttach#attach()}
*/
interface UpdateDefinition<ParentT> extends
UpdateDefinitionStages.Blank<ParentT>,
UpdateDefinitionStages.WithAttach<ParentT>,
UpdateDefinitionStages.GitHubWithAttach<ParentT>,
UpdateDefinitionStages.WithRepositoryType<ParentT>,
UpdateDefinitionStages.WithBranch<ParentT>,
UpdateDefinitionStages.WithGitHubBranch<ParentT> {
}
/**
* Grouping of web app source control definition stages applicable as part of a web app update.
*/
interface UpdateDefinitionStages {
/**
* The first stage of a web app source control definition as part of an update of a web app.
* @param <ParentT> the return type of the final {@link Attachable#attach()}
*/
interface Blank<ParentT> extends WithRepositoryType<ParentT> {
}
/**
* A web app source control definition allowing repository type to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithRepositoryType<ParentT> {
/**
* Specifies the repository to be a public external repository, either Git or Mercurial.
* Continuous integration will not be turned on.
* @param url the url of the Git repository
* @return the next stage of the definition
*/
WithBranch<ParentT> withPublicGitRepository(String url);
/**
* Specifies the repository to be a public external repository, either Git or Mercurial.
* Continuous integration will not be turned on.
* @param url the url of the Mercurial repository
* @return the next stage of the definition
*/
WithBranch<ParentT> withPublicMercurialRepository(String url);
/**
* Specifies the repository to be a GitHub repository. Continuous integration
* will be turned on.
* This repository can be either public or private, but your GitHub access token
* must have enough privileges to add a webhook to the repository.
* @param organization the user name or organization name the GitHub repository belongs to, e.g. Azure
* @param repository the name of the repository, e.g. azure-sdk-for-java
* @return the next stage of the definition
*/
WithGitHubBranch<ParentT> withContinuouslyIntegratedGitHubRepository(String organization, String repository);
/**
* Specifies the repository to be a GitHub repository. Continuous integration
* will be turned on.
* This repository can be either public or private, but your GitHub access token
* must have enough privileges to add a webhook to the repository.
* @param url the URL pointing to the repository, e.g. https://github.com/Azure/azure-sdk-for-java
* @return the next stage of the definition
*/
WithGitHubBranch<ParentT> withContinuouslyIntegratedGitHubRepository(String url);
}
/**
* A web app source control definition allowing branch to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithBranch<ParentT> {
/**
* Specifies the branch in the repository to use.
* @param branch the branch to use
* @return the next stage of the definition
*/
WithAttach<ParentT> withBranch(String branch);
}
/**
* A web app source control definition allowing branch to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithGitHubBranch<ParentT> {
/**
* Specifies the branch in the repository to use.
* @param branch the branch to use
* @return the next stage of the definition
*/
GitHubWithAttach<ParentT> withBranch(String branch);
}
/**
* A web app source control definition allowing GitHub access token to be specified.
* @param <ParentT> the stage of the parent definition to return to after attaching this definition
*/
interface WithGitHubAccessToken<ParentT> {
/**
* Specifies the GitHub personal access token. You can acquire one from
* https://github.com/settings/tokens.
* @param personalAccessToken the personal access token from GitHub.
* @return the next stage of the definition
*/
GitHubWithAttach<ParentT> withGitHubAccessToken(String personalAccessToken);
}
/** The final stage of the web app source control definition.
* <p>
* At this stage, any remaining optional settings can be specified, or the web app source control definition
* can be attached to the parent web app update using {@link WithAttach#attach()}.
* @param <ParentT> the return type of {@link WithAttach#attach()}
*/
interface WithAttach<ParentT> extends
Attachable.InUpdate<ParentT> {
}
/** The final stage of the web app source control definition that binds to a GitHub account.
* <p>
* At this stage, any remaining optional settings can be specified, or the web app source control definition
* can be attached to the parent web app update using {@link WithAttach#attach()}.
* @param <ParentT> the return type of {@link WithAttach#attach()}
*/
interface GitHubWithAttach<ParentT> extends
WithAttach<ParentT>,
WithGitHubAccessToken<ParentT> {
}
}
}