Skip to content

Commit

Permalink
Enabling streaming on createAsync
Browse files Browse the repository at this point in the history
  • Loading branch information
anuchandy committed Dec 5, 2016
1 parent 79b6f27 commit 47d469b
Show file tree
Hide file tree
Showing 23 changed files with 361 additions and 166 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.microsoft.azure.management.keyvault.Vault;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import com.microsoft.azure.management.resources.fluentcore.arm.models.implementation.GroupableResourceImpl;
import com.microsoft.azure.management.resources.fluentcore.model.Indexable;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import com.microsoft.azure.management.appservice.AppServiceCertificateKeyVaultBinding;
import com.microsoft.azure.management.appservice.AppServiceCertificateOrder;
Expand Down Expand Up @@ -276,7 +277,7 @@ public AppServiceCertificateOrderImpl withExistingKeyVault(Vault vault) {

@Override
public AppServiceCertificateOrderImpl withNewKeyVault(String vaultName, Region region) {
this.bindingVault = myManager.keyVaultManager().vaults().define(vaultName)
Observable<Indexable> resourceStream = myManager.keyVaultManager().vaults().define(vaultName)
.withRegion(region)
.withExistingResourceGroup(resourceGroupName())
.defineAccessPolicy()
Expand All @@ -288,6 +289,7 @@ public AppServiceCertificateOrderImpl withNewKeyVault(String vaultName, Region r
.allowSecretPermissions(SecretPermissions.GET)
.attach()
.createAsync();
this.bindingVault = Utils.rootResource(resourceStream);
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.microsoft.azure.management.appservice.HostNameBinding;
import com.microsoft.azure.management.appservice.HostNameType;
import com.microsoft.azure.management.appservice.WebAppBase;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import com.microsoft.rest.ServiceCall;
import com.microsoft.rest.ServiceCallback;
import com.microsoft.rest.ServiceResponse;
Expand Down Expand Up @@ -150,29 +151,20 @@ public HostNameBinding create() {
return this;
}

@Override
public Observable<Indexable> createAsyncStreaming() {
// Note: This type is not inheriting from CreatableImpl hence default streaming is not available.
return createAsync().map(new Func1<HostNameBinding, Indexable>() {
@Override
public Indexable call(HostNameBinding hostNameBinding) {
return hostNameBinding;
}
});
}

@Override
public ServiceCall<HostNameBinding> createAsync(ServiceCallback<HostNameBinding> callback) {
return ServiceCall.create(createAsync().map(new Func1<HostNameBinding, ServiceResponse<HostNameBinding>>() {
@Override
public ServiceResponse<HostNameBinding> call(HostNameBinding hostNameBinding) {
return new ServiceResponse<>(hostNameBinding, null);
}
}), callback);
Observable<Indexable> indexableObservable = createAsync();
return ServiceCall.create(Utils.<HostNameBinding>rootResource(indexableObservable)
.map(new Func1<HostNameBinding, ServiceResponse<HostNameBinding>>() {
@Override
public ServiceResponse<HostNameBinding> call(HostNameBinding hostNameBinding) {
return new ServiceResponse<>(hostNameBinding, null);
}
}), callback);
}

@Override
public Observable<HostNameBinding> createAsync() {
public Observable<Indexable> createAsync() {
final HostNameBinding self = this;
Func1<HostNameBindingInner, HostNameBinding> mapper = new Func1<HostNameBindingInner, HostNameBinding>() {
@Override
Expand All @@ -181,11 +173,23 @@ public HostNameBinding call(HostNameBindingInner hostNameBindingInner) {
return self;
}
};

Observable<HostNameBinding> hostNameBindingObservable;
if (parent instanceof DeploymentSlot) {
return client.createOrUpdateHostNameBindingSlotAsync(parent().resourceGroupName(), ((DeploymentSlot) parent).parent().name(), name, parent().name(), inner()).map(mapper);
hostNameBindingObservable = client.createOrUpdateHostNameBindingSlotAsync(parent().resourceGroupName(),
((DeploymentSlot) parent).parent().name(),
name,
parent().name(), inner()).map(mapper);
} else {
return client.createOrUpdateHostNameBindingAsync(parent().resourceGroupName(), parent().name(), name, inner()).map(mapper);
hostNameBindingObservable = client.createOrUpdateHostNameBindingAsync(parent().resourceGroupName(), parent().name(), name, inner()).map(mapper);
}

return hostNameBindingObservable.map(new Func1<HostNameBinding, Indexable>() {
@Override
public Indexable call(HostNameBinding hostNameBinding) {
return hostNameBinding;
}
});
}

private String normalizeHostNameBindingName(String hostname, String domainName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
import com.microsoft.azure.management.apigeneration.Fluent;
import com.microsoft.azure.management.keyvault.Vault;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import com.microsoft.azure.management.resources.fluentcore.model.Indexable;
import com.microsoft.azure.management.resources.fluentcore.model.implementation.IndexableWrapperImpl;
import com.microsoft.azure.management.appservice.AppServiceCertificate;
import com.microsoft.azure.management.appservice.AppServiceCertificateOrder;
import com.microsoft.azure.management.appservice.HostNameSslBinding;
import com.microsoft.azure.management.appservice.HostNameSslState;
import com.microsoft.azure.management.appservice.SslState;
import com.microsoft.azure.management.appservice.WebAppBase;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
Expand Down Expand Up @@ -87,12 +89,12 @@ public FluentImplT attach() {
@Override
public HostNameSslBindingImpl<FluentT, FluentImplT> withPfxCertificateToUpload(final File pfxFile, final String password) {
String thumbprint = getCertificateThumbprint(pfxFile.getPath(), password);
newCertificate = manager.certificates().define(getCertificateUniqueName(thumbprint, parent().region()))
newCertificate = Utils.rootResource(manager.certificates().define(getCertificateUniqueName(thumbprint, parent().region()))
.withRegion(parent().region())
.withExistingResourceGroup(parent().resourceGroupName())
.withPfxFile(pfxFile)
.withPfxPassword(password)
.createAsync();
.createAsync());
return this;
}

Expand All @@ -108,11 +110,12 @@ public HostNameSslBindingImpl<FluentT, FluentImplT> withNewStandardSslCertificat

@Override
public HostNameSslBindingImpl<FluentT, FluentImplT> withExistingAppServiceCertificateOrder(final AppServiceCertificateOrder certificateOrder) {
newCertificate = manager.certificates().define(getCertificateUniqueName(certificateOrder.signedCertificate().thumbprint(), parent().region()))
Observable<Indexable> resourceStream = manager.certificates().define(getCertificateUniqueName(certificateOrder.signedCertificate().thumbprint(), parent().region()))
.withRegion(parent().region())
.withExistingResourceGroup(parent().resourceGroupName())
.withExistingCertificateOrder(certificateOrder)
.createAsync();
newCertificate = Utils.rootResource(resourceStream);
return this;
}

Expand Down Expand Up @@ -155,31 +158,37 @@ public HostNameSslBindingImpl<FluentT, FluentImplT> forHostname(String hostname)

@Override
public HostNameSslBindingImpl<FluentT, FluentImplT> withExistingKeyVault(final Vault vault) {
newCertificate = certificateInDefinition.withExistingKeyVault(vault).createAsync()
Observable<AppServiceCertificateOrder> appServiceCertificateOrderObservable = Utils.rootResource(certificateInDefinition
.withExistingKeyVault(vault)
.createAsync());
this.newCertificate = appServiceCertificateOrderObservable
.flatMap(new Func1<AppServiceCertificateOrder, Observable<AppServiceCertificate>>() {
@Override
public Observable<AppServiceCertificate> call(AppServiceCertificateOrder appServiceCertificateOrder) {
return manager.certificates().define(appServiceCertificateOrder.name())
.withRegion(parent().regionName())
.withExistingResourceGroup(parent().resourceGroupName())
.withExistingCertificateOrder(appServiceCertificateOrder)
.createAsync();
}
});
@Override
public Observable<AppServiceCertificate> call(AppServiceCertificateOrder appServiceCertificateOrder) {
return Utils.rootResource(manager.certificates().define(appServiceCertificateOrder.name())
.withRegion(parent().regionName())
.withExistingResourceGroup(parent().resourceGroupName())
.withExistingCertificateOrder(appServiceCertificateOrder)
.createAsync());
}
});
return this;
}

@Override
public HostNameSslBindingImpl<FluentT, FluentImplT> withNewKeyVault(String vaultName) {
newCertificate = certificateInDefinition.withNewKeyVault(vaultName, parent().region()).createAsync()
Observable<AppServiceCertificateOrder> appServiceCertificateOrderObservable = Utils.rootResource(certificateInDefinition
.withNewKeyVault(vaultName, parent().region())
.createAsync());
this.newCertificate = appServiceCertificateOrderObservable
.flatMap(new Func1<AppServiceCertificateOrder, Observable<AppServiceCertificate>>() {
@Override
public Observable<AppServiceCertificate> call(AppServiceCertificateOrder appServiceCertificateOrder) {
return manager.certificates().define(appServiceCertificateOrder.name())
return Utils.rootResource(manager.certificates().define(appServiceCertificateOrder.name())
.withRegion(parent().regionName())
.withExistingResourceGroup(parent().resourceGroupName())
.withExistingCertificateOrder(appServiceCertificateOrder)
.createAsync();
.createAsync());
}
});
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ public Observable<SiteInner> call(String s) {
public Observable<SiteInner> call(final SiteInner site) {
List<Observable<HostNameBinding>> bindingObservables = new ArrayList<>();
for (HostNameBindingImpl<FluentT, FluentImplT> binding: hostNameBindingsToCreate.values()) {
bindingObservables.add(binding.createAsync());
bindingObservables.add(Utils.<HostNameBinding>rootResource(binding.createAsync()));
}
for (String binding: hostNameBindingsToDelete) {
bindingObservables.add(deleteHostNameBinding(binding).map(new Func1<Object, HostNameBinding>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@
import com.microsoft.azure.CloudException;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import com.microsoft.azure.management.resources.fluentcore.arm.ResourceUtils;
import com.microsoft.azure.management.resources.fluentcore.model.Indexable;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import org.joda.time.DateTime;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import rx.Observable;

import java.util.List;

Expand All @@ -35,11 +38,13 @@ public static void cleanup() throws Exception {
@Test
public void canCRUDBatchAccount() throws Exception {
// Create
BatchAccount batchAccount = batchManager.batchAccounts()
Observable<Indexable> resourceStream = batchManager.batchAccounts()
.define(BATCH_NAME)
.withRegion(Region.US_CENTRAL)
.withNewResourceGroup(RG_NAME)
.createAsync()
.createAsync();

BatchAccount batchAccount = Utils.<BatchAccount>rootResource(resourceStream)
.toBlocking().last();
Assert.assertEquals(RG_NAME, batchAccount.resourceGroupName());
Assert.assertNull(batchAccount.autoStorage());
Expand Down Expand Up @@ -177,16 +182,18 @@ public void canCreateBatchAccountWithApplication() throws Exception {
boolean allowUpdates = true;

// Create
BatchAccount batchAccount = batchManager.batchAccounts()
Observable<Indexable> resourceStream = batchManager.batchAccounts()
.define(BATCH_NAME)
.withRegion(Region.US_CENTRAL)
.withNewResourceGroup(RG_NAME)
.defineNewApplication(applicationId)
.withDisplayName(applicationDisplayName)
.withAllowUpdates(allowUpdates)
.attach()
.withDisplayName(applicationDisplayName)
.withAllowUpdates(allowUpdates)
.attach()
.withNewStorageAccount(SA_NAME)
.createAsync()
.createAsync();

BatchAccount batchAccount = Utils.<BatchAccount>rootResource(resourceStream)
.toBlocking().last();
Assert.assertEquals(RG_NAME, batchAccount.resourceGroupName());
Assert.assertNotNull(batchAccount.autoStorage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import com.microsoft.azure.management.resources.fluentcore.model.Creatable;
import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter;
import com.microsoft.azure.management.resources.fluentcore.utils.ResourceNamer;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import com.microsoft.azure.management.resources.implementation.PageImpl;
import com.microsoft.azure.management.storage.StorageAccount;
import com.microsoft.azure.management.storage.implementation.StorageManager;
Expand Down Expand Up @@ -1059,11 +1060,11 @@ public StorageAccount call(StorageAccount storageAccount) {
.map(storageAccountFunc);
} else if (osDiskRequiresImplicitStorageAccountCreation()
|| dataDisksRequiresImplicitStorageAccountCreation()) {
return this.storageManager.storageAccounts()
return Utils.<StorageAccount>rootResource(this.storageManager.storageAccounts()
.define(this.namer.randomName("stg", 24))
.withRegion(this.regionName())
.withExistingResourceGroup(this.resourceGroupName())
.createAsync()
.createAsync())
.map(storageAccountFunc);
}
return Observable.just(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.microsoft.azure.management.resources.fluentcore.model.Creatable;
import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter;
import com.microsoft.azure.management.resources.fluentcore.utils.ResourceNamer;
import com.microsoft.azure.management.resources.fluentcore.utils.Utils;
import com.microsoft.azure.management.storage.StorageAccount;
import com.microsoft.azure.management.storage.implementation.StorageManager;
import rx.Observable;
Expand Down Expand Up @@ -949,11 +950,11 @@ private Observable<Void> handleOSDiskContainersAsync() {
if (this.isInCreateMode()
&& this.creatableStorageAccountKeys.isEmpty()
&& this.existingStorageAccountsToAssociate.isEmpty()) {
return this.storageManager.storageAccounts()
return Utils.<StorageAccount>rootResource(this.storageManager.storageAccounts()
.define(this.namer.randomName("stg", 24))
.withRegion(this.regionName())
.withExistingResourceGroup(this.resourceGroupName())
.createAsync()
.createAsync())
.map(new Func1<StorageAccount, Void>() {
@Override
public Void call(StorageAccount storageAccount) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static void createClients() {
RestClient restClient = new RestClient.Builder()
.withBaseUrl(AzureEnvironment.AZURE, AzureEnvironment.Endpoint.RESOURCE_MANAGER)
.withCredentials(credentials)
.withLogLevel(HttpLoggingInterceptor.Level.BODY)
.withLogLevel(HttpLoggingInterceptor.Level.NONE)
.build();

resourceManager = ResourceManager
Expand Down
Loading

0 comments on commit 47d469b

Please sign in to comment.