/**
* 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.arm.collection.implementation.ReadableWrappersImpl;
import com.microsoft.azure.management.resources.fluentcore.model.implementation.RefreshableWrapperImpl;
import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter;
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 rx.Observable;
import java.util.ArrayList;
import java.util.List;
/**
* Implementation for RecommendedElasticPool and its parent interfaces.
*/
@LangDefinition
class RecommendedElasticPoolImpl
extends RefreshableWrapperImpl<RecommendedElasticPoolInner, RecommendedElasticPool>
implements RecommendedElasticPool {
private final ResourceId resourceId;
private final SqlServerManager manager;
protected RecommendedElasticPoolImpl(RecommendedElasticPoolInner innerObject, SqlServerManager manager) {
super(innerObject);
this.resourceId = ResourceId.fromString(this.inner().id());
this.manager = manager;
}
@Override
protected Observable<RecommendedElasticPoolInner> getInnerAsync() {
return this.manager().inner().recommendedElasticPools().getAsync(
this.resourceGroupName(), this.sqlServerName(), this.name());
}
@Override
public SqlServerManager manager() {
return this.manager;
}
@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<SqlDatabase> databases() {
ArrayList<SqlDatabase> databases = new ArrayList<>();
for (DatabaseInner databaseInner : this.inner().databases()) {
databases.add(new SqlDatabaseImpl(databaseInner.name(), databaseInner, this.manager()));
}
return databases;
}
@Override
public List<SqlDatabase> listDatabases() {
final RecommendedElasticPoolImpl self = this;
PagedListConverter<DatabaseInner, SqlDatabase> converter = new PagedListConverter<DatabaseInner, SqlDatabase>() {
@Override
public SqlDatabase typeConvert(DatabaseInner databaseInner) {
return new SqlDatabaseImpl(databaseInner.name(), databaseInner, self.manager());
}
};
return converter.convert(ReadableWrappersImpl.convertToPagedList(
this.manager().inner().recommendedElasticPools().listDatabases(
this.resourceGroupName(),
this.sqlServerName(),
this.name())));
}
@Override
public SqlDatabase getDatabase(String databaseName) {
DatabaseInner databaseInner = this.manager().inner().recommendedElasticPools().getDatabases(
this.resourceGroupName(),
this.sqlServerName(),
this.name(),
databaseName);
return new SqlDatabaseImpl(databaseInner.name(), databaseInner, this.manager());
}
@Override
public List<RecommendedElasticPoolMetric> listMetrics() {
PagedListConverter<RecommendedElasticPoolMetricInner, RecommendedElasticPoolMetric> converter = new PagedListConverter<RecommendedElasticPoolMetricInner, RecommendedElasticPoolMetric>() {
@Override
public RecommendedElasticPoolMetric typeConvert(RecommendedElasticPoolMetricInner recommendedElasticPoolMetricInner) {
return new RecommendedElasticPoolMetricImpl(recommendedElasticPoolMetricInner);
}
};
return converter.convert(ReadableWrappersImpl.convertToPagedList(
this.manager().inner().recommendedElasticPools().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();
}
}