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

import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsCanvasAppSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsJupyterServerAppSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsKernelGatewayAppSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsRSessionAppSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsRStudioServerProAppSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsSharingSettings;
import com.pulumi.aws.sagemaker.outputs.DomainDefaultUserSettingsTensorBoardAppSettings;
import com.pulumi.core.annotations.CustomType;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class DomainDefaultUserSettings {
    /**
     * @return The Canvas app settings. See Canvas App Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsCanvasAppSettings canvasAppSettings;
    /**
     * @return The execution role ARN for the user.
     * 
     */
    private String executionRole;
    /**
     * @return The Jupyter server&#39;s app settings. See Jupyter Server App Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsJupyterServerAppSettings jupyterServerAppSettings;
    /**
     * @return The kernel gateway app settings. See Kernel Gateway App Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsKernelGatewayAppSettings kernelGatewayAppSettings;
    /**
     * @return The RSession app settings. See RSession App Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsRSessionAppSettings rSessionAppSettings;
    /**
     * @return A collection of settings that configure user interaction with the RStudioServerPro app. See RStudioServerProAppSettings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsRStudioServerProAppSettings rStudioServerProAppSettings;
    /**
     * @return A list of security group IDs that will be attached to the user.
     * 
     */
    private @Nullable List<String> securityGroups;
    /**
     * @return The sharing settings. See Sharing Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsSharingSettings sharingSettings;
    /**
     * @return The TensorBoard app settings. See TensorBoard App Settings below.
     * 
     */
    private @Nullable DomainDefaultUserSettingsTensorBoardAppSettings tensorBoardAppSettings;

    private DomainDefaultUserSettings() {}
    /**
     * @return The Canvas app settings. See Canvas App Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsCanvasAppSettings> canvasAppSettings() {
        return Optional.ofNullable(this.canvasAppSettings);
    }
    /**
     * @return The execution role ARN for the user.
     * 
     */
    public String executionRole() {
        return this.executionRole;
    }
    /**
     * @return The Jupyter server&#39;s app settings. See Jupyter Server App Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsJupyterServerAppSettings> jupyterServerAppSettings() {
        return Optional.ofNullable(this.jupyterServerAppSettings);
    }
    /**
     * @return The kernel gateway app settings. See Kernel Gateway App Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsKernelGatewayAppSettings> kernelGatewayAppSettings() {
        return Optional.ofNullable(this.kernelGatewayAppSettings);
    }
    /**
     * @return The RSession app settings. See RSession App Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsRSessionAppSettings> rSessionAppSettings() {
        return Optional.ofNullable(this.rSessionAppSettings);
    }
    /**
     * @return A collection of settings that configure user interaction with the RStudioServerPro app. See RStudioServerProAppSettings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsRStudioServerProAppSettings> rStudioServerProAppSettings() {
        return Optional.ofNullable(this.rStudioServerProAppSettings);
    }
    /**
     * @return A list of security group IDs that will be attached to the user.
     * 
     */
    public List<String> securityGroups() {
        return this.securityGroups == null ? List.of() : this.securityGroups;
    }
    /**
     * @return The sharing settings. See Sharing Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsSharingSettings> sharingSettings() {
        return Optional.ofNullable(this.sharingSettings);
    }
    /**
     * @return The TensorBoard app settings. See TensorBoard App Settings below.
     * 
     */
    public Optional<DomainDefaultUserSettingsTensorBoardAppSettings> tensorBoardAppSettings() {
        return Optional.ofNullable(this.tensorBoardAppSettings);
    }

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

    public static Builder builder(DomainDefaultUserSettings defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable DomainDefaultUserSettingsCanvasAppSettings canvasAppSettings;
        private String executionRole;
        private @Nullable DomainDefaultUserSettingsJupyterServerAppSettings jupyterServerAppSettings;
        private @Nullable DomainDefaultUserSettingsKernelGatewayAppSettings kernelGatewayAppSettings;
        private @Nullable DomainDefaultUserSettingsRSessionAppSettings rSessionAppSettings;
        private @Nullable DomainDefaultUserSettingsRStudioServerProAppSettings rStudioServerProAppSettings;
        private @Nullable List<String> securityGroups;
        private @Nullable DomainDefaultUserSettingsSharingSettings sharingSettings;
        private @Nullable DomainDefaultUserSettingsTensorBoardAppSettings tensorBoardAppSettings;
        public Builder() {}
        public Builder(DomainDefaultUserSettings defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.canvasAppSettings = defaults.canvasAppSettings;
    	      this.executionRole = defaults.executionRole;
    	      this.jupyterServerAppSettings = defaults.jupyterServerAppSettings;
    	      this.kernelGatewayAppSettings = defaults.kernelGatewayAppSettings;
    	      this.rSessionAppSettings = defaults.rSessionAppSettings;
    	      this.rStudioServerProAppSettings = defaults.rStudioServerProAppSettings;
    	      this.securityGroups = defaults.securityGroups;
    	      this.sharingSettings = defaults.sharingSettings;
    	      this.tensorBoardAppSettings = defaults.tensorBoardAppSettings;
        }

        @CustomType.Setter
        public Builder canvasAppSettings(@Nullable DomainDefaultUserSettingsCanvasAppSettings canvasAppSettings) {
            this.canvasAppSettings = canvasAppSettings;
            return this;
        }
        @CustomType.Setter
        public Builder executionRole(String executionRole) {
            this.executionRole = Objects.requireNonNull(executionRole);
            return this;
        }
        @CustomType.Setter
        public Builder jupyterServerAppSettings(@Nullable DomainDefaultUserSettingsJupyterServerAppSettings jupyterServerAppSettings) {
            this.jupyterServerAppSettings = jupyterServerAppSettings;
            return this;
        }
        @CustomType.Setter
        public Builder kernelGatewayAppSettings(@Nullable DomainDefaultUserSettingsKernelGatewayAppSettings kernelGatewayAppSettings) {
            this.kernelGatewayAppSettings = kernelGatewayAppSettings;
            return this;
        }
        @CustomType.Setter
        public Builder rSessionAppSettings(@Nullable DomainDefaultUserSettingsRSessionAppSettings rSessionAppSettings) {
            this.rSessionAppSettings = rSessionAppSettings;
            return this;
        }
        @CustomType.Setter
        public Builder rStudioServerProAppSettings(@Nullable DomainDefaultUserSettingsRStudioServerProAppSettings rStudioServerProAppSettings) {
            this.rStudioServerProAppSettings = rStudioServerProAppSettings;
            return this;
        }
        @CustomType.Setter
        public Builder securityGroups(@Nullable List<String> securityGroups) {
            this.securityGroups = securityGroups;
            return this;
        }
        public Builder securityGroups(String... securityGroups) {
            return securityGroups(List.of(securityGroups));
        }
        @CustomType.Setter
        public Builder sharingSettings(@Nullable DomainDefaultUserSettingsSharingSettings sharingSettings) {
            this.sharingSettings = sharingSettings;
            return this;
        }
        @CustomType.Setter
        public Builder tensorBoardAppSettings(@Nullable DomainDefaultUserSettingsTensorBoardAppSettings tensorBoardAppSettings) {
            this.tensorBoardAppSettings = tensorBoardAppSettings;
            return this;
        }
        public DomainDefaultUserSettings build() {
            final var o = new DomainDefaultUserSettings();
            o.canvasAppSettings = canvasAppSettings;
            o.executionRole = executionRole;
            o.jupyterServerAppSettings = jupyterServerAppSettings;
            o.kernelGatewayAppSettings = kernelGatewayAppSettings;
            o.rSessionAppSettings = rSessionAppSettings;
            o.rStudioServerProAppSettings = rStudioServerProAppSettings;
            o.securityGroups = securityGroups;
            o.sharingSettings = sharingSettings;
            o.tensorBoardAppSettings = tensorBoardAppSettings;
            return o;
        }
    }
}
