From 2a82b24d8695136fda51dc4e738e659496fea4c5 Mon Sep 17 00:00:00 2001 From: Jianghao Lu Date: Thu, 5 May 2016 17:59:08 -0700 Subject: [PATCH] Fix Azure roll-up to return Azure object --- .../implementation/ComputeManager.java | 2 +- .../ComputeResourceConnector.java | 2 +- .../azure/management/resources/Providers.java | 14 +++ .../resources/ResourceConnector.java | 4 +- .../implementation/AzureConfigurableImpl.java | 5 +- .../implementation/EntitiesImpl.java | 31 ----- .../implementation/ARMResourceConnector.java | 4 +- .../implementation/ProviderImpl.java | 4 +- .../implementation/ProvidersImpl.java | 46 +++++++ .../implementation/ResourceConnectorBase.java | 2 +- .../implementation/ResourceManager.java | 107 ++++++++-------- .../resources/ResourceManagerTestBase.java | 8 +- .../implementation/StorageAccountImpl.java | 4 +- .../implementation/StorageManager.java | 60 +++------ .../StorageResourceConnector.java | 2 +- .../storage/StorageManagementTestBase.java | 17 +-- .../microsoft/azure/implementation/Azure.java | 115 ++++++++++++------ .../implementation/AzureConfigureImpl.java | 15 --- .../AzureResourceGroupImpl.java | 34 ++++-- .../AzureResourceGroupsImpl.java | 7 +- .../implementation/AzureSubscriptionImpl.java | 105 ---------------- .../java/com/microsoft/azure/AzureTests.java | 21 ++-- 22 files changed, 273 insertions(+), 336 deletions(-) create mode 100644 azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/Providers.java delete mode 100644 azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/collection/implementation/EntitiesImpl.java create mode 100644 azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProvidersImpl.java delete mode 100644 azure/src/main/java/com/microsoft/azure/implementation/AzureConfigureImpl.java delete mode 100644 azure/src/main/java/com/microsoft/azure/implementation/AzureSubscriptionImpl.java diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java index 15254eb24375..3392cb7285e4 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeManager.java @@ -83,7 +83,7 @@ private ResourceManager resourceClient() { if (restClient == null) { resourceClient = ResourceManager .authenticate(restClient) - .useSubscription(subscriptionId); + .withSubscription(subscriptionId); } return resourceClient; } diff --git a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeResourceConnector.java b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeResourceConnector.java index c633fc2c6e50..451133fd41c6 100644 --- a/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeResourceConnector.java +++ b/azure-mgmt-compute/src/main/java/com/microsoft/azure/management/compute/implementation/ComputeResourceConnector.java @@ -7,7 +7,7 @@ import com.microsoft.azure.management.resources.implementation.ResourceConnectorBase; import com.microsoft.rest.RestClient; -public class ComputeResourceConnector extends ResourceConnectorBase { +public class ComputeResourceConnector extends ResourceConnectorBase { private ComputeManager computeClient; private AvailabilitySets.InGroup availabilitySets; private VirtualMachines.InGroup virtualMachines; diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/Providers.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/Providers.java new file mode 100644 index 000000000000..75d16d6fa4ba --- /dev/null +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/Providers.java @@ -0,0 +1,14 @@ +package com.microsoft.azure.management.resources; + +import com.microsoft.azure.CloudException; +import com.microsoft.azure.management.resources.fluentcore.collection.SupportsGetting; +import com.microsoft.azure.management.resources.fluentcore.collection.SupportsListing; + +import java.io.IOException; + +public interface Providers extends + SupportsListing, + SupportsGetting { + Provider unregister(String resourceProviderNamespace) throws CloudException, IOException; + Provider register(String resourceProviderNamespace) throws CloudException, IOException; +} diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/ResourceConnector.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/ResourceConnector.java index 77e3bb7cb04f..4b550132aeac 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/ResourceConnector.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/ResourceConnector.java @@ -2,8 +2,8 @@ import com.microsoft.rest.RestClient; -public interface ResourceConnector { - interface Builder { +public interface ResourceConnector { + interface Builder { T create(RestClient restClient, String subscriptionId, ResourceGroup resourceGroup); } } diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/arm/implementation/AzureConfigurableImpl.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/arm/implementation/AzureConfigurableImpl.java index 166250a88c95..54f211996e06 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/arm/implementation/AzureConfigurableImpl.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/arm/implementation/AzureConfigurableImpl.java @@ -9,7 +9,6 @@ public class AzureConfigurableImpl> implements AzureConfigurable { protected RestClient.Builder restClientBuilder; - protected RestClient restClient; protected AzureConfigurableImpl() { this.restClientBuilder = new RestClient.Builder("https://management.azure.com"); @@ -33,7 +32,7 @@ public T withUserAgent(String userAgent) { return (T) this; } - protected void buildRestClient(ServiceClientCredentials credentials) { - restClient = restClientBuilder.withCredentials(credentials).build(); + protected RestClient buildRestClient(ServiceClientCredentials credentials) { + return restClientBuilder.withCredentials(credentials).build(); } } diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/collection/implementation/EntitiesImpl.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/collection/implementation/EntitiesImpl.java deleted file mode 100644 index 6b9cd86ffd25..000000000000 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/collection/implementation/EntitiesImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -/** -* Copyright (c) Microsoft Corporation -* -* All rights reserved. -* -* MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -* (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, -* publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -* subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH -* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -package com.microsoft.azure.management.resources.fluentcore.collection.implementation; - -public abstract class EntitiesImpl { - final protected T azure; - protected EntitiesImpl(T azure) { - this.azure = azure; - } - - public T azure() { - return this.azure; - } -} diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ARMResourceConnector.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ARMResourceConnector.java index 98b082f34272..47375c50f85a 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ARMResourceConnector.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ARMResourceConnector.java @@ -6,7 +6,7 @@ import com.microsoft.azure.management.resources.ResourceGroup; import com.microsoft.rest.RestClient; -public class ARMResourceConnector extends ResourceConnectorBase { +public class ARMResourceConnector extends ResourceConnectorBase { private ResourceManager resourceClient; private GenericResources.InGroup genericResources; private Deployments.InGroup deployments; @@ -43,7 +43,7 @@ private ResourceManager resourceClient() { if (resourceClient == null) { resourceClient = ResourceManager .authenticate(restClient) - .useSubscription(subscriptionId); + .withSubscription(subscriptionId); } return resourceClient; } diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProviderImpl.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProviderImpl.java index 7002dd8a351f..89ad3a20da22 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProviderImpl.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProviderImpl.java @@ -7,12 +7,12 @@ import java.util.List; -public class ProviderImpl extends +class ProviderImpl extends IndexableWrapperImpl implements Provider { - public ProviderImpl(ProviderInner provider) { + ProviderImpl(ProviderInner provider) { super(provider.id(), provider); } diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProvidersImpl.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProvidersImpl.java new file mode 100644 index 000000000000..528dd19947a0 --- /dev/null +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ProvidersImpl.java @@ -0,0 +1,46 @@ +package com.microsoft.azure.management.resources.implementation; + +import com.microsoft.azure.CloudException; +import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.Provider; +import com.microsoft.azure.management.resources.Providers; +import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; +import com.microsoft.azure.management.resources.implementation.api.ProviderInner; +import com.microsoft.azure.management.resources.implementation.api.ProvidersInner; + +import java.io.IOException; + +final class ProvidersImpl + implements Providers { + private final ProvidersInner client; + + ProvidersImpl(final ProvidersInner client) { + this.client = client; + } + + @Override + public PagedList list() throws CloudException, IOException { + PagedListConverter converter = new PagedListConverter() { + @Override + public Provider typeConvert(ProviderInner providerInner) { + return new ProviderImpl(providerInner); + } + }; + return converter.convert(client.list().getBody()); + } + + @Override + public Provider unregister(String resourceProviderNamespace) throws CloudException, IOException { + return new ProviderImpl(client.unregister(resourceProviderNamespace).getBody()); + } + + @Override + public Provider register(String resourceProviderNamespace) throws CloudException, IOException { + return new ProviderImpl(client.register(resourceProviderNamespace).getBody()); + } + + @Override + public Provider get(String resourceProviderNamespace) throws CloudException, IOException { + return new ProviderImpl(client.get(resourceProviderNamespace).getBody()); + } +} diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceConnectorBase.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceConnectorBase.java index d28ed6fe2b38..8e9237576271 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceConnectorBase.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceConnectorBase.java @@ -4,7 +4,7 @@ import com.microsoft.azure.management.resources.ResourceGroup; import com.microsoft.rest.RestClient; -public class ResourceConnectorBase implements ResourceConnector { +public class ResourceConnectorBase implements ResourceConnector { protected final RestClient restClient; protected final String subscriptionId; protected final ResourceGroup resourceGroup; diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceManager.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceManager.java index d2a132aa6a91..406eee804c50 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceManager.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/implementation/ResourceManager.java @@ -9,133 +9,128 @@ import com.microsoft.azure.management.resources.*; import com.microsoft.azure.management.resources.fluentcore.arm.AzureConfigurable; import com.microsoft.azure.management.resources.fluentcore.arm.implementation.AzureConfigurableImpl; +import com.microsoft.azure.management.resources.implementation.api.FeatureClientImpl; import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; import com.microsoft.azure.management.resources.implementation.api.SubscriptionClientImpl; import com.microsoft.rest.RestClient; import com.microsoft.rest.credentials.ServiceClientCredentials; public final class ResourceManager { - private RestClient restClient; - private String subscriptionId; // The sdk clients - private ResourceManagementClientImpl resourceManagementClient; + private final ResourceManagementClientImpl resourceManagementClient; + private final FeatureClientImpl featureClient; // The collections - ResourceGroups resourceGroups; - GenericResources genericResources; - Deployments deployments; - Deployments.InGroup deploymentsInGroup; - - public static Configure configure() { - return new ResourceManager().new ConfigurableImpl(); - } + private ResourceGroups resourceGroups; + private GenericResources genericResources; + private Deployments deployments; + private Features features; + private Providers providers; public static ResourceManager.Authenticated authenticate(ServiceClientCredentials credentials) { - return (new ResourceManager(credentials)).new AuthenticatedImpl(); + return new AuthenticatedImpl(new RestClient + .Builder("https://management.azure.com") + .withCredentials(credentials) + .build()); } public static ResourceManager.Authenticated authenticate(RestClient restClient) { - return (new ResourceManager(restClient)).new AuthenticatedImpl(); + return new AuthenticatedImpl(restClient); } - public interface Configure extends AzureConfigurable { + public static Configurable configure() { + return new ResourceManager.ConfigurableImpl(); + } + + public interface Configurable extends AzureConfigurable { ResourceManager.Authenticated authenticate(ServiceClientCredentials credentials); } - class ConfigurableImpl extends AzureConfigurableImpl implements Configure { + private static class ConfigurableImpl extends AzureConfigurableImpl implements Configurable { public ResourceManager.Authenticated authenticate(ServiceClientCredentials credentials) { - buildRestClient(credentials); - return ResourceManager.authenticate(restClient); + return ResourceManager.authenticate(buildRestClient(credentials)); } } public interface Authenticated { Tenants tenants(); Subscriptions subscriptions(); - ResourceManager useSubscription(String subscriptionId); + ResourceManager withSubscription(String subscriptionId); } - class AuthenticatedImpl implements Authenticated { + private static final class AuthenticatedImpl implements Authenticated { + private RestClient restClient; private SubscriptionClientImpl subscriptionClient; // The subscription less collections private Subscriptions subscriptions; private Tenants tenants; - public AuthenticatedImpl() {} + AuthenticatedImpl(RestClient restClient) { + this.restClient = restClient; + this.subscriptionClient = new SubscriptionClientImpl(restClient); + } public Subscriptions subscriptions() { if (subscriptions == null) { - subscriptions = new SubscriptionsImpl(subscriptionClient().subscriptions()); + subscriptions = new SubscriptionsImpl(subscriptionClient.subscriptions()); } return subscriptions; } public Tenants tenants() { if (tenants == null) { - tenants = new TenantsImpl(subscriptionClient().tenants()); + tenants = new TenantsImpl(subscriptionClient.tenants()); } return tenants; } - public ResourceManager useSubscription(String subscriptionId) { - ResourceManager.this.subscriptionId = subscriptionId; - return ResourceManager.this; - } - - private SubscriptionClientImpl subscriptionClient() { - if (subscriptionClient == null) { - subscriptionClient = new SubscriptionClientImpl(restClient); - } - return subscriptionClient; + @Override + public ResourceManager withSubscription(String subscriptionId) { + return new ResourceManager(restClient, subscriptionId); } } - private ResourceManager(ServiceClientCredentials credentials) { - this.restClient = new RestClient - .Builder("https://management.azure.com") - .withCredentials(credentials) - .build(); + private ResourceManager(RestClient restClient, String subscriptionId) { + this.resourceManagementClient = new ResourceManagementClientImpl(restClient); + this.resourceManagementClient.setSubscriptionId(subscriptionId); + this.featureClient = new FeatureClientImpl(restClient); + this.featureClient.setSubscriptionId(subscriptionId); } - private ResourceManager(RestClient restClient) { - this.restClient = restClient; - } - - private ResourceManager() {} - public ResourceGroups resourceGroups() { if (resourceGroups == null) { - resourceGroups = new ResourceGroupsImpl(resourceManagementClient()); + resourceGroups = new ResourceGroupsImpl(resourceManagementClient); } return resourceGroups; } public GenericResources genericResources() { if (genericResources == null) { - genericResources = new GenericResourcesImpl(resourceManagementClient()); + genericResources = new GenericResourcesImpl(resourceManagementClient); } return genericResources; } public Deployments deployments() { if (deployments == null) { - ResourceManagementClientImpl client = resourceManagementClient(); - deployments = new DeploymentsImpl(client.deployments(), client.deploymentOperations(), resourceGroups()); + deployments = new DeploymentsImpl( + resourceManagementClient.deployments(), + resourceManagementClient.deploymentOperations(), + resourceGroups()); } return deployments; } - public Deployments.InGroup deployments(ResourceGroup resourceGroup) { - if (deploymentsInGroup == null) { - deploymentsInGroup = new DeploymentsInGroupImpl(deployments(), resourceGroup); + public Features features() { + if (features == null) { + features = new FeaturesImpl(featureClient.features()); } - return deploymentsInGroup; + return features; } - private ResourceManagementClientImpl resourceManagementClient() { - if (resourceManagementClient == null) { - resourceManagementClient = new ResourceManagementClientImpl(restClient); - resourceManagementClient.setSubscriptionId(subscriptionId); + public Providers providers() { + if (providers == null) { + providers = new ProvidersImpl(resourceManagementClient.providers()); } - return resourceManagementClient; + return providers; } } diff --git a/azure-mgmt-resources/src/test/java/com/microsoft/azure/management/resources/ResourceManagerTestBase.java b/azure-mgmt-resources/src/test/java/com/microsoft/azure/management/resources/ResourceManagerTestBase.java index a9256f6abd8e..66a13a9cd2f4 100644 --- a/azure-mgmt-resources/src/test/java/com/microsoft/azure/management/resources/ResourceManagerTestBase.java +++ b/azure-mgmt-resources/src/test/java/com/microsoft/azure/management/resources/ResourceManagerTestBase.java @@ -2,17 +2,21 @@ import com.microsoft.azure.credentials.ApplicationTokenCredentials; import com.microsoft.azure.management.resources.implementation.ResourceManager; +import okhttp3.logging.HttpLoggingInterceptor; public abstract class ResourceManagerTestBase { protected static ResourceManager resourceClient; public static void createClient() throws Exception { - resourceClient = ResourceManager.authenticate( + resourceClient = ResourceManager + .configure() + .withLogLevel(HttpLoggingInterceptor.Level.BASIC) + .authenticate( new ApplicationTokenCredentials( System.getenv("arm.clientid"), System.getenv("arm.domain"), System.getenv("arm.secret"), null) - ).useSubscription(System.getenv("arm.subscriptionid")); + ).withSubscription(System.getenv("arm.subscriptionid")); } } diff --git a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageAccountImpl.java b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageAccountImpl.java index d4ece7cce705..55e973972fa0 100644 --- a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageAccountImpl.java +++ b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageAccountImpl.java @@ -13,7 +13,7 @@ import java.io.IOException; -public class StorageAccountImpl +class StorageAccountImpl extends GroupableResourceImpl implements StorageAccount, @@ -28,7 +28,7 @@ public class StorageAccountImpl private final StorageAccountsInner client; - public StorageAccountImpl(String name, + StorageAccountImpl(String name, StorageAccountInner innerModel, final StorageAccountsInner client, final ResourceGroups resourceGroups) { diff --git a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageManager.java b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageManager.java index 9ea772891dd3..8aa05176e6c8 100644 --- a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageManager.java +++ b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageManager.java @@ -10,22 +10,22 @@ import com.microsoft.rest.credentials.ServiceClientCredentials; public final class StorageManager { - private RestClient restClient; - private String subscriptionId; - // The service managers - private ResourceManager resourceClient; - // The sdk clients - private StorageManagementClientImpl storageManagementClient; - // The collections + private final StorageManagementClientImpl storageManagementClient; + // Dependent managers + private ResourceManager resourceManager; + // Collections private StorageAccounts storageAccounts; private Usages storageUsages; - public static Configurable configurable() { - return new StorageManager().new ConfigurableImpl(); + public static Configurable configure() { + return new StorageManager.ConfigurableImpl(); } public static StorageManager authenticate(ServiceClientCredentials credentials, String subscriptionId) { - return new StorageManager(credentials, subscriptionId); + return new StorageManager(new RestClient + .Builder("https://management.azure.com") + .withCredentials(credentials) + .build(), subscriptionId); } public static StorageManager authenticate(RestClient restClient, String subscriptionId) { @@ -36,56 +36,30 @@ public interface Configurable extends AzureConfigurable { StorageManager authenticate(ServiceClientCredentials credentials, String subscriptionId); } - class ConfigurableImpl extends AzureConfigurableImpl implements Configurable { + private static class ConfigurableImpl extends AzureConfigurableImpl implements Configurable { public StorageManager authenticate(ServiceClientCredentials credentials, String subscriptionId) { - buildRestClient(credentials); - return StorageManager.authenticate(restClient, subscriptionId); + return StorageManager.authenticate(buildRestClient(credentials), subscriptionId); } } - private StorageManager(ServiceClientCredentials credentials, String subscriptionId) { - this.restClient = new RestClient - .Builder("https://management.azure.com") - .withCredentials(credentials) - .build(); - this.subscriptionId = subscriptionId; - } - private StorageManager(RestClient restClient, String subscriptionId) { - this.restClient = restClient; - this.subscriptionId = subscriptionId; + storageManagementClient = new StorageManagementClientImpl(restClient); + storageManagementClient.setSubscriptionId(subscriptionId); + resourceManager = ResourceManager.authenticate(restClient).withSubscription(subscriptionId); } - private StorageManager() {} - public StorageAccounts storageAccounts() { if (storageAccounts == null) { - storageAccounts = new StorageAccountsImpl(storageManagementClient().storageAccounts(), resourceClient().resourceGroups()); + storageAccounts = new StorageAccountsImpl(storageManagementClient.storageAccounts(), resourceManager.resourceGroups()); } return storageAccounts; } public Usages usages() { if (storageUsages == null) { - storageUsages = new UsagesImpl(storageManagementClient()); + storageUsages = new UsagesImpl(storageManagementClient); } return storageUsages; } - private StorageManagementClientImpl storageManagementClient() { - if (storageManagementClient == null) { - storageManagementClient = new StorageManagementClientImpl(restClient); - storageManagementClient.setSubscriptionId(subscriptionId); - } - return storageManagementClient; - } - - private ResourceManager resourceClient() { - if (restClient == null) { - resourceClient = ResourceManager - .authenticate(restClient) - .useSubscription(subscriptionId); - } - return resourceClient; - } } diff --git a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageResourceConnector.java b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageResourceConnector.java index b52a55faf608..bdd636ebe5a0 100644 --- a/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageResourceConnector.java +++ b/azure-mgmt-storage/src/main/java/com/microsoft/azure/management/storage/implementation/StorageResourceConnector.java @@ -6,7 +6,7 @@ import com.microsoft.azure.management.storage.StorageAccounts; import com.microsoft.rest.RestClient; -public class StorageResourceConnector extends ResourceConnectorBase { +public class StorageResourceConnector extends ResourceConnectorBase { private StorageManager storageClient; private StorageAccounts.InGroup storageAccounts; diff --git a/azure-mgmt-storage/src/test/java/com/microsoft/azure/management/storage/StorageManagementTestBase.java b/azure-mgmt-storage/src/test/java/com/microsoft/azure/management/storage/StorageManagementTestBase.java index b1835be7fe5f..c5818dfe5c70 100644 --- a/azure-mgmt-storage/src/test/java/com/microsoft/azure/management/storage/StorageManagementTestBase.java +++ b/azure-mgmt-storage/src/test/java/com/microsoft/azure/management/storage/StorageManagementTestBase.java @@ -3,6 +3,7 @@ import com.microsoft.azure.credentials.ApplicationTokenCredentials; import com.microsoft.azure.management.resources.implementation.ResourceManager; import com.microsoft.azure.management.storage.implementation.StorageManager; +import com.microsoft.rest.RestClient; import okhttp3.logging.HttpLoggingInterceptor; public abstract class StorageManagementTestBase { @@ -16,14 +17,16 @@ public static void createClients() { System.getenv("arm.secret"), null); - resourceClient = ResourceManager - .authenticate(credentials) - .useSubscription(System.getenv("arm.subscriptionid")); + RestClient restClient = new RestClient.Builder("https://management.azure.com") + .withCredentials(credentials) + .withLogLevel(HttpLoggingInterceptor.Level.BASIC) + .build(); - storageClient = StorageManager. - authenticate(credentials, System.getenv("arm.subscriptionid")); + resourceClient = ResourceManager + .authenticate(restClient) + .withSubscription(System.getenv("arm.subscriptionid")); - // resourceManagementClient.setLogLevel(HttpLoggingInterceptor.Level.BODY); - // storageManagementClient.setLogLevel(HttpLoggingInterceptor.Level.BODY); + storageClient = StorageManager + .authenticate(restClient, System.getenv("arm.subscriptionid")); } } diff --git a/azure/src/main/java/com/microsoft/azure/implementation/Azure.java b/azure/src/main/java/com/microsoft/azure/implementation/Azure.java index c34f7e0318cb..b292daa23ad5 100644 --- a/azure/src/main/java/com/microsoft/azure/implementation/Azure.java +++ b/azure/src/main/java/com/microsoft/azure/implementation/Azure.java @@ -8,45 +8,82 @@ import com.microsoft.azure.management.compute.AvailabilitySets; import com.microsoft.azure.management.compute.VirtualMachines; +import com.microsoft.azure.management.compute.implementation.ComputeManager; +import com.microsoft.azure.management.resources.Deployments; import com.microsoft.azure.management.resources.GenericResources; import com.microsoft.azure.management.resources.Subscriptions; import com.microsoft.azure.management.resources.Tenants; import com.microsoft.azure.management.resources.fluentcore.arm.AzureConfigurable; +import com.microsoft.azure.management.resources.fluentcore.arm.implementation.AzureConfigurableImpl; import com.microsoft.azure.management.resources.fluentcore.collection.*; import com.microsoft.azure.management.resources.implementation.ResourceManager; +import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; import com.microsoft.azure.management.storage.StorageAccounts; import com.microsoft.azure.management.storage.Usages; +import com.microsoft.azure.management.storage.implementation.StorageManager; import com.microsoft.rest.RestClient; import com.microsoft.rest.credentials.ServiceClientCredentials; public final class Azure { - private final RestClient restClient; - // The service specific managers - ResourceManager.Authenticated resourceManager; + private final ResourceGroups resourceGroups; + private final ResourceManager resourceManager; + private final StorageManager storageManager; + private final ComputeManager computeManager; - public static Configure configure() { - return new AzureConfigureImpl(); + public static Authenticated authenticate(ServiceClientCredentials credentials) { + return new AuthenticatedImpl(new RestClient + .Builder("https://management.azure.com") + .withCredentials(credentials) + .build()); + } + + public static Authenticated authenticate(RestClient restClient) { + return new AuthenticatedImpl(restClient); + } + + public static Configurable configure() { + return new ConfigurableImpl(); } - public static Azure authenticate(ServiceClientCredentials credentials) { - return new Azure(credentials); + public interface Configurable extends AzureConfigurable { + Authenticated authenticate(ServiceClientCredentials credentials); } - public static Azure authenticate(RestClient restClient) { - return new Azure(restClient); + private static final class ConfigurableImpl extends AzureConfigurableImpl implements Configurable { + @Override + public Authenticated authenticate(ServiceClientCredentials credentials) { + return Azure.authenticate(buildRestClient(credentials)); + } } - public interface Configure extends AzureConfigurable { - Azure authenticate(ServiceClientCredentials credentials); + public interface Authenticated { + Subscriptions subscriptions(); + Tenants tenants(); + Azure withSubscription(String subscriptionId); } - public interface Subscription { - ResourceGroups resourceGroups(); - GenericResources genericResources(); - StorageAccounts storageAccounts(); - Usages storageUsages(); - AvailabilitySets availabilitySets(); - VirtualMachines virtualMachines(); + private static final class AuthenticatedImpl implements Authenticated { + private RestClient restClient; + private ResourceManager.Authenticated resourceManagerAuthenticated; + + private AuthenticatedImpl(RestClient restClient) { + resourceManagerAuthenticated = ResourceManager.authenticate(restClient); + } + + @Override + public Subscriptions subscriptions() { + return resourceManagerAuthenticated.subscriptions(); + } + + @Override + public Tenants tenants() { + return resourceManagerAuthenticated.tenants(); + } + + @Override + public Azure withSubscription(String subscriptionId) { + return new Azure(restClient, subscriptionId); + } } public interface ResourceGroups extends SupportsListing, @@ -57,39 +94,43 @@ public interface ResourceGroups extends SupportsListing, } public interface ResourceGroup extends com.microsoft.azure.management.resources.ResourceGroup { + Deployments.InGroup deployments(); StorageAccounts.InGroup storageAccounts(); // VirtualMachinesInGroup virtualMachines(); - // AvailabilitySetsInGroup availabilitySets(); + AvailabilitySets.InGroup availabilitySets(); // VirtualNetworksInGroup virtualNetworks(); } - private Azure(ServiceClientCredentials credentials) { - this.restClient = new RestClient - .Builder("https://management.azure.com") - .withCredentials(credentials) - .build(); + private Azure(RestClient restClient, String subscriptionId) { + ResourceManagementClientImpl resourceManagementClient = new ResourceManagementClientImpl(restClient); + resourceManagementClient.setSubscriptionId(subscriptionId); + this.resourceGroups = new AzureResourceGroupsImpl(resourceManagementClient); + this.resourceManager = ResourceManager.authenticate(restClient).withSubscription(subscriptionId); + this.storageManager = StorageManager.authenticate(restClient, subscriptionId); + this.computeManager = ComputeManager.authenticate(restClient, subscriptionId); } - private Azure(RestClient restClient) { - this.restClient = restClient; + public ResourceGroups resourceGroups() { + return resourceGroups; } - public Subscriptions subscriptions() { - return resourceManager().subscriptions(); + public GenericResources genericResources() { + return resourceManager.genericResources(); } - public Tenants tenants() { - return resourceManager().tenants(); + public StorageAccounts storageAccounts() { + return storageManager.storageAccounts(); } - public Azure.Subscription withSubscription(String subscriptionId) { - return new AzureSubscriptionImpl(restClient, subscriptionId); + public Usages storageUsages() { + return storageManager.usages(); } - private ResourceManager.Authenticated resourceManager() { - if (resourceManager == null) { - resourceManager = ResourceManager.authenticate(this.restClient); - } - return resourceManager; + public AvailabilitySets availabilitySets() { + return computeManager.availabilitySets(); + } + + public VirtualMachines virtualMachines() { + return computeManager.virtualMachines(); } } diff --git a/azure/src/main/java/com/microsoft/azure/implementation/AzureConfigureImpl.java b/azure/src/main/java/com/microsoft/azure/implementation/AzureConfigureImpl.java deleted file mode 100644 index ec7fce3f1e96..000000000000 --- a/azure/src/main/java/com/microsoft/azure/implementation/AzureConfigureImpl.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.microsoft.azure.implementation; - -import com.microsoft.azure.management.resources.fluentcore.arm.implementation.AzureConfigurableImpl; -import com.microsoft.rest.credentials.ServiceClientCredentials; - -final class AzureConfigureImpl extends AzureConfigurableImpl - implements Azure.Configure { - AzureConfigureImpl() {} - - @Override - public Azure authenticate(ServiceClientCredentials credentials) { - this.restClient = this.restClientBuilder.withCredentials(credentials).build(); - return Azure.authenticate(this.restClient); - } -} diff --git a/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupImpl.java b/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupImpl.java index 07eb3715a12e..9159d1141636 100644 --- a/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupImpl.java +++ b/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupImpl.java @@ -2,32 +2,50 @@ import com.microsoft.azure.management.compute.AvailabilitySets; import com.microsoft.azure.management.compute.implementation.ComputeResourceConnector; -import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; +import com.microsoft.azure.management.resources.Deployments; import com.microsoft.azure.management.resources.ResourceGroup; +import com.microsoft.azure.management.resources.implementation.ARMResourceConnector; import com.microsoft.azure.management.resources.implementation.ResourceGroupImpl; +import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; import com.microsoft.azure.management.storage.StorageAccounts; import com.microsoft.azure.management.storage.implementation.StorageResourceConnector; -public class AzureResourceGroupImpl extends ResourceGroupImpl implements Azure.ResourceGroup { - private ResourceGroup resourceGroupCore; +final class AzureResourceGroupImpl extends ResourceGroupImpl implements Azure.ResourceGroup { + private final ARMResourceConnector armResourceConnector; + private final StorageResourceConnector storageResourceConnector; + private final ComputeResourceConnector computeResourceConnector; + // Collections + private Deployments.InGroup deployments; private StorageAccounts.InGroup storageAccounts; private AvailabilitySets.InGroup availabilitySets; - public AzureResourceGroupImpl(ResourceGroup resourceGroupCore, ResourceManagementClientImpl client) { - super(resourceGroupCore.inner(), client); - this.resourceGroupCore = resourceGroupCore; + AzureResourceGroupImpl(ResourceGroup resourceGroup, ResourceManagementClientImpl client) { + super(resourceGroup.inner(), client); + this.armResourceConnector = resourceGroup.connectToResource(new ARMResourceConnector.Builder()); + this.storageResourceConnector = resourceGroup.connectToResource(new StorageResourceConnector.Builder()); + this.computeResourceConnector = resourceGroup.connectToResource(new ComputeResourceConnector.Builder()); + } + + @Override + public Deployments.InGroup deployments() { + if (deployments == null) { + deployments = armResourceConnector.deployments(); + } + return deployments; } + @Override public StorageAccounts.InGroup storageAccounts() { if (storageAccounts == null) { - storageAccounts = resourceGroupCore.connectToResource(new StorageResourceConnector.Builder()).storageAccounts(); + storageAccounts = storageResourceConnector.storageAccounts(); } return storageAccounts; } + @Override public AvailabilitySets.InGroup availabilitySets() { if (availabilitySets == null) { - availabilitySets = resourceGroupCore.connectToResource(new ComputeResourceConnector.Builder()).availabilitySets(); + availabilitySets = computeResourceConnector.availabilitySets(); } return availabilitySets; } diff --git a/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupsImpl.java b/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupsImpl.java index ee13cb08f8c8..b423f841ea38 100644 --- a/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupsImpl.java +++ b/azure/src/main/java/com/microsoft/azure/implementation/AzureResourceGroupsImpl.java @@ -3,23 +3,22 @@ import com.microsoft.azure.CloudException; import com.microsoft.azure.Page; import com.microsoft.azure.PagedList; +import com.microsoft.azure.management.resources.ResourceGroup; import com.microsoft.azure.management.resources.ResourceGroups; import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter; import com.microsoft.azure.management.resources.implementation.ResourceGroupsImpl; import com.microsoft.azure.management.resources.implementation.api.PageImpl; import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; -import com.microsoft.azure.management.resources.ResourceGroup; import com.microsoft.rest.RestException; import java.io.IOException; -import java.util.List; -public class AzureResourceGroupsImpl implements Azure.ResourceGroups { +final class AzureResourceGroupsImpl implements Azure.ResourceGroups { private ResourceManagementClientImpl client; private ResourceGroups resourceGroupsCore; - public AzureResourceGroupsImpl(ResourceManagementClientImpl client) { + AzureResourceGroupsImpl(ResourceManagementClientImpl client) { this.client = client; this.resourceGroupsCore = new ResourceGroupsImpl(client); } diff --git a/azure/src/main/java/com/microsoft/azure/implementation/AzureSubscriptionImpl.java b/azure/src/main/java/com/microsoft/azure/implementation/AzureSubscriptionImpl.java deleted file mode 100644 index 10e08c482f2e..000000000000 --- a/azure/src/main/java/com/microsoft/azure/implementation/AzureSubscriptionImpl.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * 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.implementation; - -import com.microsoft.azure.management.compute.AvailabilitySets; -import com.microsoft.azure.management.compute.VirtualMachines; -import com.microsoft.azure.management.compute.implementation.ComputeManager; -import com.microsoft.azure.management.resources.GenericResources; -import com.microsoft.azure.management.resources.implementation.ResourceManager; -import com.microsoft.azure.management.resources.implementation.api.ResourceManagementClientImpl; -import com.microsoft.azure.management.storage.StorageAccounts; -import com.microsoft.azure.management.storage.Usages; -import com.microsoft.azure.management.storage.implementation.StorageManager; -import com.microsoft.rest.RestClient; - -final class AzureSubscriptionImpl - implements Azure.Subscription { - private final String subscriptionId; - private final RestClient restClient; - // service specific managers in subscription level. - private ResourceManager resourceClient; - private StorageManager storageClient; - private ComputeManager computeClient; - // SDK Clients - // TODO: Get rid of these - private ResourceManagementClientImpl resourceManagementClient; - // Fluent Collections - private Azure.ResourceGroups azureResourceGroups; - private AvailabilitySets availabilitySets; - - AzureSubscriptionImpl(RestClient restClient, String subscriptionId) { - this.restClient = restClient; - this.subscriptionId = subscriptionId; - } - - @Override - public Azure.ResourceGroups resourceGroups() { - if (azureResourceGroups == null) { - azureResourceGroups = new AzureResourceGroupsImpl(resourceManagementClient()); - } - return azureResourceGroups; - } - - @Override - public GenericResources genericResources() { - return resourceClient().genericResources(); - } - - @Override - public StorageAccounts storageAccounts() { - return storageClient().storageAccounts(); - } - - @Override - public Usages storageUsages() { - return storageClient().usages(); - } - - @Override - public AvailabilitySets availabilitySets() { - return computeClient().availabilitySets(); - } - - @Override - public VirtualMachines virtualMachines() { - return computeClient().virtualMachines(); - } - - private ResourceManager resourceClient() { - if (resourceClient == null) { - resourceClient = ResourceManager - .authenticate(restClient) - .useSubscription(subscriptionId); - } - return resourceClient; - } - - private StorageManager storageClient() { - if (storageClient == null) { - storageClient = StorageManager - .authenticate(restClient, subscriptionId); - } - return storageClient; - } - - private ComputeManager computeClient() { - if (computeClient == null) { - computeClient = ComputeManager - .authenticate(restClient, subscriptionId); - } - return computeClient; - } - - private ResourceManagementClientImpl resourceManagementClient() { - if (resourceManagementClient == null) { - resourceManagementClient = new ResourceManagementClientImpl(restClient); - resourceManagementClient.setSubscriptionId(subscriptionId); - } - return resourceManagementClient; - } -} diff --git a/azure/src/test/java/com/microsoft/azure/AzureTests.java b/azure/src/test/java/com/microsoft/azure/AzureTests.java index 212a3920e276..dfb596898271 100644 --- a/azure/src/test/java/com/microsoft/azure/AzureTests.java +++ b/azure/src/test/java/com/microsoft/azure/AzureTests.java @@ -5,7 +5,6 @@ import com.microsoft.azure.implementation.Azure; import com.microsoft.azure.management.resources.Subscriptions; import com.microsoft.azure.management.resources.fluentcore.arm.Region; -import com.microsoft.azure.management.storage.StorageAccounts; import com.microsoft.azure.management.storage.StorageAccount; import com.microsoft.azure.management.storage.implementation.api.AccountType; import com.microsoft.rest.credentials.ServiceClientCredentials; @@ -21,22 +20,18 @@ public class AzureTests { System.getenv("secret"), AzureEnvironment.AZURE); private static final String subscriptionId = System.getenv("resourceClient-id"); - private Subscriptions subscriptions; - private Azure.ResourceGroups resourceGroups; - private StorageAccounts storageAccounts; + private Azure azure; @Before public void setup() throws Exception { - Azure azure = Azure.configure() + Azure.Authenticated azureAuthed = Azure.configure() .withLogLevel(HttpLoggingInterceptor.Level.BASIC) .withUserAgent("AzureTests") .authenticate(credentials); - subscriptions = azure.subscriptions(); - Azure.Subscription sub = azure.withSubscription(subscriptionId); - resourceGroups = sub.resourceGroups(); - storageAccounts = sub.storageAccounts(); + subscriptions = azureAuthed.subscriptions(); + azure = azureAuthed.withSubscription(subscriptionId); } @Test @@ -46,17 +41,17 @@ public void listSubscriptions() throws Exception { @Test public void listResourceGroups() throws Exception { - Assert.assertTrue(0 < resourceGroups.list().size()); + Assert.assertTrue(0 < azure.resourceGroups().list().size()); } @Test public void listStorageAccounts() throws Exception { - Assert.assertTrue(0 < storageAccounts.list().size()); + Assert.assertTrue(0 < azure.storageAccounts().list().size()); } @Test public void createStorageAccount() throws Exception { - StorageAccount storageAccount = storageAccounts.define("my-stg1") + StorageAccount storageAccount = azure.storageAccounts().define("my-stg1") .withRegion(Region.ASIA_EAST) .withNewGroup() .withAccountType(AccountType.PREMIUM_LRS) @@ -67,7 +62,7 @@ public void createStorageAccount() throws Exception { @Test public void createStorageAccountInResourceGroupContext() throws Exception { - StorageAccount storageAccount = resourceGroups.get("my-grp") + StorageAccount storageAccount = azure.resourceGroups().get("my-grp") .storageAccounts() .define("my-stg2") .withAccountType(AccountType.PREMIUM_LRS)