/** This is an automatically generated code sample. 
To make this code sample work in your Oracle Cloud tenancy, 
please replace the values for any parameters whose current values do not fit
your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and 
boolean, number, and enum parameters with values not fitting your use case).
*/

import com.oracle.bmc.ConfigFileReader;
import com.oracle.bmc.auth.AuthenticationDetailsProvider;
import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
import com.oracle.bmc.distributeddatabase.DistributedDbServiceClient;
import com.oracle.bmc.distributeddatabase.model.*;
import com.oracle.bmc.distributeddatabase.requests.*;
import com.oracle.bmc.distributeddatabase.responses.*;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Date;
import java.util.UUID;
import java.util.Arrays;


public class CreateDistributedDatabaseExample {
    public static void main(String[] args) throws Exception {

        /**
         * Create a default authentication provider that uses the DEFAULT
         * profile in the configuration file.
         * Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file.
         */
        final ConfigFileReader.ConfigFile configFile = ConfigFileReader.parseDefault();
        final AuthenticationDetailsProvider provider = new ConfigFileAuthenticationDetailsProvider(configFile);

        /* Create a service client */
        DistributedDbServiceClient client = DistributedDbServiceClient.builder().build(provider);

        /* Create a request and dependent object(s). */
	CreateDistributedDatabaseDetails createDistributedDatabaseDetails = CreateDistributedDatabaseDetails.builder()
		.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
		.displayName("EXAMPLE-displayName-Value")
		.databaseVersion("EXAMPLE-databaseVersion-Value")
		.prefix("FYg")
		.privateEndpointIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
		.notificationTopicIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
		.characterSet("EXAMPLE-characterSet-Value")
		.ncharacterSet("EXAMPLE-ncharacterSet-Value")
		.listenerPort(4503)
		.listenerPortTls(15344)
		.onsPortLocal(54551)
		.onsPortRemote(20055)
		.scanListenerPort(2884)
		.systemChunkCount(831)
		.systemRaftReplicationUnitCount(404)
		.compositeRaftShardSpaces(new ArrayList<>(Arrays.asList(CreateCompositeRaftShardSpaceDetails.builder()
				.name("EXAMPLE-name-Value")
				.chunkCount(59)
				.replicationUnitCount(139)
				.raftClusters(new ArrayList<>(Arrays.asList(CreateCompositeShardSpaceRaftClusterDetails.builder()
						.name("EXAMPLE-name-Value")
						.replicationFactor(883)
						.witnessCount(919)
						.ruMode(CreateCompositeShardSpaceRaftClusterDetails.RuMode.ReadOnly)
						.databases(new ArrayList<>(Arrays.asList(CreateDistributedDatabaseShardDatabaseWithExadbXdDetails.builder()
								.vmClusterId("ocid1.test.oc1..<unique_ID>EXAMPLE-vmClusterId-Value")
								.adminPassword(char[].builder().build())
								.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
								.adminPasswordSecretVersionNumber(28)
								.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
								.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
								.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
								.protectionMode(DistributedDbProtectionMode.MaximumPerformance)
								.transportType(DistributedDbTransportType.Async)
								.tdeWalletPassword(char[].builder().build())
								.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
								.tdeWalletPasswordSecretVersionNumber(19).build()))).build()))).build())))
		.compositeDataGuardShardSpaces(new ArrayList<>(Arrays.asList(CreateCompositeDataGuardShardSpaceDetails.builder()
				.name("EXAMPLE-name-Value")
				.chunkCount(657)
				.originalReplica(CreateCompositeDataGuardShardSpaceReplicaDetails.builder()
					.name("EXAMPLE-name-Value")
					.databases(new ArrayList<>(Arrays.asList(CreateDistributedDatabaseShardDatabaseWithExadbXsDetails.builder()
							.vmClusterId("ocid1.test.oc1..<unique_ID>EXAMPLE-vmClusterId-Value")
							.adminPassword(char[].builder().build())
							.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
							.adminPasswordSecretVersionNumber(4)
							.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
							.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
							.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
							.protectionMode(DistributedDbProtectionMode.MaximumProtection)
							.transportType(DistributedDbTransportType.Fastsync)
							.tdeWalletPassword(char[].builder().build())
							.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
							.tdeWalletPasswordSecretVersionNumber(34).build()))).build()).build())))
		.systemRaftClusters(new ArrayList<>(Arrays.asList(CreateSystemRaftClusterDetails.builder()
				.name("EXAMPLE-name-Value")
				.replicationFactor(114)
				.witnessCount(831)
				.ruMode(CreateSystemRaftClusterDetails.RuMode.ReadWrite)
				.databases(new ArrayList<>(Arrays.asList(CreateDistributedDatabaseShardWithExadbXsNewClusterDetails.builder()
						.adminPassword(char[].builder().build())
						.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
						.adminPasswordSecretVersionNumber(12)
						.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
						.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
						.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
						.availabilityDomain("EXAMPLE-availabilityDomain-Value")
						.exascaleDbStorageVaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-exascaleDbStorageVaultId-Value")
						.vmClusterDetails(VmClusterDetails.builder()
							.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
							.subnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-subnetId-Value")
							.backupSubnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-backupSubnetId-Value")
							.enabledECpuCount(545)
							.totalECpuCount(331)
							.vmFileSystemStorageSize(96)
							.sshPublicKeys(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.licenseModel(VmClusterDetails.LicenseModel.LicenseIncluded)
							.domain("EXAMPLE-domain-Value")
							.privateZoneId("ocid1.test.oc1..<unique_ID>EXAMPLE-privateZoneId-Value")
							.isDiagnosticsEventsEnabled(false)
							.isHealthMonitoringEnabled(true)
							.isIncidentLogsEnabled(true)
							.nsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.backupNetworkNsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.subscriptionId("ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value").build())
						.protectionMode(DistributedDbProtectionMode.MaximumProtection)
						.transportType(DistributedDbTransportType.Sync)
						.tdeWalletPassword(char[].builder().build())
						.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
						.tdeWalletPasswordSecretVersionNumber(12).build()))).build())))
		.systemDataGuardDatabases(CreateSystemDataGuardDatabaseDetails.builder()
			.originalReplica(CreateSystemDataGuardReplicaDetails.builder()
				.name("EXAMPLE-name-Value")
				.databases(new ArrayList<>(Arrays.asList(CreateDistributedDatabaseShardWithExadbXsNewVaultAndClusterDetails.builder()
						.adminPassword(char[].builder().build())
						.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
						.adminPasswordSecretVersionNumber(34)
						.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
						.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
						.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
						.availabilityDomain("EXAMPLE-availabilityDomain-Value")
						.dbStorageVaultDetails(DbStorageVaultDetails.builder()
							.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
							.highCapacityDatabaseStorage(937)
							.additionalFlashCacheInPercent(123)
							.subscriptionId("ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value")
							.isAutoscaleEnabled(true)
							.autoscaleLimitInGBs(555).build())
						.vmClusterDetails(VmClusterDetails.builder()
							.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
							.subnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-subnetId-Value")
							.backupSubnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-backupSubnetId-Value")
							.enabledECpuCount(205)
							.totalECpuCount(255)
							.vmFileSystemStorageSize(867)
							.sshPublicKeys(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.licenseModel(VmClusterDetails.LicenseModel.BringYourOwnLicense)
							.domain("EXAMPLE-domain-Value")
							.privateZoneId("ocid1.test.oc1..<unique_ID>EXAMPLE-privateZoneId-Value")
							.isDiagnosticsEventsEnabled(true)
							.isHealthMonitoringEnabled(true)
							.isIncidentLogsEnabled(true)
							.nsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.backupNetworkNsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.subscriptionId("ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value").build())
						.protectionMode(DistributedDbProtectionMode.MaximumPerformance)
						.transportType(DistributedDbTransportType.Async)
						.tdeWalletPassword(char[].builder().build())
						.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
						.tdeWalletPasswordSecretVersionNumber(46).build()))).build()).build())
		.userShardSpaces(new ArrayList<>(Arrays.asList(CreateUserShardSpaceDetails.builder()
				.name("EXAMPLE-name-Value")
				.originalReplica(CreateUserShardSpaceReplicaDetails.builder()
					.name("EXAMPLE-name-Value")
					.database(CreateDistributedDatabaseShardDatabaseWithDbHomeDetails.builder()
						.dbHomeId("ocid1.test.oc1..<unique_ID>EXAMPLE-dbHomeId-Value")
						.adminPassword(char[].builder().build())
						.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
						.adminPasswordSecretVersionNumber(47)
						.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
						.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
						.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
						.protectionMode(DistributedDbProtectionMode.MaximumAvailability)
						.transportType(DistributedDbTransportType.Fastsync)
						.tdeWalletPassword(char[].builder().build())
						.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
						.tdeWalletPasswordSecretVersionNumber(8).build()).build()).build())))
		.catalogDetails(new ArrayList<>(Arrays.asList(CreateDistributedDatabaseCatalogDetails.builder()
				.originalReplica(CreateDistributedDatabaseCatalogReplicaDetails.builder()
					.name("EXAMPLE-name-Value")
					.database(CreateDistributedDatabaseCatalogWithExadbXsNewVaultAndClusterDetails.builder()
						.adminPassword(char[].builder().build())
						.adminPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-adminPasswordSecretId-Value")
						.adminPasswordSecretVersionNumber(39)
						.vaultId("ocid1.test.oc1..<unique_ID>EXAMPLE-vaultId-Value")
						.kmsKeyId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value")
						.kmsKeyVersionId("ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyVersionId-Value")
						.availabilityDomain("EXAMPLE-availabilityDomain-Value")
						.dbStorageVaultDetails(DbStorageVaultDetails.builder()
							.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
							.highCapacityDatabaseStorage(773)
							.additionalFlashCacheInPercent(111)
							.subscriptionId("ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value")
							.isAutoscaleEnabled(true)
							.autoscaleLimitInGBs(410).build())
						.vmClusterDetails(VmClusterDetails.builder()
							.compartmentId("ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value")
							.subnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-subnetId-Value")
							.backupSubnetId("ocid1.test.oc1..<unique_ID>EXAMPLE-backupSubnetId-Value")
							.enabledECpuCount(619)
							.totalECpuCount(580)
							.vmFileSystemStorageSize(350)
							.sshPublicKeys(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.licenseModel(VmClusterDetails.LicenseModel.LicenseIncluded)
							.domain("EXAMPLE-domain-Value")
							.privateZoneId("ocid1.test.oc1..<unique_ID>EXAMPLE-privateZoneId-Value")
							.isDiagnosticsEventsEnabled(true)
							.isHealthMonitoringEnabled(false)
							.isIncidentLogsEnabled(false)
							.nsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.backupNetworkNsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value")))
							.subscriptionId("ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value").build())
						.protectionMode(DistributedDbProtectionMode.MaximumPerformance)
						.transportType(DistributedDbTransportType.Fastsync)
						.tdeWalletPassword(char[].builder().build())
						.tdeWalletPasswordSecretId("ocid1.test.oc1..<unique_ID>EXAMPLE-tdeWalletPasswordSecretId-Value")
						.tdeWalletPasswordSecretVersionNumber(37).build()).build()).build())))
		.gsmSshPublicKey("EXAMPLE-gsmSshPublicKey-Value")
		.dbBackupConfig(DistributedDbBackupConfig.builder()
			.isAutoBackupEnabled(false)
			.recoveryWindowInDays(5)
			.autoBackupWindow(DistributedDbBackupConfig.AutoBackupWindow.SlotNine)
			.autoFullBackupWindow(DistributedDbBackupConfig.AutoFullBackupWindow.SlotThree)
			.autoFullBackupDay(DistributedDbBackupConfig.AutoFullBackupDay.Wednesday)
			.canRunImmediateFullBackup(true)
			.isRemoteBackupEnabled(false)
			.remoteRegion("EXAMPLE-remoteRegion-Value")
			.backupDestinationDetails(new ArrayList<>(Arrays.asList(DistributedDbBackupDestination.builder()
					.type(DistributedDbBackupDestination.Type.Nfs)
					.id("ocid1.test.oc1..<unique_ID>EXAMPLE-id-Value")
					.internetProxy("EXAMPLE-internetProxy-Value")
					.dbrsPolicyId("ocid1.test.oc1..<unique_ID>EXAMPLE-dbrsPolicyId-Value")
					.isRemote(false)
					.remoteRegion("EXAMPLE-remoteRegion-Value").build())))
			.backupDeletionPolicy(DistributedDbBackupConfig.BackupDeletionPolicy.DeleteAfterRetentionPeriod).build())
		.vcnNsgIds(new ArrayList<>(Arrays.asList(VcnNsgIdsDetails.builder()
				.vcnId("ocid1.test.oc1..<unique_ID>EXAMPLE-vcnId-Value")
				.nsgIds(new ArrayList<>(Arrays.asList("EXAMPLE--Value"))).build())))
		.freeformTags(new HashMap<java.lang.String, java.lang.String>() {
				{
					put("EXAMPLE_KEY_6DbzL","EXAMPLE_VALUE_huzWJkqfRF1IpKK0bU2U");
				}
 			})
		.definedTags(new HashMap<java.lang.String, java.util.Map<java.lang.String, java.lang.Object>>() {
				{
					put("EXAMPLE_KEY_M9Jct",new HashMap<java.lang.String, java.lang.Object>() {
					{
						put("EXAMPLE_KEY_oKPRG","EXAMPLE--Value");
					}
 				});
				}
 			}).build();

	CreateDistributedDatabaseRequest createDistributedDatabaseRequest = CreateDistributedDatabaseRequest.builder()
		.createDistributedDatabaseDetails(createDistributedDatabaseDetails)
		.opcRetryToken("EXAMPLE-opcRetryToken-Value")
		.opcRequestId("JWSFE9NHNGUO93TGJRZ3<unique_ID>").build();

        /* Send request to the Client */
        CreateDistributedDatabaseResponse response = client.createDistributedDatabase(createDistributedDatabaseRequest);
    }

    
}