From 8051c1e8c4397a3e5970bf4c2ec7634f54852268 Mon Sep 17 00:00:00 2001 From: Anudeep Sharma Date: Wed, 9 Nov 2016 10:33:35 -0800 Subject: [PATCH] Added more apis in SQL SDK --- .../management/sql/DatabaseEditions.java | 2 +- .../management/sql/ElasticPoolActivity.java | 107 +++++++++++ .../sql/ElasticPoolDatabaseActivity.java | 103 +++++++++++ .../sql/RecommendedElasticPool.java | 117 ++++++++++++ .../sql/RecommendedElasticPoolMetric.java | 37 ++++ .../management/sql/ServiceObjective.java | 59 ++++++ .../management/sql/ServiceTierAdvisor.java | 148 +++++++++++++++ .../azure/management/sql/SqlDatabase.java | 46 ++++- .../azure/management/sql/SqlElasticPool.java | 29 ++- .../azure/management/sql/SqlServer.java | 38 +++- .../sql/TransparentDataEncryption.java | 41 +++++ .../TransparentDataEncryptionActivity.java | 47 +++++ .../sql/implementation/DatabasesInner.java | 2 +- .../ElasticPoolActivityImpl.java | 123 +++++++++++++ .../ElasticPoolDatabaseActivityImpl.java | 118 ++++++++++++ .../sql/implementation/ElasticPoolsImpl.java | 9 +- .../RecommendedElasticPoolImpl.java | 174 ++++++++++++++++++ .../RecommendedElasticPoolMetricImpl.java | 40 ++++ .../RecommendedElasticPoolsImpl.java | 58 ++++++ .../implementation/ServiceObjectiveImpl.java | 81 ++++++++ .../ServiceTierAdvisorImpl.java | 160 ++++++++++++++++ .../ServiceTierAdvisorInner.java | 4 +- .../sql/implementation/SqlDatabaseImpl.java | 35 +++- .../implementation/SqlElasticPoolImpl.java | 72 +++++++- .../implementation/SqlElasticPoolsImpl.java | 13 +- .../sql/implementation/SqlServerImpl.java | 36 +++- .../sql/implementation/SqlServerManager.java | 1 + .../sql/implementation/SqlServersImpl.java | 18 +- ...TransparentDataEncryptionActivityImpl.java | 64 +++++++ .../TransparentDataEncryptionImpl.java | 58 ++++++ .../TransparentDataEncryptionsImpl.java | 72 ++++++++ .../sql/SqlServerOperationsTests.java | 82 ++++++++- .../management/sql/SqlServerTestBase.java | 2 +- 33 files changed, 1967 insertions(+), 29 deletions(-) create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolActivity.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolDatabaseActivity.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPool.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPoolMetric.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceObjective.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceTierAdvisor.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryption.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryptionActivity.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolActivityImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolDatabaseActivityImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolMetricImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolsImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceObjectiveImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionActivityImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionImpl.java create mode 100644 azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionsImpl.java diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/DatabaseEditions.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/DatabaseEditions.java index 28ed3d41d51c..a36b14233886 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/DatabaseEditions.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/DatabaseEditions.java @@ -13,7 +13,7 @@ /** * Defines values for DatabaseEditions. */ -public class DatabaseEditions { +public final class DatabaseEditions { /** Static value Web for DatabaseEditions. */ public static final DatabaseEditions WEB = new DatabaseEditions("Web"); diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolActivity.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolActivity.java new file mode 100644 index 000000000000..f41ab99fd329 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolActivity.java @@ -0,0 +1,107 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.ElasticPoolActivityInner; +import org.joda.time.DateTime; + + +/** + * An immutable client-side representation of an Azure SQL ElasticPool's Activity. + */ +@Fluent +public interface ElasticPoolActivity extends + Wrapper, + HasResourceGroup, + HasName, + HasId { + /** + * @return the time the operation finished (ISO8601 format) + */ + DateTime endTime(); + + /** + * @return the error code if available + */ + int errorCode(); + + /** + * @return the error message if available + */ + String errorMessage(); + + /** + * @return the error severity if available + */ + int errorSeverity(); + + /** + * @return the operation name + */ + String operation(); + + /** + * @return the unique operation ID + */ + String operationId(); + + /** + * @return the percentage complete if available + */ + int percentComplete(); + + /** + * @return the requested max DTU per database if available + */ + int requestedDatabaseDtuMax(); + + /** + * @return the requested min DTU per database if available + */ + int requestedDatabaseDtuMin(); + + /** + * @return the requested DTU for the pool if available + */ + int requestedDtu(); + + /** + * @return the requested name for the Elastic Pool if available + */ + String requestedElasticPoolName(); + + /** + * @return the requested storage limit for the pool in GB if available + */ + long requestedStorageLimitInGB(); + + /** + * @return the name of the Elastic Pool + */ + String elasticPoolName(); + + /** + * @return the name of the Azure SQL Server the Elastic Pool is in + */ + String serverName(); + + /** + * @return the time the operation started (ISO8601 format) + */ + DateTime startTime(); + + /** + * @return the current state of the operation + */ + String state(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolDatabaseActivity.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolDatabaseActivity.java new file mode 100644 index 000000000000..4534f0c0d22f --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ElasticPoolDatabaseActivity.java @@ -0,0 +1,103 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.ElasticPoolDatabaseActivityInner; +import org.joda.time.DateTime; + + +/** + * An immutable client-side representation of an Azure SQL ElasticPool's Database Activity. + */ +@Fluent +public interface ElasticPoolDatabaseActivity extends + Wrapper, + HasResourceGroup, + HasName, + HasId { + /** + * @return the database name + */ + String databaseName(); + + /** + * @return the time the operation finished (ISO8601 format) + */ + DateTime endTime(); + + /** + * @return the error code if available + */ + int errorCode(); + + /** + * @return the error message if available + */ + String errorMessage(); + + /** + * @return the error severity if available + */ + int errorSeverity(); + + /** + * @return the operation name + */ + String operation(); + + /** + * @return the unique operation ID + */ + String operationId(); + + /** + * @return the percentage complete if available + */ + int percentComplete(); + + /** + * @return the name for the Elastic Pool the database is moving into if available + */ + String requestedElasticPoolName(); + + /** + * @return the name of the current Elastic Pool the database is in if available + */ + String currentElasticPoolName(); + + /** + * @return the name of the current service objective if available + */ + String currentServiceObjective(); + + /** + * @return the name of the requested service objective if available + */ + String requestedServiceObjective(); + + /** + * @return the name of the Azure SQL Server the Elastic Pool is in + */ + String serverName(); + + /** + * @return the time the operation started (ISO8601 format) + */ + DateTime startTime(); + + /** + * @return the current state of the operation + */ + String state(); + +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPool.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPool.java new file mode 100644 index 000000000000..06b61b7e7d8b --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPool.java @@ -0,0 +1,117 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Refreshable; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.RecommendedElasticPoolInner; +import com.microsoft.azure.management.sql.implementation.RecommendedElasticPoolMetricInner; +import org.joda.time.DateTime; + +import java.util.List; + +/** + * An immutable client-side representation of an Azure SQL Recommended ElasticPool. + */ +@Fluent +public interface RecommendedElasticPool extends + Refreshable, + Wrapper, + HasResourceGroup, + HasName, + HasId { + + /** + * @return name of the SQL Server to which this database belongs + */ + String sqlServerName(); + + /** + * @return the edition of the Azure SQL Recommended Elastic Pool. The + * ElasticPoolEditions enumeration contains all the valid editions. + * Possible values include: 'Basic', 'Standard', 'Premium'. + */ + ElasticPoolEditions databaseEdition(); + + /** + * @return the DTU for the SQL Azure Recommended Elastic Pool. + */ + double dtu(); + + /** + * @return the minimum DTU for the database. + */ + double databaseDtuMin(); + + /** + * @return the maximum DTU for the database. + */ + double databaseDtuMax(); + + /** + * @return storage size in megabytes. + */ + double storageMB(); + + /** + * @return the observation period start (ISO8601 format). + */ + DateTime observationPeriodStart(); + + /** + * @return the observation period start (ISO8601 format). + */ + DateTime observationPeriodEnd(); + + /** + * @return maximum observed DTU. + */ + double maxObservedDtu(); + + /** + * @return maximum observed storage in megabytes. + */ + double maxObservedStorageMB(); + + /** + * @return the list of Azure SQL Databases in this pool. Expanded property. + */ + List databases(); + + // TODO - ans - Will implement this once knowing what to do with expanded properties + /** + * @return the list of Azure SQL Databases housed in the server. Expanded property. + */ + List metrics(); + + /** + * Fetches list of databases by making call to Azure. + * @return list of the databases in recommended elastic pool + */ + PagedList listDatabases(); + + /** + * Get a specific database in the recommended database. + * + * @param databaseName name of the database to be fetched + * @return information on the database recommended in recommended elastic pool + */ + SqlDatabase getDatabase(String databaseName); + + + /** + * Fetches list of metrics information by making call to Azure. + * @return list of the databases in recommended elastic pool + */ + PagedList listMetrics(); + +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPoolMetric.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPoolMetric.java new file mode 100644 index 000000000000..a557eab79738 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/RecommendedElasticPoolMetric.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.RecommendedElasticPoolMetricInner; +import org.joda.time.DateTime; + + +/** + * An immutable client-side representation of an Azure SQL Replication link. + */ +@Fluent +public interface RecommendedElasticPoolMetric extends + Wrapper { + /** + * @return the time of metric (ISO8601 format). + */ + DateTime dateTimeProperty(); + + /** + * @return the DTUs (Database Transaction Units) + * See https://azure.microsoft.com/en-us/documentation/articles/sql-database-what-is-a-dtu/ + */ + double dtu(); + + /** + * @return the size in gigabytes. + */ + double sizeGB(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceObjective.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceObjective.java new file mode 100644 index 000000000000..f67aba507904 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceObjective.java @@ -0,0 +1,59 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Refreshable; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.ServiceObjectiveInner; + + +/** + * An immutable client-side representation of an Azure SQL Service Objective. + */ +@Fluent +public interface ServiceObjective extends + Wrapper, + Refreshable, + HasResourceGroup, + HasName, + HasId { + /** + * @return name of the SQL Server to which this replication belongs + */ + String sqlServerName(); + + /** + * @return the name for the service objective. + */ + String serviceObjectiveName(); + + /** + * @return whether the service level objective is the default service + * objective. + */ + boolean isDefault(); + + /** + * @return whether the service level objective is a system service objective. + */ + boolean isSystem(); + + /** + * @return the description for the service level objective. + */ + String description(); + + /** + * @return whether the service level objective is enabled. + */ + boolean enabled(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceTierAdvisor.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceTierAdvisor.java new file mode 100644 index 000000000000..58c7168252b7 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/ServiceTierAdvisor.java @@ -0,0 +1,148 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Refreshable; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.ServiceTierAdvisorInner; +import com.microsoft.azure.management.sql.implementation.SloUsageMetricInner; +import org.joda.time.DateTime; + +import java.util.List; +import java.util.UUID; + + +/** + * An immutable client-side representation of an Azure SQL Replication link. + */ +@Fluent +public interface ServiceTierAdvisor extends + Refreshable, + Wrapper, + HasResourceGroup, + HasName, + HasId { + + /** + * @return name of the SQL Server to which this replication belongs + */ + String sqlServerName(); + + /** + * @return name of the SQL Database to which this replication belongs + */ + String databaseName(); + + /** + * @return the observation period start (ISO8601 format). + */ + DateTime observationPeriodStart(); + + /** + * @return the observation period start (ISO8601 format). + */ + DateTime observationPeriodEnd(); + + /** + * @return the activeTimeRatio for service tier advisor. + */ + double activeTimeRatio(); + + /** + * @return or sets minDtu for service tier advisor. + */ + double minDtu(); + + /** + * @return or sets avgDtu for service tier advisor. + */ + double avgDtu(); + + /** + * @return or sets maxDtu for service tier advisor. + */ + double maxDtu(); + + /** + * @return or sets maxSizeInGB for service tier advisor. + */ + double maxSizeInGB(); + + /** + * @return or sets serviceLevelObjectiveUsageMetrics for the service tier + * advisor. + */ + List serviceLevelObjectiveUsageMetrics(); + + /** + * @return or sets currentServiceLevelObjective for service tier advisor. + */ + String currentServiceLevelObjective(); + + /** + * @return or sets currentServiceLevelObjectiveId for service tier advisor. + */ + UUID currentServiceLevelObjectiveId(); + + /** + * @return or sets usageBasedRecommendationServiceLevelObjective for service + * tier advisor. + */ + String usageBasedRecommendationServiceLevelObjective(); + + /** + * @return or sets usageBasedRecommendationServiceLevelObjectiveId for + * service tier advisor. + */ + UUID usageBasedRecommendationServiceLevelObjectiveId(); + + /** + * @return or sets databaseSizeBasedRecommendationServiceLevelObjective for + * service tier advisor. + */ + String databaseSizeBasedRecommendationServiceLevelObjective(); + + /** + * @return or sets databaseSizeBasedRecommendationServiceLevelObjectiveId for + * service tier advisor. + */ + UUID databaseSizeBasedRecommendationServiceLevelObjectiveId(); + + /** + * @return or sets disasterPlanBasedRecommendationServiceLevelObjective for + * service tier advisor. + */ + String disasterPlanBasedRecommendationServiceLevelObjective(); + + /** + * @return or sets disasterPlanBasedRecommendationServiceLevelObjectiveId for + * service tier advisor. + */ + UUID disasterPlanBasedRecommendationServiceLevelObjectiveId(); + + /** + * @return or sets overallRecommendationServiceLevelObjective for service + * tier advisor. + */ + String overallRecommendationServiceLevelObjective(); + + /** + * @return or sets overallRecommendationServiceLevelObjectiveId for service + * tier advisor. + */ + UUID overallRecommendationServiceLevelObjectiveId(); + + /** + * @return or sets confidence for service tier advisor. + */ + double confidence(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlDatabase.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlDatabase.java index c8830afd1042..c113c0d20e77 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlDatabase.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlDatabase.java @@ -165,6 +165,48 @@ public interface SqlDatabase extends */ PagedList listUsages(); + /** + * @return entry point to manage and get transparentDataEncryption + */ + TransparentDataEncryptions transparentDataEncryptions(); + + /** + * @return the list of all service tier advisor in the database + */ + PagedList listServiceTierAdvisor(); + + /** + * Get information about a service tier advisor. + * @param serviceTierAdvisorName name of the service tier advisor + * @return information about specific service tier advisor + */ + ServiceTierAdvisor getServiceTierAdvisor(String serviceTierAdvisorName); + + /** + * Entry point to access TransparentDataEncryption from SQL Database. + */ + interface TransparentDataEncryptions { + /** + * Gets an Azure SQL Database Transparent Data Encryption for the database. + * + * @return an Azure SQL Database Transparent Data Encryption for the database. + */ + TransparentDataEncryption get(); + + /** + * Updates the state of the transparent data encryption status. + * + * @param transparentDataEncryptionState state of the data encryption to set + * @return the new encryption settings after update + */ + TransparentDataEncryption update(TransparentDataEncryptionStates transparentDataEncryptionState); + + /** + * @return an Azure SQL Database Transparent Data Encryption Activity + */ + PagedList listActivity(); + } + /** * Entry point to access replication links from SQL Database. */ @@ -173,7 +215,7 @@ interface ReplicationLinks { * Gets a particular replication link. * * @param linkId name of the replication to get - * @return Returns the replication link id with in the SQL Database + * @return Returns the replication link with in the SQL Database */ ReplicationLink get(String linkId); @@ -194,7 +236,7 @@ interface ReplicationLinks { /************************************************************** - * Fluent interfaces to provision a SqlServer + * Fluent interfaces to provision a Sql Database **************************************************************/ /** diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlElasticPool.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlElasticPool.java index 742d0ced1a01..bce939ef2bf6 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlElasticPool.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlElasticPool.java @@ -6,6 +6,7 @@ package com.microsoft.azure.management.sql; +import com.microsoft.azure.PagedList; import com.microsoft.azure.management.apigeneration.Fluent; import com.microsoft.azure.management.resources.fluentcore.arm.models.IndependentChildResource; import com.microsoft.azure.management.resources.fluentcore.model.Appliable; @@ -51,7 +52,6 @@ public interface SqlElasticPool extends */ int dtu(); - /** * @return the maximum DTU any one SQL Azure database can consume. */ @@ -67,6 +67,33 @@ public interface SqlElasticPool extends */ int storageMB(); + /** + * @return the information about elastic pool activities + */ + PagedList listActivity(); + + /** + * @return the information about elastic pool database activities + */ + PagedList listDatabaseActivity(); + + /** + * @return the information about databases in elastic pool + */ + PagedList listDatabases(); + + /** + * Gets the specific database in the elastic pool. + * + * @param databaseName name of the database to look into + * @return the information about specific database in elastic pool + */ + SqlDatabase getDatabase(String databaseName); + + /************************************************************** + * Fluent interfaces to provision a Sql Elastic pool + **************************************************************/ + /** * Container interface for all the definitions that need to be implemented. */ diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlServer.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlServer.java index 1325b6162a13..4de00816becf 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlServer.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/SqlServer.java @@ -69,12 +69,28 @@ public interface SqlServer extends */ ServerUpgradeResult getUpgrade(); - /** * @return returns the list of usages (ServerMetric) of Azure SQL Server */ PagedList listUsages(); + /** + * @return the list of information on all service objectives + */ + PagedList listServiceObjectives(); + + /** + * Gets the information on a particular Sql Server Service Objective. + * @param serviceObjectiveName name of the service objective to be fetched + * @return information of the service objective + */ + ServiceObjective getServiceObjective(String serviceObjectiveName); + + /** + * @return the entry point to RecommendedElasticPools. + */ + RecommendedElasticPools recommendedElasticPools(); + /** * Entry point to access FirewallRules from the SQL Server. */ @@ -110,6 +126,26 @@ interface FirewallRules { void delete(String firewallRuleName); } + /** + * Entry point to access RecommendedElasticPool from the SQL Server. + */ + interface RecommendedElasticPools { + /** + * Gets a particular recommended elastic pool. + * + * @param recommendedElasticPoolName name of the elastic pool to get + * @return Returns the elastic pool with in the SQL Server + */ + RecommendedElasticPool get(String recommendedElasticPoolName); + + /** + * Returns all the recommended elastic pools for the server. + * + * @return list of recommended elastic pools for the server. + */ + PagedList list(); + } + /** * Entry point to access ElasticPools from the SQL Server. */ diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryption.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryption.java new file mode 100644 index 000000000000..72c4bfe0945c --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryption.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.TransparentDataEncryptionInner; + + +/** + * An immutable client-side representation of an Azure SQL database's TransparentDataEncryption. + */ +@Fluent +public interface TransparentDataEncryption extends + Wrapper, + HasResourceGroup, + HasName, + HasId { + /** + * @return name of the SQL Server to which this replication belongs + */ + String sqlServerName(); + + /** + * @return name of the SQL Database to which this replication belongs + */ + String databaseName(); + + /** + * @return the status of the Azure SQL Database Transparent Data Encryption + */ + TransparentDataEncryptionStates status(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryptionActivity.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryptionActivity.java new file mode 100644 index 000000000000..f13665fde1d3 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/TransparentDataEncryptionActivity.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql; + +import com.microsoft.azure.management.apigeneration.Fluent; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasId; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasName; +import com.microsoft.azure.management.resources.fluentcore.arm.models.HasResourceGroup; +import com.microsoft.azure.management.resources.fluentcore.model.Wrapper; +import com.microsoft.azure.management.sql.implementation.TransparentDataEncryptionActivityInner; + + +/** + * An immutable client-side representation of an Azure SQL database's TransparentDataEncryptionActivity. + */ +@Fluent +public interface TransparentDataEncryptionActivity extends + Wrapper, + HasResourceGroup, + HasName, + HasId { + /** + * @return name of the SQL Server to which this replication belongs + */ + String sqlServerName(); + + /** + * @return name of the SQL Database to which this replication belongs + */ + String databaseName(); + + /** + * @return the status transparent data encryption of the Azure SQL Database + */ + TransparentDataEncryptionActivityStates status(); + + /** + * @return the percent complete of the transparent data encryption scan for a + * Azure SQL Database. + */ + Double percentComplete(); +} + diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/DatabasesInner.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/DatabasesInner.java index 633af5a124de..28057c9482f1 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/DatabasesInner.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/DatabasesInner.java @@ -103,7 +103,7 @@ interface DatabasesService { Observable> beginResumeDataWarehouse(@Path("subscriptionId") String subscriptionId, @Path("resourceGroupName") String resourceGroupName, @Path("serverName") String serverName, @Path("databaseName") String databaseName, @Query("api-version") String apiVersion, @Header("accept-language") String acceptLanguage, @Header("User-Agent") String userAgent); @Headers("Content-Type: application/json; charset=utf-8") - @GET("subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/listRestorePoints") + @GET("subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/restorePoints") Observable> listRestorePoints(@Path("subscriptionId") String subscriptionId, @Path("resourceGroupName") String resourceGroupName, @Path("serverName") String serverName, @Path("databaseName") String databaseName, @Query("api-version") String apiVersion, @Header("accept-language") String acceptLanguage, @Header("User-Agent") String userAgent); @Headers("Content-Type: application/json; charset=utf-8") diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolActivityImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolActivityImpl.java new file mode 100644 index 000000000000..6baa8f4ca819 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolActivityImpl.java @@ -0,0 +1,123 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.ElasticPoolActivity; +import org.joda.time.DateTime; + +/** + * Implementation for Elastic Pool Activity interface. + */ +@LangDefinition +class ElasticPoolActivityImpl + extends WrapperImpl + implements ElasticPoolActivity { + private final ResourceId resourceId; + + protected ElasticPoolActivityImpl(ElasticPoolActivityInner innerObject) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + } + + @Override + public String name() { + return this.resourceId.name(); + } + + @Override + public String id() { + return this.resourceId.id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public DateTime endTime() { + return this.inner().endTime(); + } + + @Override + public int errorCode() { + return this.inner().errorCode(); + } + + @Override + public String errorMessage() { + return this.inner().errorMessage(); + } + + @Override + public int errorSeverity() { + return this.inner().errorSeverity(); + } + + @Override + public String operation() { + return this.inner().operation(); + } + + @Override + public String operationId() { + return this.inner().operationId(); + } + + @Override + public int percentComplete() { + return this.inner().percentComplete(); + } + + @Override + public int requestedDatabaseDtuMax() { + return this.inner().requestedDatabaseDtuMax(); + } + + @Override + public int requestedDatabaseDtuMin() { + return this.inner().requestedDatabaseDtuMin(); + } + + @Override + public int requestedDtu() { + return this.inner().requestedDtu(); + } + + @Override + public String requestedElasticPoolName() { + return this.inner().requestedElasticPoolName(); + } + + @Override + public long requestedStorageLimitInGB() { + return this.inner().requestedStorageLimitInGB(); + } + + @Override + public String elasticPoolName() { + return this.inner().elasticPoolName(); + } + + @Override + public String serverName() { + return this.inner().serverName(); + } + + @Override + public DateTime startTime() { + return this.inner().startTime(); + } + + @Override + public String state() { + return this.inner().state(); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolDatabaseActivityImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolDatabaseActivityImpl.java new file mode 100644 index 000000000000..bd7b444305bb --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolDatabaseActivityImpl.java @@ -0,0 +1,118 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.ElasticPoolDatabaseActivity; +import org.joda.time.DateTime; + +/** + * Implementation for Elastic Pool DatabaseActivity interface. + */ +@LangDefinition +class ElasticPoolDatabaseActivityImpl + extends WrapperImpl + implements ElasticPoolDatabaseActivity { + private final ResourceId resourceId; + + protected ElasticPoolDatabaseActivityImpl(ElasticPoolDatabaseActivityInner innerObject) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + } + + @Override + public String name() { + return this.inner().name(); + } + + @Override + public String id() { + return this.inner().id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public String databaseName() { + return this.inner().databaseName(); + } + + @Override + public DateTime endTime() { + return this.inner().endTime(); + } + + @Override + public int errorCode() { + return this.inner().errorCode(); + } + + @Override + public String errorMessage() { + return this.inner().errorMessage(); + } + + @Override + public int errorSeverity() { + return this.inner().errorSeverity(); + } + + @Override + public String operation() { + return this.inner().operation(); + } + + @Override + public String operationId() { + return this.inner().operationId(); + } + + @Override + public int percentComplete() { + return this.inner().percentComplete(); + } + + @Override + public String requestedElasticPoolName() { + return this.inner().requestedElasticPoolName(); + } + + @Override + public String currentElasticPoolName() { + return this.inner().currentElasticPoolName(); + } + + @Override + public String currentServiceObjective() { + return this.inner().currentServiceObjective(); + } + + @Override + public String requestedServiceObjective() { + return this.inner().requestedServiceObjective(); + } + + @Override + public String serverName() { + return this.inner().serverName(); + } + + @Override + public DateTime startTime() { + return this.inner().startTime(); + } + + @Override + public String state() { + return this.inner().state(); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolsImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolsImpl.java index 194640a4dcd0..fcdb83de07e8 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolsImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ElasticPoolsImpl.java @@ -22,11 +22,16 @@ public class ElasticPoolsImpl implements SqlServer.ElasticPools { private final SqlElasticPools.SqlElasticPoolsCreatable elasticPools; private final Region region; - ElasticPoolsImpl(ElasticPoolsInner innerCollection, SqlServerManager manager, String resourceGroupName, String sqlServerName, Region region) { + ElasticPoolsImpl(ElasticPoolsInner innerCollection, + SqlServerManager manager, + DatabasesInner databasesInner, + String resourceGroupName, + String sqlServerName, + Region region) { this.resourceGroupName = resourceGroupName; this.sqlServerName = sqlServerName; this.region = region; - this.elasticPools = new SqlElasticPoolsImpl(innerCollection, manager); + this.elasticPools = new SqlElasticPoolsImpl(innerCollection, manager, databasesInner); } @Override diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolImpl.java new file mode 100644 index 000000000000..96d95436e866 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolImpl.java @@ -0,0 +1,174 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.fluentcore.utils.Utils; +import com.microsoft.azure.management.sql.ElasticPoolEditions; +import com.microsoft.azure.management.sql.RecommendedElasticPool; +import com.microsoft.azure.management.sql.RecommendedElasticPoolMetric; +import com.microsoft.azure.management.sql.SqlDatabase; +import org.joda.time.DateTime; + +import java.util.ArrayList; +import java.util.List; + +/** + * Implementation for RecommendedElasticPool and its parent interfaces. + */ +class RecommendedElasticPoolImpl + extends WrapperImpl + implements RecommendedElasticPool { + + private final DatabasesInner databasesInner; + private final RecommendedElasticPoolsInner recommendedElasticPoolsInner; + private final ResourceId resourceId; + + protected RecommendedElasticPoolImpl( + RecommendedElasticPoolInner innerObject, + DatabasesInner databasesInner, + RecommendedElasticPoolsInner recommendedElasticPoolsInner) { + super(innerObject); + this.databasesInner = databasesInner; + this.recommendedElasticPoolsInner = recommendedElasticPoolsInner; + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + } + + @Override + public RecommendedElasticPool refresh() { + this.setInner(this.recommendedElasticPoolsInner.get(this.resourceGroupName(), this.sqlServerName(), this.name())); + return this; + } + + @Override + public String sqlServerName() { + return this.resourceId.parent().name(); + } + + @Override + public ElasticPoolEditions databaseEdition() { + return this.inner().databaseEdition(); + } + + @Override + public double dtu() { + return this.inner().dtu(); + } + + @Override + public double databaseDtuMin() { + return this.inner().databaseDtuMin(); + } + + @Override + public double databaseDtuMax() { + return this.inner().databaseDtuMax(); + } + + @Override + public double storageMB() { + return this.inner().storageMB(); + } + + @Override + public DateTime observationPeriodStart() { + return this.inner().observationPeriodStart(); + } + + @Override + public DateTime observationPeriodEnd() { + return this.inner().observationPeriodEnd(); + } + + @Override + public double maxObservedDtu() { + return this.inner().maxObservedDtu(); + } + + @Override + public double maxObservedStorageMB() { + return this.inner().maxObservedStorageMB(); + } + + @Override + public List databases() { + ArrayList databases = new ArrayList(); + + for (DatabaseInner databaseInner : this.inner().databases()) { + databases.add(new SqlDatabaseImpl(databaseInner.name(), databaseInner, this.databasesInner)); + } + + return databases; + } + + @Override + public List metrics() { + return null; + } + + @Override + public PagedList listDatabases() { + final RecommendedElasticPoolImpl self = this; + PagedListConverter converter = new PagedListConverter() { + @Override + public SqlDatabase typeConvert(DatabaseInner databaseInner) { + + return new SqlDatabaseImpl(databaseInner.name(), databaseInner, self.databasesInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.recommendedElasticPoolsInner.listDatabases( + this.resourceGroupName(), + this.sqlServerName(), + this.name()))); + } + + @Override + public SqlDatabase getDatabase(String databaseName) { + DatabaseInner databaseInner = this.recommendedElasticPoolsInner.getDatabases( + this.resourceGroupName(), + this.sqlServerName(), + this.name(), + databaseName); + + return new SqlDatabaseImpl(databaseInner.name(), databaseInner, this.databasesInner); + } + + @Override + public PagedList listMetrics() { + PagedListConverter converter = new PagedListConverter() { + @Override + public RecommendedElasticPoolMetric typeConvert(RecommendedElasticPoolMetricInner databaseInner) { + + return new RecommendedElasticPoolMetricImpl(databaseInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.recommendedElasticPoolsInner.listMetrics( + this.resourceGroupName(), + this.sqlServerName(), + this.name()))); + } + + @Override + public String name() { + return this.inner().name(); + } + + @Override + public String id() { + return this.inner().id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } +} \ No newline at end of file diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolMetricImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolMetricImpl.java new file mode 100644 index 000000000000..571f3c657a4a --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolMetricImpl.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.RecommendedElasticPoolMetric; +import org.joda.time.DateTime; + +/** + * Implementation for RecommendedElasticPoolMetric interface. + */ +@LangDefinition +class RecommendedElasticPoolMetricImpl + extends WrapperImpl + implements RecommendedElasticPoolMetric { + + protected RecommendedElasticPoolMetricImpl(RecommendedElasticPoolMetricInner innerObject) { + super(innerObject); + } + + @Override + public DateTime dateTimeProperty() { + return this.inner().dateTimeProperty(); + } + + @Override + public double dtu() { + return this.inner().dtu(); + } + + @Override + public double sizeGB() { + return this.inner().sizeGB(); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolsImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolsImpl.java new file mode 100644 index 000000000000..967bdd02a8f3 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/RecommendedElasticPoolsImpl.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.fluentcore.utils.Utils; +import com.microsoft.azure.management.sql.RecommendedElasticPool; +import com.microsoft.azure.management.sql.SqlServer; + +/** + * Implementation of SqlServer.RecommendedElasticPools, which enables the creating the recommended elastic pools from the SQLServer directly. + */ +public class RecommendedElasticPoolsImpl implements SqlServer.RecommendedElasticPools { + + private final String resourceGroupName; + private final String sqlServerName; + private final RecommendedElasticPoolsInner recommendedElasticPoolsInner; + private DatabasesInner databasesInner; + + RecommendedElasticPoolsImpl(RecommendedElasticPoolsInner recommendedElasticPoolsInner, + DatabasesInner databasesInner, + String resourceGroupName, + String sqlServerName) { + this.resourceGroupName = resourceGroupName; + this.sqlServerName = sqlServerName; + this.recommendedElasticPoolsInner = recommendedElasticPoolsInner; + this.databasesInner = databasesInner; + } + + @Override + public RecommendedElasticPool get(String recommendedElasticPoolName) { + return new RecommendedElasticPoolImpl( + this.recommendedElasticPoolsInner.get(this.resourceGroupName, this.sqlServerName, recommendedElasticPoolName), + this.databasesInner, + this.recommendedElasticPoolsInner); + } + + @Override + public PagedList list() { + final RecommendedElasticPoolsImpl self = this; + + PagedListConverter converter = new PagedListConverter() { + @Override + public RecommendedElasticPool typeConvert(RecommendedElasticPoolInner recommendedElasticPoolInner) { + return new RecommendedElasticPoolImpl(recommendedElasticPoolInner, self.databasesInner, self.recommendedElasticPoolsInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.recommendedElasticPoolsInner.list( + this.resourceGroupName, + this.sqlServerName))); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceObjectiveImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceObjectiveImpl.java new file mode 100644 index 000000000000..845dcf71782b --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceObjectiveImpl.java @@ -0,0 +1,81 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.ServiceObjective; + +/** + * Implementation for Azure SQL Server's Service Objective. + */ +@LangDefinition +class ServiceObjectiveImpl + extends WrapperImpl + implements ServiceObjective { + private final ResourceId resourceId; + private final ServersInner serversInner; + + protected ServiceObjectiveImpl(ServiceObjectiveInner innerObject, ServersInner serversInner) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + this.serversInner = serversInner; + } + + + @Override + public String name() { + return this.inner().name(); + } + + @Override + public String id() { + return this.inner().id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public String sqlServerName() { + return this.resourceId.parent().name(); + } + + @Override + public String serviceObjectiveName() { + return this.inner().serviceObjectiveName(); + } + + @Override + public boolean isDefault() { + return this.inner().isDefault(); + } + + @Override + public boolean isSystem() { + return this.inner().isSystem(); + } + + @Override + public String description() { + return this.inner().description(); + } + + @Override + public boolean enabled() { + return this.inner().enabled(); + } + + @Override + public ServiceObjective refresh() { + this.setInner(this.serversInner.getServiceObjective(this.resourceGroupName(), this.sqlServerName(), this.name())); + return this; + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorImpl.java new file mode 100644 index 000000000000..06949a426920 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorImpl.java @@ -0,0 +1,160 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.ServiceTierAdvisor; +import org.joda.time.DateTime; + +import java.util.List; +import java.util.UUID; + +/** + * Implementation for Azure SQL Database's service tier advisor. + */ +@LangDefinition +class ServiceTierAdvisorImpl + extends WrapperImpl + implements ServiceTierAdvisor { + private final ResourceId resourceId; + private final DatabasesInner databasesInner; + + protected ServiceTierAdvisorImpl(ServiceTierAdvisorInner innerObject, DatabasesInner databasesInner) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + this.databasesInner = databasesInner; + } + + + @Override + public String name() { + return this.inner().name(); + } + + @Override + public String id() { + return this.inner().id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public String sqlServerName() { + return this.resourceId.parent().parent().name(); + } + + @Override + public String databaseName() { + return this.resourceId.parent().name(); + } + + @Override + public DateTime observationPeriodStart() { + return this.inner().observationPeriodStart(); + } + + @Override + public DateTime observationPeriodEnd() { + return this.inner().observationPeriodEnd(); + } + + @Override + public double activeTimeRatio() { + return this.inner().activeTimeRatio(); + } + + @Override + public double minDtu() { + return this.inner().minDtu(); + } + + @Override + public double avgDtu() { + return this.inner().avgDtu(); + } + + @Override + public double maxDtu() { + return this.inner().maxDtu(); + } + + @Override + public double maxSizeInGB() { + return this.inner().maxSizeInGB(); + } + + @Override + public List serviceLevelObjectiveUsageMetrics() { + return this.inner().serviceLevelObjectiveUsageMetrics(); + } + + @Override + public String currentServiceLevelObjective() { + return this.inner().currentServiceLevelObjective(); + } + + @Override + public UUID currentServiceLevelObjectiveId() { + return this.inner().currentServiceLevelObjectiveId(); + } + + @Override + public String usageBasedRecommendationServiceLevelObjective() { + return this.inner().usageBasedRecommendationServiceLevelObjective(); + } + + @Override + public UUID usageBasedRecommendationServiceLevelObjectiveId() { + return this.inner().currentServiceLevelObjectiveId(); + } + + @Override + public String databaseSizeBasedRecommendationServiceLevelObjective() { + return this.inner().databaseSizeBasedRecommendationServiceLevelObjective(); + } + + @Override + public UUID databaseSizeBasedRecommendationServiceLevelObjectiveId() { + return this.inner().databaseSizeBasedRecommendationServiceLevelObjectiveId(); + } + + @Override + public String disasterPlanBasedRecommendationServiceLevelObjective() { + return this.inner().disasterPlanBasedRecommendationServiceLevelObjective(); + } + + @Override + public UUID disasterPlanBasedRecommendationServiceLevelObjectiveId() { + return this.inner().disasterPlanBasedRecommendationServiceLevelObjectiveId(); + } + + @Override + public String overallRecommendationServiceLevelObjective() { + return this.inner().overallRecommendationServiceLevelObjective(); + } + + @Override + public UUID overallRecommendationServiceLevelObjectiveId() { + return this.inner().overallRecommendationServiceLevelObjectiveId(); + } + + @Override + public double confidence() { + return this.inner().confidence(); + } + + @Override + public ServiceTierAdvisor refresh() { + this.setInner(this.databasesInner.getServiceTierAdvisor(this.resourceGroupName(), this.sqlServerName(), this.databaseName(), this.name())); + return this; + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorInner.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorInner.java index 9363ca6e61c8..ab66429841d3 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorInner.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/ServiceTierAdvisorInner.java @@ -73,7 +73,7 @@ public class ServiceTierAdvisorInner extends SqlSubResource { * Gets or sets currentServiceLevelObjective for service tier advisor. */ @JsonProperty(value = "properties.currentServiceLevelObjective", access = JsonProperty.Access.WRITE_ONLY) - private UUID currentServiceLevelObjective; + private String currentServiceLevelObjective; /** * Gets or sets currentServiceLevelObjectiveId for service tier advisor. @@ -220,7 +220,7 @@ public List serviceLevelObjectiveUsageMetrics() { * * @return the currentServiceLevelObjective value */ - public UUID currentServiceLevelObjective() { + public String currentServiceLevelObjective() { return this.currentServiceLevelObjective; } diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlDatabaseImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlDatabaseImpl.java index 95384bd9842f..a41a61efb49e 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlDatabaseImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlDatabaseImpl.java @@ -17,6 +17,7 @@ import com.microsoft.azure.management.sql.DatabaseMetric; import com.microsoft.azure.management.sql.RestorePoint; import com.microsoft.azure.management.sql.ServiceObjectiveName; +import com.microsoft.azure.management.sql.ServiceTierAdvisor; import com.microsoft.azure.management.sql.SqlDatabase; import com.microsoft.azure.management.sql.SqlElasticPool; import com.microsoft.azure.management.sql.SqlServer; @@ -182,7 +183,6 @@ public PagedList listUsages() { PagedListConverter converter = new PagedListConverter() { @Override public DatabaseMetric typeConvert(DatabaseMetricInner databaseMetricInner) { - return new DatabaseMetricImpl(databaseMetricInner); } }; @@ -193,6 +193,39 @@ public DatabaseMetric typeConvert(DatabaseMetricInner databaseMetricInner) { this.name()))); } + @Override + public TransparentDataEncryptions transparentDataEncryptions() { + return new TransparentDataEncryptionsImpl(this.resourceGroupName(), this.sqlServerName(), this.name(), this.innerCollection); + } + + @Override + public PagedList listServiceTierAdvisor() { + final SqlDatabaseImpl self = this; + PagedListConverter converter + = new PagedListConverter() { + @Override + public ServiceTierAdvisor typeConvert(ServiceTierAdvisorInner serviceTierAdvisorInner) { + return new ServiceTierAdvisorImpl(serviceTierAdvisorInner, self.innerCollection); + } + }; + return converter.convert(Utils.convertToPagedList( + this.innerCollection.listServiceTierAdvisors( + this.resourceGroupName(), + this.sqlServerName(), + this.name()))); + } + + @Override + public ServiceTierAdvisor getServiceTierAdvisor(String serviceTierAdvisorName) { + return new ServiceTierAdvisorImpl( + this.innerCollection.getServiceTierAdvisor( + this.resourceGroupName(), + this.sqlServerName(), + this.name(), + serviceTierAdvisorName), + this.innerCollection); + } + @Override public SqlDatabase refresh() { this.innerCollection.get(this.resourceGroupName(), this.sqlServerName(), this.name()); diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolImpl.java index 0f269937a4b9..25fe2a86ecec 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolImpl.java @@ -6,10 +6,16 @@ package com.microsoft.azure.management.sql.implementation; +import com.microsoft.azure.PagedList; import com.microsoft.azure.management.resources.fluentcore.arm.models.IndependentChild; import com.microsoft.azure.management.resources.fluentcore.arm.models.implementation.IndependentChildResourceImpl; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.fluentcore.utils.Utils; +import com.microsoft.azure.management.sql.ElasticPoolActivity; +import com.microsoft.azure.management.sql.ElasticPoolDatabaseActivity; import com.microsoft.azure.management.sql.ElasticPoolEditions; import com.microsoft.azure.management.sql.ElasticPoolState; +import com.microsoft.azure.management.sql.SqlDatabase; import com.microsoft.azure.management.sql.SqlElasticPool; import com.microsoft.azure.management.sql.SqlServer; import org.joda.time.DateTime; @@ -30,12 +36,15 @@ class SqlElasticPoolImpl SqlElasticPool.Update, IndependentChild.DefinitionStages.WithParentResource { private final ElasticPoolsInner innerCollection; + private final DatabasesInner databasesInner; protected SqlElasticPoolImpl(String name, ElasticPoolInner innerObject, - ElasticPoolsInner innerCollection) { + ElasticPoolsInner innerCollection, + DatabasesInner databasesInner) { super(name, innerObject); this.innerCollection = innerCollection; + this.databasesInner = databasesInner; } @Override @@ -78,6 +87,67 @@ public int storageMB() { return this.inner().storageMB(); } + @Override + public PagedList listActivity() { + PagedListConverter converter = new PagedListConverter() { + @Override + public ElasticPoolActivity typeConvert(ElasticPoolActivityInner elasticPoolActivityInner) { + + return new ElasticPoolActivityImpl(elasticPoolActivityInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.innerCollection.listActivity( + this.resourceGroupName(), + this.sqlServerName(), + this.name()))); + } + + @Override + public PagedList listDatabaseActivity() { + PagedListConverter converter + = new PagedListConverter() { + @Override + public ElasticPoolDatabaseActivity typeConvert(ElasticPoolDatabaseActivityInner elasticPoolDatabaseActivityInner) { + + return new ElasticPoolDatabaseActivityImpl(elasticPoolDatabaseActivityInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.innerCollection.listDatabaseActivity( + this.name(), + this.resourceGroupName(), + this.sqlServerName()))); + } + + @Override + public PagedList listDatabases() { + final DatabasesInner databasesInner = this.databasesInner; + PagedListConverter converter + = new PagedListConverter() { + @Override + public SqlDatabase typeConvert(DatabaseInner databaseInner) { + + return new SqlDatabaseImpl(databaseInner.name(), databaseInner, databasesInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.innerCollection.listDatabases( + this.resourceGroupName(), + this.sqlServerName(), + this.name()))); + } + + @Override + public SqlDatabase getDatabase(String databaseName) { + DatabaseInner database = this.innerCollection.getDatabase( + this.resourceGroupName(), + this.sqlServerName(), + this.name(), + databaseName); + return new SqlDatabaseImpl(database.name(), database, this.databasesInner); + } + @Override public SqlElasticPool refresh() { this.innerCollection.get(this.resourceGroupName(), this.sqlServerName(), this.name()); diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolsImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolsImpl.java index 09e782d150b4..cf2adc033bd2 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolsImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlElasticPoolsImpl.java @@ -30,8 +30,11 @@ class SqlElasticPoolsImpl extends IndependentChildResourcesImpl< implements SqlElasticPools.SqlElasticPoolsCreatable, SupportsGettingByParent, SupportsListingByParent { - protected SqlElasticPoolsImpl(ElasticPoolsInner innerCollection, SqlServerManager manager) { + private final DatabasesInner databasesInner; + + protected SqlElasticPoolsImpl(ElasticPoolsInner innerCollection, SqlServerManager manager, DatabasesInner databasesInner) { super(innerCollection, manager); + this.databasesInner = databasesInner; } @Override @@ -40,7 +43,8 @@ protected SqlElasticPoolImpl wrapModel(String name) { return new SqlElasticPoolImpl( name, inner, - this.innerCollection); + this.innerCollection, + this.databasesInner); } @Override @@ -59,7 +63,7 @@ protected SqlElasticPoolImpl wrapModel(ElasticPoolInner inner) { return null; } - return new SqlElasticPoolImpl(inner.name(), inner, this.innerCollection); + return new SqlElasticPoolImpl(inner.name(), inner, this.innerCollection, this.databasesInner); } @Override @@ -100,6 +104,7 @@ public SqlElasticPool.DefinitionStages.Blank definedWithSqlServer(String resourc return new SqlElasticPoolImpl( elasticPoolName, inner, - this.innerCollection).withExistingParentResource(resourceGroupName, sqlServerName); + this.innerCollection, + this.databasesInner).withExistingParentResource(resourceGroupName, sqlServerName); } } diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerImpl.java index 29ec643d6e9f..62881aefbbd1 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerImpl.java @@ -14,6 +14,7 @@ import com.microsoft.azure.management.sql.ServerMetric; import com.microsoft.azure.management.sql.ServerUpgradeResult; import com.microsoft.azure.management.sql.ServerVersion; +import com.microsoft.azure.management.sql.ServiceObjective; import com.microsoft.azure.management.sql.SqlServer; import rx.Observable; import rx.functions.Func1; @@ -36,17 +37,20 @@ public class SqlServerImpl private final ServersInner innerCollection; private final ElasticPoolsInner elasticPoolsInner; private final DatabasesInner databasesInner; + private final RecommendedElasticPoolsInner recommendedElasticPoolsInner; protected SqlServerImpl(String name, ServerInner innerObject, ServersInner innerCollection, SqlServerManager manager, ElasticPoolsInner elasticPoolsInner, - DatabasesInner databasesInner) { + DatabasesInner databasesInner, + RecommendedElasticPoolsInner recommendedElasticPoolsInner) { super(name, innerObject, manager); this.innerCollection = innerCollection; this.elasticPoolsInner = elasticPoolsInner; this.databasesInner = databasesInner; + this.recommendedElasticPoolsInner = recommendedElasticPoolsInner; } @Override @@ -94,7 +98,7 @@ public FirewallRules firewallRules() { @Override public ElasticPools elasticPools() { - return new ElasticPoolsImpl(this.elasticPoolsInner, this.myManager, this.resourceGroupName(), this.name(), this.region()); + return new ElasticPoolsImpl(this.elasticPoolsInner, this.myManager, this.databasesInner, this.resourceGroupName(), this.name(), this.region()); } @Override @@ -127,6 +131,34 @@ public ServerMetric typeConvert(ServerMetricInner serverMetricInner) { this.name()))); } + @Override + public PagedList listServiceObjectives() { + final ServersInner innerCollection = this.innerCollection; + PagedListConverter converter = new PagedListConverter() { + @Override + public ServiceObjective typeConvert(ServiceObjectiveInner serviceObjectiveInner) { + + return new ServiceObjectiveImpl(serviceObjectiveInner, innerCollection); + } + }; + return converter.convert(Utils.convertToPagedList( + this.innerCollection.listServiceObjectives( + this.resourceGroupName(), + this.name()))); + } + + @Override + public ServiceObjective getServiceObjective(String serviceObjectiveName) { + return new ServiceObjectiveImpl( + this.innerCollection.getServiceObjective(this.resourceGroupName(), this.name(), serviceObjectiveName), + this.innerCollection); + } + + @Override + public RecommendedElasticPools recommendedElasticPools() { + return new RecommendedElasticPoolsImpl(this.recommendedElasticPoolsInner, this.databasesInner, this.resourceGroupName(), this.name()); + } + @Override public SqlServerImpl withAdministratorLogin(String administratorLogin) { this.inner().withAdministratorLogin(administratorLogin); diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerManager.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerManager.java index aed197d6d1f3..ba87b023f873 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerManager.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServerManager.java @@ -94,6 +94,7 @@ public SqlServers sqlServers() { super.innerManagementClient.servers(), super.innerManagementClient.elasticPools(), super.innerManagementClient.databases(), + super.innerManagementClient.recommendedElasticPools(), this); } diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServersImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServersImpl.java index ad16d7315cf4..fd6069d63fde 100644 --- a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServersImpl.java +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/SqlServersImpl.java @@ -16,16 +16,19 @@ class SqlServersImpl implements SqlServers { private final ElasticPoolsInner elasticPoolsInner; - private DatabasesInner databasesInner; + private final DatabasesInner databasesInner; + private final RecommendedElasticPoolsInner recommendedElasticPoolsInner; protected SqlServersImpl( ServersInner innerCollection, ElasticPoolsInner elasticPoolsInner, DatabasesInner databasesInner, + RecommendedElasticPoolsInner recommendedElasticPoolsInner, SqlServerManager manager) { super(innerCollection, manager); this.elasticPoolsInner = elasticPoolsInner; this.databasesInner = databasesInner; + this.recommendedElasticPoolsInner = recommendedElasticPoolsInner; } @Override @@ -41,13 +44,15 @@ protected SqlServerImpl wrapModel(String name) { name, inner, this.innerCollection, - super.myManager, this.elasticPoolsInner, this.databasesInner); + super.myManager, + this.elasticPoolsInner, + this.databasesInner, + this.recommendedElasticPoolsInner); } @Override public PagedList list() { - // TODO - ans - Implement this once Swagger has this method. - return null; + return wrapList(this.innerCollection.list()); } @Override @@ -65,7 +70,10 @@ protected SqlServerImpl wrapModel(ServerInner inner) { inner.name(), inner, this.innerCollection, - this.myManager, this.elasticPoolsInner, this.databasesInner); + this.myManager, + this.elasticPoolsInner, + this.databasesInner, + this.recommendedElasticPoolsInner); } @Override diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionActivityImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionActivityImpl.java new file mode 100644 index 000000000000..f7795940ecd6 --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionActivityImpl.java @@ -0,0 +1,64 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.TransparentDataEncryptionActivity; +import com.microsoft.azure.management.sql.TransparentDataEncryptionActivityStates; + +/** + * Implementation for TransparentDataEncryptionActivity. + */ +@LangDefinition +class TransparentDataEncryptionActivityImpl + extends WrapperImpl + implements TransparentDataEncryptionActivity { + private final ResourceId resourceId; + + protected TransparentDataEncryptionActivityImpl(TransparentDataEncryptionActivityInner innerObject) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + } + + + @Override + public String name() { + return this.resourceId.name(); + } + + @Override + public String id() { + return this.resourceId.id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public String sqlServerName() { + return resourceId.parent().parent().name(); + } + + @Override + public String databaseName() { + return resourceId.parent().name(); + } + + @Override + public TransparentDataEncryptionActivityStates status() { + return this.inner().status(); + } + + @Override + public Double percentComplete() { + return this.inner().percentComplete(); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionImpl.java new file mode 100644 index 000000000000..0592fa72c36a --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionImpl.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.management.apigeneration.LangDefinition; +import com.microsoft.azure.management.resources.fluentcore.arm.ResourceId; +import com.microsoft.azure.management.resources.fluentcore.model.implementation.WrapperImpl; +import com.microsoft.azure.management.sql.TransparentDataEncryption; +import com.microsoft.azure.management.sql.TransparentDataEncryptionStates; + +/** + * Implementation for TransparentDataEncryption. + */ +@LangDefinition +class TransparentDataEncryptionImpl + extends WrapperImpl + implements TransparentDataEncryption { + private final ResourceId resourceId; + + protected TransparentDataEncryptionImpl(TransparentDataEncryptionInner innerObject) { + super(innerObject); + this.resourceId = ResourceId.parseResourceId(this.inner().id()); + } + + @Override + public String name() { + return this.resourceId.name(); + } + + @Override + public String id() { + return this.resourceId.id(); + } + + @Override + public String resourceGroupName() { + return this.resourceId.resourceGroupName(); + } + + @Override + public String sqlServerName() { + return resourceId.parent().parent().name(); + } + + @Override + public String databaseName() { + return resourceId.parent().name(); + } + + @Override + public TransparentDataEncryptionStates status() { + return this.inner().status(); + } +} diff --git a/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionsImpl.java b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionsImpl.java new file mode 100644 index 000000000000..db5a6c47479c --- /dev/null +++ b/azure-mgmt-sql/src/main/java/com/microsoft/azure/management/sql/implementation/TransparentDataEncryptionsImpl.java @@ -0,0 +1,72 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + */ + +package com.microsoft.azure.management.sql.implementation; + +import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.fluentcore.utils.Utils; +import com.microsoft.azure.management.sql.SqlDatabase; +import com.microsoft.azure.management.sql.TransparentDataEncryption; +import com.microsoft.azure.management.sql.TransparentDataEncryptionActivity; +import com.microsoft.azure.management.sql.TransparentDataEncryptionStates; + +/** + * Implementation of SqlDatabase.TransparentDataEncryptions, which enables managing the Data Encryption settings. + */ +class TransparentDataEncryptionsImpl implements SqlDatabase.TransparentDataEncryptions { + private final String resourceGroupName; + private final String sqlServerName; + private final String databaseName; + private final DatabasesInner databasesInner; + + TransparentDataEncryptionsImpl(String resourceGroupName, String sqlServerName, String databaseName, DatabasesInner databasesInner) { + this.resourceGroupName = resourceGroupName; + this.sqlServerName = sqlServerName; + this.databaseName = databaseName; + this.databasesInner = databasesInner; + } + + @Override + public TransparentDataEncryption get() { + return new TransparentDataEncryptionImpl( + this.databasesInner.getTransparentDataEncryptionConfiguration( + this.resourceGroupName, + this.sqlServerName, + this.databaseName)); + } + + @Override + public TransparentDataEncryption update(TransparentDataEncryptionStates transparentDataEncryptionState) { + TransparentDataEncryptionInner transparentDataEncryptionInner = new TransparentDataEncryptionInner(); + transparentDataEncryptionInner.withStatus(transparentDataEncryptionState); + + return new TransparentDataEncryptionImpl( + this.databasesInner.createOrUpdateTransparentDataEncryptionConfiguration( + this.resourceGroupName, + this.sqlServerName, + this.databaseName, + transparentDataEncryptionInner)); + } + + @Override + public PagedList listActivity() { + PagedListConverter converter + = new PagedListConverter() { + @Override + public TransparentDataEncryptionActivity typeConvert(TransparentDataEncryptionActivityInner transparentDataEncryptionActivityInner) { + + return new TransparentDataEncryptionActivityImpl(transparentDataEncryptionActivityInner); + } + }; + return converter.convert(Utils.convertToPagedList( + this.databasesInner.listTransparentDataEncryptionActivity( + this.resourceGroupName, + this.sqlServerName, + this.databaseName))); + } + +} diff --git a/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerOperationsTests.java b/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerOperationsTests.java index 99fe7bedf221..6d848da28869 100644 --- a/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerOperationsTests.java +++ b/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerOperationsTests.java @@ -17,8 +17,8 @@ import java.util.List; public class SqlServerOperationsTests extends SqlServerTestBase { - private static final String RG_NAME = "javasqlserver1237"; - private static final String SQL_SERVER_NAME = "javasqlserver1237"; + private static final String RG_NAME = "javasqlserver1236"; + private static final String SQL_SERVER_NAME = "javasqlserver1236"; private static final String SQL_DATABASE_NAME = "myTestDatabase2"; private static final String COLLATION = "SQL_Latin1_General_CP1_CI_AS"; private static final String SQL_ELASTIC_POOL_NAME = "testElasticPool"; @@ -37,12 +37,27 @@ public static void cleanup() throws Exception { resourceManager.resourceGroups().deleteByName(RG_NAME); } +// @Test +// public void canListRecommendedElasticPools() throws Exception { +// SqlServer sqlServer = sqlServerManager.sqlServers().getByGroup("ans", "ans-secondary"); +// PagedList recommendedElasticPools = sqlServer.recommendedElasticPools().list(); +// Assert.assertNotNull(recommendedElasticPools); +// } + + @Test public void canCRUDSqlServer() throws Exception { // Create SqlServer sqlServer = createSqlServer(); validateSqlServer(sqlServer); + + PagedList serviceObjectives = sqlServer.listServiceObjectives(); + + Assert.assertNotEquals(serviceObjectives.size(), 0); + Assert.assertNotNull(serviceObjectives.get(0).refresh()); + Assert.assertNotNull(sqlServer.getServiceObjective("d1737d22-a8ea-4de7-9bd0-33395d2a7419")); + sqlServer.update().withAdministratorPassword("P@ssword~2").apply(); // List @@ -77,6 +92,37 @@ public void canCRUDSqlDatabase() throws Exception { validateSqlDatabase(sqlDatabase, SQL_DATABASE_NAME); + // Test transparent data encryption settings. + PagedList transparentDataEncryptionActivities = sqlDatabase.transparentDataEncryptions().listActivity(); + Assert.assertNotNull(transparentDataEncryptionActivities); + + TransparentDataEncryption transparentDataEncryption = sqlDatabase.transparentDataEncryptions().update(TransparentDataEncryptionStates.ENABLED); + Assert.assertNotNull(transparentDataEncryption); + Assert.assertEquals(transparentDataEncryption.status(), TransparentDataEncryptionStates.ENABLED); + + transparentDataEncryptionActivities = sqlDatabase.transparentDataEncryptions().listActivity(); + Assert.assertNotNull(transparentDataEncryptionActivities); + Assert.assertEquals(sqlDatabase.transparentDataEncryptions().get().status(), TransparentDataEncryptionStates.ENABLED); + + Thread.sleep(10000); + transparentDataEncryption = sqlDatabase.transparentDataEncryptions().update(TransparentDataEncryptionStates.DISABLED); + Assert.assertNotNull(transparentDataEncryption); + Assert.assertEquals(transparentDataEncryption.status(), TransparentDataEncryptionStates.DISABLED); + Assert.assertEquals(transparentDataEncryption.sqlServerName(), SQL_SERVER_NAME); + Assert.assertEquals(transparentDataEncryption.databaseName(), SQL_DATABASE_NAME); + Assert.assertNotNull(transparentDataEncryption.name()); + Assert.assertNotNull(transparentDataEncryption.id()); + // Done testing with encryption settings. + + // Test Service tier advisors. + PagedList serviceTierAdvisors = sqlDatabase.listServiceTierAdvisor(); + Assert.assertNotNull(serviceTierAdvisors); + Assert.assertNotEquals(serviceTierAdvisors.size(), 0); + serviceTierAdvisors.get(0).refresh(); + Assert.assertNotNull(sqlDatabase.getServiceTierAdvisor(serviceTierAdvisors.get(0).name())); + // End of testing service tier advisors. + + sqlServer = sqlServerManager.sqlServers().getByGroup(RG_NAME, SQL_SERVER_NAME); validateSqlServer(sqlServer); @@ -159,7 +205,6 @@ public void canManageReplicationLinks() throws Exception { databaseInServer2.replicationLinks().delete(replicationLinksInDb2.get(0).name()); - Assert.assertEquals(databaseInServer2.replicationLinks().list().size(), 0); Thread.sleep(5000); @@ -200,7 +245,7 @@ public void canDoOperationsOnDataWarehouse() throws Exception { Assert.assertEquals(dataWarehouse.edition(), DatabaseEditions.DATA_WAREHOUSE); // TODO - ans - Get Restore points. - // Assert.assertNotNull(dataWarehouse.listRestorePoints()); + Assert.assertNotNull(dataWarehouse.listRestorePoints()); // Get usages. Assert.assertNotNull(dataWarehouse.listUsages()); @@ -241,7 +286,8 @@ public void canCRUDSqlDatabaseWithElasticPool() throws Exception { validateSqlServer(sqlServer); // Get Elastic pool - validateSqlElasticPool(sqlServer.elasticPools().get(SQL_ELASTIC_POOL_NAME)); + SqlElasticPool elasticPool = sqlServer.elasticPools().get(SQL_ELASTIC_POOL_NAME); + validateSqlElasticPool(elasticPool); // Get validateSqlDatabaseWithElasticPool(sqlServer.databases().get(SQL_DATABASE_NAME), SQL_DATABASE_NAME); @@ -289,6 +335,32 @@ public void canCRUDSqlDatabaseWithElasticPool() throws Exception { sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertEquals(sqlDatabase.elasticPoolName(), SQL_ELASTIC_POOL_NAME); + // List Activity in elastic pool + Assert.assertNotNull(elasticPool.listActivity()); + + // List Database activity in elastic pool. + Assert.assertNotNull(elasticPool.listDatabaseActivity()); + + // List databases in elastic pool. + PagedList databasesInElasticPool = elasticPool.listDatabases(); + Assert.assertNotNull(databasesInElasticPool); + Assert.assertEquals(databasesInElasticPool.size(), 1); + + // Get a particular database in elastic pool. + SqlDatabase databaseInElasticPool = elasticPool.getDatabase(SQL_DATABASE_NAME); + validateSqlDatabase(databaseInElasticPool, SQL_DATABASE_NAME); + + // Refresh works on the database got from elastic pool. + databaseInElasticPool.refresh(); + + // Validate that trying to get an invalid database from elastic pool returns null. + try { + elasticPool.getDatabase("does_not_exist"); + Assert.assertNotNull(null); + } + catch(Exception ex) { + } + // Delete sqlServer.databases().delete(SQL_DATABASE_NAME); validateSqlDatabaseNotFound(SQL_DATABASE_NAME); diff --git a/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerTestBase.java b/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerTestBase.java index 38498a62bbb9..4a3e5ae1b953 100644 --- a/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerTestBase.java +++ b/azure-mgmt-sql/src/test/java/com/microsoft/azure/management/sql/SqlServerTestBase.java @@ -26,7 +26,7 @@ public static void createClients() { .withBaseUrl(AzureEnvironment.AZURE, AzureEnvironment.Endpoint.RESOURCE_MANAGER) .withCredentials(credentials) .withLogLevel(HttpLoggingInterceptor.Level.BODY) - //.withProxy( new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8888))) + .withProxy( new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8888))) .withReadTimeout(60, TimeUnit.SECONDS) .build();