// 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.ServiceBusDataSourceProperties;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** The properties that are associated with a Service Bus Queue output. */
@Fluent
public final class ServiceBusQueueOutputDataSourceProperties extends ServiceBusDataSourceProperties {
    @JsonIgnore private final ClientLogger logger = new ClientLogger(ServiceBusQueueOutputDataSourceProperties.class);

    /*
     * The name of the Service Bus Queue. Required on PUT (CreateOrReplace)
     * requests.
     */
    @JsonProperty(value = "queueName")
    private String queueName;

    /*
     * A string array of the names of output columns to be attached to Service
     * Bus messages as custom properties.
     */
    @JsonProperty(value = "propertyColumns")
    private List<String> propertyColumns;

    /*
     * The system properties associated with the Service Bus Queue. The
     * following system properties are supported: ReplyToSessionId,
     * ContentType, To, Subject, CorrelationId, TimeToLive, PartitionKey,
     * SessionId, ScheduledEnqueueTime, MessageId, ReplyTo, Label,
     * ScheduledEnqueueTimeUtc.
     */
    @JsonProperty(value = "systemPropertyColumns")
    private Object systemPropertyColumns;

    /**
     * Get the queueName property: The name of the Service Bus Queue. Required on PUT (CreateOrReplace) requests.
     *
     * @return the queueName value.
     */
    public String queueName() {
        return this.queueName;
    }

    /**
     * Set the queueName property: The name of the Service Bus Queue. Required on PUT (CreateOrReplace) requests.
     *
     * @param queueName the queueName value to set.
     * @return the ServiceBusQueueOutputDataSourceProperties object itself.
     */
    public ServiceBusQueueOutputDataSourceProperties withQueueName(String queueName) {
        this.queueName = queueName;
        return this;
    }

    /**
     * Get the propertyColumns property: A string array of the names of output columns to be attached to Service Bus
     * messages as custom properties.
     *
     * @return the propertyColumns value.
     */
    public List<String> propertyColumns() {
        return this.propertyColumns;
    }

    /**
     * Set the propertyColumns property: A string array of the names of output columns to be attached to Service Bus
     * messages as custom properties.
     *
     * @param propertyColumns the propertyColumns value to set.
     * @return the ServiceBusQueueOutputDataSourceProperties object itself.
     */
    public ServiceBusQueueOutputDataSourceProperties withPropertyColumns(List<String> propertyColumns) {
        this.propertyColumns = propertyColumns;
        return this;
    }

    /**
     * Get the systemPropertyColumns property: The system properties associated with the Service Bus Queue. The
     * following system properties are supported: ReplyToSessionId, ContentType, To, Subject, CorrelationId, TimeToLive,
     * PartitionKey, SessionId, ScheduledEnqueueTime, MessageId, ReplyTo, Label, ScheduledEnqueueTimeUtc.
     *
     * @return the systemPropertyColumns value.
     */
    public Object systemPropertyColumns() {
        return this.systemPropertyColumns;
    }

    /**
     * Set the systemPropertyColumns property: The system properties associated with the Service Bus Queue. The
     * following system properties are supported: ReplyToSessionId, ContentType, To, Subject, CorrelationId, TimeToLive,
     * PartitionKey, SessionId, ScheduledEnqueueTime, MessageId, ReplyTo, Label, ScheduledEnqueueTimeUtc.
     *
     * @param systemPropertyColumns the systemPropertyColumns value to set.
     * @return the ServiceBusQueueOutputDataSourceProperties object itself.
     */
    public ServiceBusQueueOutputDataSourceProperties withSystemPropertyColumns(Object systemPropertyColumns) {
        this.systemPropertyColumns = systemPropertyColumns;
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ServiceBusQueueOutputDataSourceProperties withServiceBusNamespace(String serviceBusNamespace) {
        super.withServiceBusNamespace(serviceBusNamespace);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ServiceBusQueueOutputDataSourceProperties withSharedAccessPolicyName(String sharedAccessPolicyName) {
        super.withSharedAccessPolicyName(sharedAccessPolicyName);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ServiceBusQueueOutputDataSourceProperties withSharedAccessPolicyKey(String sharedAccessPolicyKey) {
        super.withSharedAccessPolicyKey(sharedAccessPolicyKey);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ServiceBusQueueOutputDataSourceProperties withAuthenticationMode(AuthenticationMode authenticationMode) {
        super.withAuthenticationMode(authenticationMode);
        return this;
    }

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