// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.bigqueryanalyticshub;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.bigqueryanalyticshub.inputs.ListingBigqueryDatasetArgs;
import com.pulumi.gcp.bigqueryanalyticshub.inputs.ListingDataProviderArgs;
import com.pulumi.gcp.bigqueryanalyticshub.inputs.ListingPublisherArgs;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ListingArgs extends com.pulumi.resources.ResourceArgs {

    public static final ListingArgs Empty = new ListingArgs();

    /**
     * Shared dataset i.e. BigQuery dataset source.
     * Structure is documented below.
     * 
     */
    @Import(name="bigqueryDataset", required=true)
    private Output<ListingBigqueryDatasetArgs> bigqueryDataset;

    /**
     * @return Shared dataset i.e. BigQuery dataset source.
     * Structure is documented below.
     * 
     */
    public Output<ListingBigqueryDatasetArgs> bigqueryDataset() {
        return this.bigqueryDataset;
    }

    /**
     * Categories of the listing. Up to two categories are allowed.
     * 
     */
    @Import(name="categories")
    private @Nullable Output<List<String>> categories;

    /**
     * @return Categories of the listing. Up to two categories are allowed.
     * 
     */
    public Optional<Output<List<String>>> categories() {
        return Optional.ofNullable(this.categories);
    }

    /**
     * The ID of the data exchange. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
     * 
     */
    @Import(name="dataExchangeId", required=true)
    private Output<String> dataExchangeId;

    /**
     * @return The ID of the data exchange. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
     * 
     */
    public Output<String> dataExchangeId() {
        return this.dataExchangeId;
    }

    /**
     * Details of the data provider who owns the source data.
     * Structure is documented below.
     * 
     */
    @Import(name="dataProvider")
    private @Nullable Output<ListingDataProviderArgs> dataProvider;

    /**
     * @return Details of the data provider who owns the source data.
     * Structure is documented below.
     * 
     */
    public Optional<Output<ListingDataProviderArgs>> dataProvider() {
        return Optional.ofNullable(this.dataProvider);
    }

    /**
     * Short description of the listing. The description must not contain Unicode non-characters and C0 and C1 control codes except tabs (HT), new lines (LF), carriage returns (CR), and page breaks (FF).
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return Short description of the listing. The description must not contain Unicode non-characters and C0 and C1 control codes except tabs (HT), new lines (LF), carriage returns (CR), and page breaks (FF).
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Human-readable display name of the listing. The display name must contain only Unicode letters, numbers (0-9), underscores (_), dashes (-), spaces ( ), ampersands (&amp;) and can&#39;t start or end with spaces.
     * 
     */
    @Import(name="displayName", required=true)
    private Output<String> displayName;

    /**
     * @return Human-readable display name of the listing. The display name must contain only Unicode letters, numbers (0-9), underscores (_), dashes (-), spaces ( ), ampersands (&amp;) and can&#39;t start or end with spaces.
     * 
     */
    public Output<String> displayName() {
        return this.displayName;
    }

    /**
     * Documentation describing the listing.
     * 
     */
    @Import(name="documentation")
    private @Nullable Output<String> documentation;

    /**
     * @return Documentation describing the listing.
     * 
     */
    public Optional<Output<String>> documentation() {
        return Optional.ofNullable(this.documentation);
    }

    /**
     * Base64 encoded image representing the listing.
     * 
     */
    @Import(name="icon")
    private @Nullable Output<String> icon;

    /**
     * @return Base64 encoded image representing the listing.
     * 
     */
    public Optional<Output<String>> icon() {
        return Optional.ofNullable(this.icon);
    }

    /**
     * The ID of the listing. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
     * 
     */
    @Import(name="listingId", required=true)
    private Output<String> listingId;

    /**
     * @return The ID of the listing. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
     * 
     */
    public Output<String> listingId() {
        return this.listingId;
    }

    /**
     * The name of the location this data exchange listing.
     * 
     */
    @Import(name="location", required=true)
    private Output<String> location;

    /**
     * @return The name of the location this data exchange listing.
     * 
     */
    public Output<String> location() {
        return this.location;
    }

    /**
     * Email or URL of the primary point of contact of the listing.
     * 
     * (Optional)
     * Email or URL of the data provider.
     * 
     * (Optional)
     * Email or URL of the listing publisher.
     * 
     */
    @Import(name="primaryContact")
    private @Nullable Output<String> primaryContact;

    /**
     * @return Email or URL of the primary point of contact of the listing.
     * 
     * (Optional)
     * Email or URL of the data provider.
     * 
     * (Optional)
     * Email or URL of the listing publisher.
     * 
     */
    public Optional<Output<String>> primaryContact() {
        return Optional.ofNullable(this.primaryContact);
    }

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * Details of the publisher who owns the listing and who can share the source data.
     * Structure is documented below.
     * 
     */
    @Import(name="publisher")
    private @Nullable Output<ListingPublisherArgs> publisher;

    /**
     * @return Details of the publisher who owns the listing and who can share the source data.
     * Structure is documented below.
     * 
     */
    public Optional<Output<ListingPublisherArgs>> publisher() {
        return Optional.ofNullable(this.publisher);
    }

    /**
     * Email or URL of the request access of the listing. Subscribers can use this reference to request access.
     * 
     */
    @Import(name="requestAccess")
    private @Nullable Output<String> requestAccess;

    /**
     * @return Email or URL of the request access of the listing. Subscribers can use this reference to request access.
     * 
     */
    public Optional<Output<String>> requestAccess() {
        return Optional.ofNullable(this.requestAccess);
    }

    private ListingArgs() {}

    private ListingArgs(ListingArgs $) {
        this.bigqueryDataset = $.bigqueryDataset;
        this.categories = $.categories;
        this.dataExchangeId = $.dataExchangeId;
        this.dataProvider = $.dataProvider;
        this.description = $.description;
        this.displayName = $.displayName;
        this.documentation = $.documentation;
        this.icon = $.icon;
        this.listingId = $.listingId;
        this.location = $.location;
        this.primaryContact = $.primaryContact;
        this.project = $.project;
        this.publisher = $.publisher;
        this.requestAccess = $.requestAccess;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ListingArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ListingArgs $;

        public Builder() {
            $ = new ListingArgs();
        }

        public Builder(ListingArgs defaults) {
            $ = new ListingArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param bigqueryDataset Shared dataset i.e. BigQuery dataset source.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder bigqueryDataset(Output<ListingBigqueryDatasetArgs> bigqueryDataset) {
            $.bigqueryDataset = bigqueryDataset;
            return this;
        }

        /**
         * @param bigqueryDataset Shared dataset i.e. BigQuery dataset source.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder bigqueryDataset(ListingBigqueryDatasetArgs bigqueryDataset) {
            return bigqueryDataset(Output.of(bigqueryDataset));
        }

        /**
         * @param categories Categories of the listing. Up to two categories are allowed.
         * 
         * @return builder
         * 
         */
        public Builder categories(@Nullable Output<List<String>> categories) {
            $.categories = categories;
            return this;
        }

        /**
         * @param categories Categories of the listing. Up to two categories are allowed.
         * 
         * @return builder
         * 
         */
        public Builder categories(List<String> categories) {
            return categories(Output.of(categories));
        }

        /**
         * @param categories Categories of the listing. Up to two categories are allowed.
         * 
         * @return builder
         * 
         */
        public Builder categories(String... categories) {
            return categories(List.of(categories));
        }

        /**
         * @param dataExchangeId The ID of the data exchange. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
         * 
         * @return builder
         * 
         */
        public Builder dataExchangeId(Output<String> dataExchangeId) {
            $.dataExchangeId = dataExchangeId;
            return this;
        }

        /**
         * @param dataExchangeId The ID of the data exchange. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
         * 
         * @return builder
         * 
         */
        public Builder dataExchangeId(String dataExchangeId) {
            return dataExchangeId(Output.of(dataExchangeId));
        }

        /**
         * @param dataProvider Details of the data provider who owns the source data.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder dataProvider(@Nullable Output<ListingDataProviderArgs> dataProvider) {
            $.dataProvider = dataProvider;
            return this;
        }

        /**
         * @param dataProvider Details of the data provider who owns the source data.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder dataProvider(ListingDataProviderArgs dataProvider) {
            return dataProvider(Output.of(dataProvider));
        }

        /**
         * @param description Short description of the listing. The description must not contain Unicode non-characters and C0 and C1 control codes except tabs (HT), new lines (LF), carriage returns (CR), and page breaks (FF).
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description Short description of the listing. The description must not contain Unicode non-characters and C0 and C1 control codes except tabs (HT), new lines (LF), carriage returns (CR), and page breaks (FF).
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param displayName Human-readable display name of the listing. The display name must contain only Unicode letters, numbers (0-9), underscores (_), dashes (-), spaces ( ), ampersands (&amp;) and can&#39;t start or end with spaces.
         * 
         * @return builder
         * 
         */
        public Builder displayName(Output<String> displayName) {
            $.displayName = displayName;
            return this;
        }

        /**
         * @param displayName Human-readable display name of the listing. The display name must contain only Unicode letters, numbers (0-9), underscores (_), dashes (-), spaces ( ), ampersands (&amp;) and can&#39;t start or end with spaces.
         * 
         * @return builder
         * 
         */
        public Builder displayName(String displayName) {
            return displayName(Output.of(displayName));
        }

        /**
         * @param documentation Documentation describing the listing.
         * 
         * @return builder
         * 
         */
        public Builder documentation(@Nullable Output<String> documentation) {
            $.documentation = documentation;
            return this;
        }

        /**
         * @param documentation Documentation describing the listing.
         * 
         * @return builder
         * 
         */
        public Builder documentation(String documentation) {
            return documentation(Output.of(documentation));
        }

        /**
         * @param icon Base64 encoded image representing the listing.
         * 
         * @return builder
         * 
         */
        public Builder icon(@Nullable Output<String> icon) {
            $.icon = icon;
            return this;
        }

        /**
         * @param icon Base64 encoded image representing the listing.
         * 
         * @return builder
         * 
         */
        public Builder icon(String icon) {
            return icon(Output.of(icon));
        }

        /**
         * @param listingId The ID of the listing. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
         * 
         * @return builder
         * 
         */
        public Builder listingId(Output<String> listingId) {
            $.listingId = listingId;
            return this;
        }

        /**
         * @param listingId The ID of the listing. Must contain only Unicode letters, numbers (0-9), underscores (_). Should not use characters that require URL-escaping, or characters outside of ASCII, spaces.
         * 
         * @return builder
         * 
         */
        public Builder listingId(String listingId) {
            return listingId(Output.of(listingId));
        }

        /**
         * @param location The name of the location this data exchange listing.
         * 
         * @return builder
         * 
         */
        public Builder location(Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location The name of the location this data exchange listing.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param primaryContact Email or URL of the primary point of contact of the listing.
         * 
         * (Optional)
         * Email or URL of the data provider.
         * 
         * (Optional)
         * Email or URL of the listing publisher.
         * 
         * @return builder
         * 
         */
        public Builder primaryContact(@Nullable Output<String> primaryContact) {
            $.primaryContact = primaryContact;
            return this;
        }

        /**
         * @param primaryContact Email or URL of the primary point of contact of the listing.
         * 
         * (Optional)
         * Email or URL of the data provider.
         * 
         * (Optional)
         * Email or URL of the listing publisher.
         * 
         * @return builder
         * 
         */
        public Builder primaryContact(String primaryContact) {
            return primaryContact(Output.of(primaryContact));
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param publisher Details of the publisher who owns the listing and who can share the source data.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder publisher(@Nullable Output<ListingPublisherArgs> publisher) {
            $.publisher = publisher;
            return this;
        }

        /**
         * @param publisher Details of the publisher who owns the listing and who can share the source data.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder publisher(ListingPublisherArgs publisher) {
            return publisher(Output.of(publisher));
        }

        /**
         * @param requestAccess Email or URL of the request access of the listing. Subscribers can use this reference to request access.
         * 
         * @return builder
         * 
         */
        public Builder requestAccess(@Nullable Output<String> requestAccess) {
            $.requestAccess = requestAccess;
            return this;
        }

        /**
         * @param requestAccess Email or URL of the request access of the listing. Subscribers can use this reference to request access.
         * 
         * @return builder
         * 
         */
        public Builder requestAccess(String requestAccess) {
            return requestAccess(Output.of(requestAccess));
        }

        public ListingArgs build() {
            $.bigqueryDataset = Objects.requireNonNull($.bigqueryDataset, "expected parameter 'bigqueryDataset' to be non-null");
            $.dataExchangeId = Objects.requireNonNull($.dataExchangeId, "expected parameter 'dataExchangeId' to be non-null");
            $.displayName = Objects.requireNonNull($.displayName, "expected parameter 'displayName' to be non-null");
            $.listingId = Objects.requireNonNull($.listingId, "expected parameter 'listingId' to be non-null");
            $.location = Objects.requireNonNull($.location, "expected parameter 'location' to be non-null");
            return $;
        }
    }

}
