// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.streamanalytics.fluent.models;

import com.azure.core.annotation.Fluent;
import com.azure.core.util.logging.ClientLogger;
import com.azure.resourcemanager.streamanalytics.models.AuthenticationMode;
import com.azure.resourcemanager.streamanalytics.models.OAuthBasedDataSourceProperties;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

/** The properties that are associated with an Azure Data Lake Store. */
@Fluent
public final class AzureDataLakeStoreOutputDataSourceProperties extends OAuthBasedDataSourceProperties {
    @JsonIgnore
    private final ClientLogger logger = new ClientLogger(AzureDataLakeStoreOutputDataSourceProperties.class);

    /*
     * The name of the Azure Data Lake Store account. Required on PUT
     * (CreateOrReplace) requests.
     */
    @JsonProperty(value = "accountName")
    private String accountName;

    /*
     * The tenant id of the user used to obtain the refresh token. Required on
     * PUT (CreateOrReplace) requests.
     */
    @JsonProperty(value = "tenantId")
    private String tenantId;

    /*
     * The location of the file to which the output should be written to.
     * Required on PUT (CreateOrReplace) requests.
     */
    @JsonProperty(value = "filePathPrefix")
    private String filePathPrefix;

    /*
     * The date format. Wherever {date} appears in filePathPrefix, the value of
     * this property is used as the date format instead.
     */
    @JsonProperty(value = "dateFormat")
    private String dateFormat;

    /*
     * The time format. Wherever {time} appears in filePathPrefix, the value of
     * this property is used as the time format instead.
     */
    @JsonProperty(value = "timeFormat")
    private String timeFormat;

    /*
     * Authentication Mode.
     */
    @JsonProperty(value = "authenticationMode")
    private AuthenticationMode authenticationMode;

    /**
     * Get the accountName property: The name of the Azure Data Lake Store account. Required on PUT (CreateOrReplace)
     * requests.
     *
     * @return the accountName value.
     */
    public String accountName() {
        return this.accountName;
    }

    /**
     * Set the accountName property: The name of the Azure Data Lake Store account. Required on PUT (CreateOrReplace)
     * requests.
     *
     * @param accountName the accountName value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withAccountName(String accountName) {
        this.accountName = accountName;
        return this;
    }

    /**
     * Get the tenantId property: The tenant id of the user used to obtain the refresh token. Required on PUT
     * (CreateOrReplace) requests.
     *
     * @return the tenantId value.
     */
    public String tenantId() {
        return this.tenantId;
    }

    /**
     * Set the tenantId property: The tenant id of the user used to obtain the refresh token. Required on PUT
     * (CreateOrReplace) requests.
     *
     * @param tenantId the tenantId value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withTenantId(String tenantId) {
        this.tenantId = tenantId;
        return this;
    }

    /**
     * Get the filePathPrefix property: The location of the file to which the output should be written to. Required on
     * PUT (CreateOrReplace) requests.
     *
     * @return the filePathPrefix value.
     */
    public String filePathPrefix() {
        return this.filePathPrefix;
    }

    /**
     * Set the filePathPrefix property: The location of the file to which the output should be written to. Required on
     * PUT (CreateOrReplace) requests.
     *
     * @param filePathPrefix the filePathPrefix value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withFilePathPrefix(String filePathPrefix) {
        this.filePathPrefix = filePathPrefix;
        return this;
    }

    /**
     * Get the dateFormat property: The date format. Wherever {date} appears in filePathPrefix, the value of this
     * property is used as the date format instead.
     *
     * @return the dateFormat value.
     */
    public String dateFormat() {
        return this.dateFormat;
    }

    /**
     * Set the dateFormat property: The date format. Wherever {date} appears in filePathPrefix, the value of this
     * property is used as the date format instead.
     *
     * @param dateFormat the dateFormat value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withDateFormat(String dateFormat) {
        this.dateFormat = dateFormat;
        return this;
    }

    /**
     * Get the timeFormat property: The time format. Wherever {time} appears in filePathPrefix, the value of this
     * property is used as the time format instead.
     *
     * @return the timeFormat value.
     */
    public String timeFormat() {
        return this.timeFormat;
    }

    /**
     * Set the timeFormat property: The time format. Wherever {time} appears in filePathPrefix, the value of this
     * property is used as the time format instead.
     *
     * @param timeFormat the timeFormat value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withTimeFormat(String timeFormat) {
        this.timeFormat = timeFormat;
        return this;
    }

    /**
     * Get the authenticationMode property: Authentication Mode.
     *
     * @return the authenticationMode value.
     */
    public AuthenticationMode authenticationMode() {
        return this.authenticationMode;
    }

    /**
     * Set the authenticationMode property: Authentication Mode.
     *
     * @param authenticationMode the authenticationMode value to set.
     * @return the AzureDataLakeStoreOutputDataSourceProperties object itself.
     */
    public AzureDataLakeStoreOutputDataSourceProperties withAuthenticationMode(AuthenticationMode authenticationMode) {
        this.authenticationMode = authenticationMode;
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public AzureDataLakeStoreOutputDataSourceProperties withRefreshToken(String refreshToken) {
        super.withRefreshToken(refreshToken);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public AzureDataLakeStoreOutputDataSourceProperties withTokenUserPrincipalName(String tokenUserPrincipalName) {
        super.withTokenUserPrincipalName(tokenUserPrincipalName);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public AzureDataLakeStoreOutputDataSourceProperties withTokenUserDisplayName(String tokenUserDisplayName) {
        super.withTokenUserDisplayName(tokenUserDisplayName);
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    @Override
    public void validate() {
        super.validate();
    }
}
