// *** 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.sql.outputs;

import com.pulumi.core.annotations.CustomType;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingActiveDirectoryConfig;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingAdvancedMachineFeature;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingBackupConfiguration;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingDataCacheConfig;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingDatabaseFlag;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingInsightsConfig;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingIpConfiguration;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingLocationPreference;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingMaintenanceWindow;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingPasswordValidationPolicy;
import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSettingSqlServerAuditConfig;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@CustomType
public final class GetDatabaseInstancesInstanceSetting {
    private String activationPolicy;
    private List<GetDatabaseInstancesInstanceSettingActiveDirectoryConfig> activeDirectoryConfigs;
    private List<GetDatabaseInstancesInstanceSettingAdvancedMachineFeature> advancedMachineFeatures;
    private String availabilityType;
    private List<GetDatabaseInstancesInstanceSettingBackupConfiguration> backupConfigurations;
    private String collation;
    private String connectorEnforcement;
    private List<GetDatabaseInstancesInstanceSettingDataCacheConfig> dataCacheConfigs;
    private List<GetDatabaseInstancesInstanceSettingDatabaseFlag> databaseFlags;
    private Boolean deletionProtectionEnabled;
    private List<GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod> denyMaintenancePeriods;
    private Boolean diskAutoresize;
    private Integer diskAutoresizeLimit;
    private Integer diskSize;
    private String diskType;
    private String edition;
    private List<GetDatabaseInstancesInstanceSettingInsightsConfig> insightsConfigs;
    private List<GetDatabaseInstancesInstanceSettingIpConfiguration> ipConfigurations;
    private List<GetDatabaseInstancesInstanceSettingLocationPreference> locationPreferences;
    private List<GetDatabaseInstancesInstanceSettingMaintenanceWindow> maintenanceWindows;
    private List<GetDatabaseInstancesInstanceSettingPasswordValidationPolicy> passwordValidationPolicies;
    private String pricingPlan;
    private List<GetDatabaseInstancesInstanceSettingSqlServerAuditConfig> sqlServerAuditConfigs;
    /**
     * @return To filter out the Cloud SQL instances based on the tier(or machine type) of the database instances.
     * 
     */
    private String tier;
    private String timeZone;
    private Map<String,String> userLabels;
    private Integer version;

    private GetDatabaseInstancesInstanceSetting() {}
    public String activationPolicy() {
        return this.activationPolicy;
    }
    public List<GetDatabaseInstancesInstanceSettingActiveDirectoryConfig> activeDirectoryConfigs() {
        return this.activeDirectoryConfigs;
    }
    public List<GetDatabaseInstancesInstanceSettingAdvancedMachineFeature> advancedMachineFeatures() {
        return this.advancedMachineFeatures;
    }
    public String availabilityType() {
        return this.availabilityType;
    }
    public List<GetDatabaseInstancesInstanceSettingBackupConfiguration> backupConfigurations() {
        return this.backupConfigurations;
    }
    public String collation() {
        return this.collation;
    }
    public String connectorEnforcement() {
        return this.connectorEnforcement;
    }
    public List<GetDatabaseInstancesInstanceSettingDataCacheConfig> dataCacheConfigs() {
        return this.dataCacheConfigs;
    }
    public List<GetDatabaseInstancesInstanceSettingDatabaseFlag> databaseFlags() {
        return this.databaseFlags;
    }
    public Boolean deletionProtectionEnabled() {
        return this.deletionProtectionEnabled;
    }
    public List<GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod> denyMaintenancePeriods() {
        return this.denyMaintenancePeriods;
    }
    public Boolean diskAutoresize() {
        return this.diskAutoresize;
    }
    public Integer diskAutoresizeLimit() {
        return this.diskAutoresizeLimit;
    }
    public Integer diskSize() {
        return this.diskSize;
    }
    public String diskType() {
        return this.diskType;
    }
    public String edition() {
        return this.edition;
    }
    public List<GetDatabaseInstancesInstanceSettingInsightsConfig> insightsConfigs() {
        return this.insightsConfigs;
    }
    public List<GetDatabaseInstancesInstanceSettingIpConfiguration> ipConfigurations() {
        return this.ipConfigurations;
    }
    public List<GetDatabaseInstancesInstanceSettingLocationPreference> locationPreferences() {
        return this.locationPreferences;
    }
    public List<GetDatabaseInstancesInstanceSettingMaintenanceWindow> maintenanceWindows() {
        return this.maintenanceWindows;
    }
    public List<GetDatabaseInstancesInstanceSettingPasswordValidationPolicy> passwordValidationPolicies() {
        return this.passwordValidationPolicies;
    }
    public String pricingPlan() {
        return this.pricingPlan;
    }
    public List<GetDatabaseInstancesInstanceSettingSqlServerAuditConfig> sqlServerAuditConfigs() {
        return this.sqlServerAuditConfigs;
    }
    /**
     * @return To filter out the Cloud SQL instances based on the tier(or machine type) of the database instances.
     * 
     */
    public String tier() {
        return this.tier;
    }
    public String timeZone() {
        return this.timeZone;
    }
    public Map<String,String> userLabels() {
        return this.userLabels;
    }
    public Integer version() {
        return this.version;
    }

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

    public static Builder builder(GetDatabaseInstancesInstanceSetting defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String activationPolicy;
        private List<GetDatabaseInstancesInstanceSettingActiveDirectoryConfig> activeDirectoryConfigs;
        private List<GetDatabaseInstancesInstanceSettingAdvancedMachineFeature> advancedMachineFeatures;
        private String availabilityType;
        private List<GetDatabaseInstancesInstanceSettingBackupConfiguration> backupConfigurations;
        private String collation;
        private String connectorEnforcement;
        private List<GetDatabaseInstancesInstanceSettingDataCacheConfig> dataCacheConfigs;
        private List<GetDatabaseInstancesInstanceSettingDatabaseFlag> databaseFlags;
        private Boolean deletionProtectionEnabled;
        private List<GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod> denyMaintenancePeriods;
        private Boolean diskAutoresize;
        private Integer diskAutoresizeLimit;
        private Integer diskSize;
        private String diskType;
        private String edition;
        private List<GetDatabaseInstancesInstanceSettingInsightsConfig> insightsConfigs;
        private List<GetDatabaseInstancesInstanceSettingIpConfiguration> ipConfigurations;
        private List<GetDatabaseInstancesInstanceSettingLocationPreference> locationPreferences;
        private List<GetDatabaseInstancesInstanceSettingMaintenanceWindow> maintenanceWindows;
        private List<GetDatabaseInstancesInstanceSettingPasswordValidationPolicy> passwordValidationPolicies;
        private String pricingPlan;
        private List<GetDatabaseInstancesInstanceSettingSqlServerAuditConfig> sqlServerAuditConfigs;
        private String tier;
        private String timeZone;
        private Map<String,String> userLabels;
        private Integer version;
        public Builder() {}
        public Builder(GetDatabaseInstancesInstanceSetting defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.activationPolicy = defaults.activationPolicy;
    	      this.activeDirectoryConfigs = defaults.activeDirectoryConfigs;
    	      this.advancedMachineFeatures = defaults.advancedMachineFeatures;
    	      this.availabilityType = defaults.availabilityType;
    	      this.backupConfigurations = defaults.backupConfigurations;
    	      this.collation = defaults.collation;
    	      this.connectorEnforcement = defaults.connectorEnforcement;
    	      this.dataCacheConfigs = defaults.dataCacheConfigs;
    	      this.databaseFlags = defaults.databaseFlags;
    	      this.deletionProtectionEnabled = defaults.deletionProtectionEnabled;
    	      this.denyMaintenancePeriods = defaults.denyMaintenancePeriods;
    	      this.diskAutoresize = defaults.diskAutoresize;
    	      this.diskAutoresizeLimit = defaults.diskAutoresizeLimit;
    	      this.diskSize = defaults.diskSize;
    	      this.diskType = defaults.diskType;
    	      this.edition = defaults.edition;
    	      this.insightsConfigs = defaults.insightsConfigs;
    	      this.ipConfigurations = defaults.ipConfigurations;
    	      this.locationPreferences = defaults.locationPreferences;
    	      this.maintenanceWindows = defaults.maintenanceWindows;
    	      this.passwordValidationPolicies = defaults.passwordValidationPolicies;
    	      this.pricingPlan = defaults.pricingPlan;
    	      this.sqlServerAuditConfigs = defaults.sqlServerAuditConfigs;
    	      this.tier = defaults.tier;
    	      this.timeZone = defaults.timeZone;
    	      this.userLabels = defaults.userLabels;
    	      this.version = defaults.version;
        }

        @CustomType.Setter
        public Builder activationPolicy(String activationPolicy) {
            this.activationPolicy = Objects.requireNonNull(activationPolicy);
            return this;
        }
        @CustomType.Setter
        public Builder activeDirectoryConfigs(List<GetDatabaseInstancesInstanceSettingActiveDirectoryConfig> activeDirectoryConfigs) {
            this.activeDirectoryConfigs = Objects.requireNonNull(activeDirectoryConfigs);
            return this;
        }
        public Builder activeDirectoryConfigs(GetDatabaseInstancesInstanceSettingActiveDirectoryConfig... activeDirectoryConfigs) {
            return activeDirectoryConfigs(List.of(activeDirectoryConfigs));
        }
        @CustomType.Setter
        public Builder advancedMachineFeatures(List<GetDatabaseInstancesInstanceSettingAdvancedMachineFeature> advancedMachineFeatures) {
            this.advancedMachineFeatures = Objects.requireNonNull(advancedMachineFeatures);
            return this;
        }
        public Builder advancedMachineFeatures(GetDatabaseInstancesInstanceSettingAdvancedMachineFeature... advancedMachineFeatures) {
            return advancedMachineFeatures(List.of(advancedMachineFeatures));
        }
        @CustomType.Setter
        public Builder availabilityType(String availabilityType) {
            this.availabilityType = Objects.requireNonNull(availabilityType);
            return this;
        }
        @CustomType.Setter
        public Builder backupConfigurations(List<GetDatabaseInstancesInstanceSettingBackupConfiguration> backupConfigurations) {
            this.backupConfigurations = Objects.requireNonNull(backupConfigurations);
            return this;
        }
        public Builder backupConfigurations(GetDatabaseInstancesInstanceSettingBackupConfiguration... backupConfigurations) {
            return backupConfigurations(List.of(backupConfigurations));
        }
        @CustomType.Setter
        public Builder collation(String collation) {
            this.collation = Objects.requireNonNull(collation);
            return this;
        }
        @CustomType.Setter
        public Builder connectorEnforcement(String connectorEnforcement) {
            this.connectorEnforcement = Objects.requireNonNull(connectorEnforcement);
            return this;
        }
        @CustomType.Setter
        public Builder dataCacheConfigs(List<GetDatabaseInstancesInstanceSettingDataCacheConfig> dataCacheConfigs) {
            this.dataCacheConfigs = Objects.requireNonNull(dataCacheConfigs);
            return this;
        }
        public Builder dataCacheConfigs(GetDatabaseInstancesInstanceSettingDataCacheConfig... dataCacheConfigs) {
            return dataCacheConfigs(List.of(dataCacheConfigs));
        }
        @CustomType.Setter
        public Builder databaseFlags(List<GetDatabaseInstancesInstanceSettingDatabaseFlag> databaseFlags) {
            this.databaseFlags = Objects.requireNonNull(databaseFlags);
            return this;
        }
        public Builder databaseFlags(GetDatabaseInstancesInstanceSettingDatabaseFlag... databaseFlags) {
            return databaseFlags(List.of(databaseFlags));
        }
        @CustomType.Setter
        public Builder deletionProtectionEnabled(Boolean deletionProtectionEnabled) {
            this.deletionProtectionEnabled = Objects.requireNonNull(deletionProtectionEnabled);
            return this;
        }
        @CustomType.Setter
        public Builder denyMaintenancePeriods(List<GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod> denyMaintenancePeriods) {
            this.denyMaintenancePeriods = Objects.requireNonNull(denyMaintenancePeriods);
            return this;
        }
        public Builder denyMaintenancePeriods(GetDatabaseInstancesInstanceSettingDenyMaintenancePeriod... denyMaintenancePeriods) {
            return denyMaintenancePeriods(List.of(denyMaintenancePeriods));
        }
        @CustomType.Setter
        public Builder diskAutoresize(Boolean diskAutoresize) {
            this.diskAutoresize = Objects.requireNonNull(diskAutoresize);
            return this;
        }
        @CustomType.Setter
        public Builder diskAutoresizeLimit(Integer diskAutoresizeLimit) {
            this.diskAutoresizeLimit = Objects.requireNonNull(diskAutoresizeLimit);
            return this;
        }
        @CustomType.Setter
        public Builder diskSize(Integer diskSize) {
            this.diskSize = Objects.requireNonNull(diskSize);
            return this;
        }
        @CustomType.Setter
        public Builder diskType(String diskType) {
            this.diskType = Objects.requireNonNull(diskType);
            return this;
        }
        @CustomType.Setter
        public Builder edition(String edition) {
            this.edition = Objects.requireNonNull(edition);
            return this;
        }
        @CustomType.Setter
        public Builder insightsConfigs(List<GetDatabaseInstancesInstanceSettingInsightsConfig> insightsConfigs) {
            this.insightsConfigs = Objects.requireNonNull(insightsConfigs);
            return this;
        }
        public Builder insightsConfigs(GetDatabaseInstancesInstanceSettingInsightsConfig... insightsConfigs) {
            return insightsConfigs(List.of(insightsConfigs));
        }
        @CustomType.Setter
        public Builder ipConfigurations(List<GetDatabaseInstancesInstanceSettingIpConfiguration> ipConfigurations) {
            this.ipConfigurations = Objects.requireNonNull(ipConfigurations);
            return this;
        }
        public Builder ipConfigurations(GetDatabaseInstancesInstanceSettingIpConfiguration... ipConfigurations) {
            return ipConfigurations(List.of(ipConfigurations));
        }
        @CustomType.Setter
        public Builder locationPreferences(List<GetDatabaseInstancesInstanceSettingLocationPreference> locationPreferences) {
            this.locationPreferences = Objects.requireNonNull(locationPreferences);
            return this;
        }
        public Builder locationPreferences(GetDatabaseInstancesInstanceSettingLocationPreference... locationPreferences) {
            return locationPreferences(List.of(locationPreferences));
        }
        @CustomType.Setter
        public Builder maintenanceWindows(List<GetDatabaseInstancesInstanceSettingMaintenanceWindow> maintenanceWindows) {
            this.maintenanceWindows = Objects.requireNonNull(maintenanceWindows);
            return this;
        }
        public Builder maintenanceWindows(GetDatabaseInstancesInstanceSettingMaintenanceWindow... maintenanceWindows) {
            return maintenanceWindows(List.of(maintenanceWindows));
        }
        @CustomType.Setter
        public Builder passwordValidationPolicies(List<GetDatabaseInstancesInstanceSettingPasswordValidationPolicy> passwordValidationPolicies) {
            this.passwordValidationPolicies = Objects.requireNonNull(passwordValidationPolicies);
            return this;
        }
        public Builder passwordValidationPolicies(GetDatabaseInstancesInstanceSettingPasswordValidationPolicy... passwordValidationPolicies) {
            return passwordValidationPolicies(List.of(passwordValidationPolicies));
        }
        @CustomType.Setter
        public Builder pricingPlan(String pricingPlan) {
            this.pricingPlan = Objects.requireNonNull(pricingPlan);
            return this;
        }
        @CustomType.Setter
        public Builder sqlServerAuditConfigs(List<GetDatabaseInstancesInstanceSettingSqlServerAuditConfig> sqlServerAuditConfigs) {
            this.sqlServerAuditConfigs = Objects.requireNonNull(sqlServerAuditConfigs);
            return this;
        }
        public Builder sqlServerAuditConfigs(GetDatabaseInstancesInstanceSettingSqlServerAuditConfig... sqlServerAuditConfigs) {
            return sqlServerAuditConfigs(List.of(sqlServerAuditConfigs));
        }
        @CustomType.Setter
        public Builder tier(String tier) {
            this.tier = Objects.requireNonNull(tier);
            return this;
        }
        @CustomType.Setter
        public Builder timeZone(String timeZone) {
            this.timeZone = Objects.requireNonNull(timeZone);
            return this;
        }
        @CustomType.Setter
        public Builder userLabels(Map<String,String> userLabels) {
            this.userLabels = Objects.requireNonNull(userLabels);
            return this;
        }
        @CustomType.Setter
        public Builder version(Integer version) {
            this.version = Objects.requireNonNull(version);
            return this;
        }
        public GetDatabaseInstancesInstanceSetting build() {
            final var o = new GetDatabaseInstancesInstanceSetting();
            o.activationPolicy = activationPolicy;
            o.activeDirectoryConfigs = activeDirectoryConfigs;
            o.advancedMachineFeatures = advancedMachineFeatures;
            o.availabilityType = availabilityType;
            o.backupConfigurations = backupConfigurations;
            o.collation = collation;
            o.connectorEnforcement = connectorEnforcement;
            o.dataCacheConfigs = dataCacheConfigs;
            o.databaseFlags = databaseFlags;
            o.deletionProtectionEnabled = deletionProtectionEnabled;
            o.denyMaintenancePeriods = denyMaintenancePeriods;
            o.diskAutoresize = diskAutoresize;
            o.diskAutoresizeLimit = diskAutoresizeLimit;
            o.diskSize = diskSize;
            o.diskType = diskType;
            o.edition = edition;
            o.insightsConfigs = insightsConfigs;
            o.ipConfigurations = ipConfigurations;
            o.locationPreferences = locationPreferences;
            o.maintenanceWindows = maintenanceWindows;
            o.passwordValidationPolicies = passwordValidationPolicies;
            o.pricingPlan = pricingPlan;
            o.sqlServerAuditConfigs = sqlServerAuditConfigs;
            o.tier = tier;
            o.timeZone = timeZone;
            o.userLabels = userLabels;
            o.version = version;
            return o;
        }
    }
}
