/** * 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.compute.implementation; import com.microsoft.azure.PagedList; import com.microsoft.azure.SubResource; import com.microsoft.azure.management.apigeneration.LangDefinition; import com.microsoft.azure.management.compute.AvailabilitySet; import com.microsoft.azure.management.compute.AvailabilitySetSkuTypes; import com.microsoft.azure.management.compute.InstanceViewStatus; import com.microsoft.azure.management.compute.Sku; import com.microsoft.azure.management.compute.VirtualMachineSize; import com.microsoft.azure.management.resources.fluentcore.arm.models.implementation.GroupableResourceImpl; import com.microsoft.azure.management.resources.fluentcore.utils.Utils; import rx.Observable; import rx.functions.Func1; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; /** * The implementation for AvailabilitySet and its create and update interfaces. */ @LangDefinition class AvailabilitySetImpl extends GroupableResourceImpl< AvailabilitySet, AvailabilitySetInner, AvailabilitySetImpl, ComputeManager> implements AvailabilitySet, AvailabilitySet.Definition, AvailabilitySet.Update { private Set<String> idOfVMsInSet; AvailabilitySetImpl(String name, AvailabilitySetInner innerModel, final ComputeManager computeManager) { super(name, innerModel, computeManager); } @Override public int updateDomainCount() { return Utils.toPrimitiveInt(this.inner().platformUpdateDomainCount()); } @Override public int faultDomainCount() { return Utils.toPrimitiveInt(this.inner().platformFaultDomainCount()); } @Override public AvailabilitySetSkuTypes sku() { if (this.inner().sku() != null && this.inner().sku().name() != null) { return AvailabilitySetSkuTypes.fromString(this.inner().sku().name()); } return null; } @Override public Set<String> virtualMachineIds() { if (idOfVMsInSet == null) { idOfVMsInSet = new HashSet<>(); for (SubResource resource : this.inner().virtualMachines()) { idOfVMsInSet.add(resource.id()); } } return Collections.unmodifiableSet(idOfVMsInSet); } @Override public List<InstanceViewStatus> statuses() { return Collections.unmodifiableList(this.inner().statuses()); } @Override public PagedList<VirtualMachineSize> listVirtualMachineSizes() { return Utils.toPagedList(this.manager() .inner() .availabilitySets() .listAvailableSizes(this.resourceGroupName(), this.name()), new Func1<VirtualMachineSizeInner, VirtualMachineSize>() { @Override public VirtualMachineSize call(VirtualMachineSizeInner inner) { return new VirtualMachineSizeImpl(inner); } }); } @Override public Observable<AvailabilitySet> refreshAsync() { return super.refreshAsync().map(new Func1<AvailabilitySet, AvailabilitySet>() { @Override public AvailabilitySet call(AvailabilitySet availabilitySet) { AvailabilitySetImpl impl = (AvailabilitySetImpl) availabilitySet; impl.idOfVMsInSet = null; return impl; } }); } @Override protected Observable<AvailabilitySetInner> getInnerAsync() { return this.manager().inner().availabilitySets().getByResourceGroupAsync(this.resourceGroupName(), this.name()); } @Override public AvailabilitySetImpl withUpdateDomainCount(int updateDomainCount) { this.inner().withPlatformUpdateDomainCount(updateDomainCount); return this; } @Override public AvailabilitySetImpl withFaultDomainCount(int faultDomainCount) { this.inner().withPlatformFaultDomainCount(faultDomainCount); return this; } @Override public AvailabilitySetImpl withSku(AvailabilitySetSkuTypes skuType) { if (this.inner().sku() == null) { this.inner().withSku(new Sku()); } this.inner().sku().withName(skuType.toString()); return this; } // CreateUpdateTaskGroup.ResourceCreator.createResourceAsync implementation @Override public Observable<AvailabilitySet> createResourceAsync() { final AvailabilitySetImpl self = this; if (this.inner().platformFaultDomainCount() == null) { this.inner().withPlatformFaultDomainCount(2); } if (this.inner().platformUpdateDomainCount() == null) { this.inner().withPlatformUpdateDomainCount(5); } return this.manager().inner().availabilitySets().createOrUpdateAsync(resourceGroupName(), name(), inner()) .map(new Func1<AvailabilitySetInner, AvailabilitySet>() { @Override public AvailabilitySet call(AvailabilitySetInner availabilitySetInner) { self.setInner(availabilitySetInner); idOfVMsInSet = null; return self; } }); } }