/**
* 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.dns.implementation;
import com.microsoft.azure.management.apigeneration.LangDefinition;
import com.microsoft.azure.management.dns.ARecordSets;
import com.microsoft.azure.management.dns.AaaaRecordSets;
import com.microsoft.azure.management.dns.CNameRecordSets;
import com.microsoft.azure.management.dns.DnsZone;
import com.microsoft.azure.management.dns.MXRecordSets;
import com.microsoft.azure.management.dns.NSRecordSets;
import com.microsoft.azure.management.dns.PtrRecordSets;
import com.microsoft.azure.management.dns.RecordType;
import com.microsoft.azure.management.dns.SoaRecordSet;
import com.microsoft.azure.management.dns.SrvRecordSets;
import com.microsoft.azure.management.dns.TxtRecordSets;
import com.microsoft.azure.management.resources.fluentcore.arm.models.implementation.GroupableResourceImpl;
import rx.Observable;
import rx.functions.Func1;
import java.util.List;
/**
* Implementation for {@link DnsZone}.
*/
@LangDefinition
public class DnsZoneImpl
extends GroupableResourceImpl<
DnsZone,
ZoneInner,
DnsZoneImpl,
DnsZoneManager>
implements
DnsZone,
DnsZone.Definition,
DnsZone.Update {
private ARecordSets aRecordSets;
private AaaaRecordSets aaaaRecordSets;
private CNameRecordSets cnameRecordSets;
private MXRecordSets mxRecordSets;
private NSRecordSets nsRecordSets;
private PtrRecordSets ptrRecordSets;
private SrvRecordSets srvRecordSets;
private TxtRecordSets txtRecordSets;
private DnsRecordSetsImpl recordSetsImpl;
DnsZoneImpl(String name, final ZoneInner innerModel, final DnsZoneManager manager) {
super(name, innerModel, manager);
this.recordSetsImpl = new DnsRecordSetsImpl(this);
initRecordSets();
}
@Override
public long maxNumberOfRecordSets() {
return this.inner().maxNumberOfRecordSets();
}
@Override
public long numberOfRecordSets() {
return this.inner().numberOfRecordSets();
}
@Override
public List<String> nameServers() {
return this.inner().nameServers();
}
@Override
public ARecordSets aRecordSets() {
return this.aRecordSets;
}
@Override
public AaaaRecordSets aaaaRecordSets() {
return this.aaaaRecordSets;
}
@Override
public CNameRecordSets cNameRecordSets() {
return this.cnameRecordSets;
}
@Override
public MXRecordSets mxRecordSets() {
return this.mxRecordSets;
}
@Override
public NSRecordSets nsRecordSets() {
return this.nsRecordSets;
}
@Override
public PtrRecordSets ptrRecordSets() {
return this.ptrRecordSets;
}
@Override
public SrvRecordSets srvRecordSets() {
return this.srvRecordSets;
}
@Override
public TxtRecordSets txtRecordSets() {
return this.txtRecordSets;
}
@Override
public SoaRecordSet getSoaRecordSet() {
RecordSetInner inner = this.manager().inner().recordSets().get(this.resourceGroupName(), this.name(), "@", RecordType.SOA);
return new SoaRecordSetImpl(this, inner);
}
// Setters
@Override
public DnsRecordSetImpl defineARecordSet(String name) {
return recordSetsImpl.defineARecordSet(name);
}
@Override
public DnsRecordSetImpl defineAaaaRecordSet(String name) {
return recordSetsImpl.defineAaaaRecordSet(name);
}
@Override
public DnsZoneImpl withCNameRecordSet(String name, String alias) {
recordSetsImpl.withCNameRecordSet(name, alias);
return this;
}
@Override
public DnsRecordSetImpl defineMXRecordSet(String name) {
return recordSetsImpl.defineMXRecordSet(name);
}
@Override
public DnsRecordSetImpl defineNSRecordSet(String name) {
return recordSetsImpl.defineNSRecordSet(name);
}
@Override
public DnsRecordSetImpl definePtrRecordSet(String name) {
return recordSetsImpl.definePtrRecordSet(name);
}
@Override
public DnsRecordSetImpl defineSrvRecordSet(String name) {
return recordSetsImpl.defineSrvRecordSet(name);
}
@Override
public DnsRecordSetImpl defineTxtRecordSet(String name) {
return recordSetsImpl.defineTxtRecordSet(name);
}
@Override
public DnsRecordSetImpl updateARecordSet(String name) {
return recordSetsImpl.updateARecordSet(name);
}
@Override
public DnsRecordSetImpl updateAaaaRecordSet(String name) {
return recordSetsImpl.updateAaaaRecordSet(name);
}
@Override
public DnsRecordSetImpl updateMXRecordSet(String name) {
return recordSetsImpl.updateMXRecordSet(name);
}
@Override
public DnsRecordSetImpl updateNSRecordSet(String name) {
return recordSetsImpl.updateNSRecordSet(name);
}
@Override
public DnsRecordSetImpl updatePtrRecordSet(String name) {
return recordSetsImpl.updatePtrRecordSet(name);
}
@Override
public DnsRecordSetImpl updateSrvRecordSet(String name) {
return recordSetsImpl.updateSrvRecordSet(name);
}
@Override
public DnsRecordSetImpl updateTxtRecordSet(String name) {
return recordSetsImpl.updateTxtRecordSet(name);
}
@Override
public DnsRecordSetImpl updateSoaRecord() {
return recordSetsImpl.updateSoaRecordSet();
}
@Override
public DnsZoneImpl withoutARecordSet(String name) {
recordSetsImpl.withoutARecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutAaaaRecordSet(String name) {
recordSetsImpl.withoutAaaaRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutCNameRecordSet(String name) {
recordSetsImpl.withoutCNameRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutMXRecordSet(String name) {
recordSetsImpl.withoutMXRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutNSRecordSet(String name) {
recordSetsImpl.withoutNSRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutPtrRecordSet(String name) {
recordSetsImpl.withoutPtrRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutSrvRecordSet(String name) {
recordSetsImpl.withoutSrvRecordSet(name);
return this;
}
@Override
public DnsZoneImpl withoutTxtRecordSet(String name) {
recordSetsImpl.withoutTxtRecordSet(name);
return this;
}
@Override
public Observable<DnsZone> createResourceAsync() {
final DnsZoneImpl self = this;
return this.manager().inner().zones().createOrUpdateAsync(this.resourceGroupName(), this.name(), this.inner())
.map(innerToFluentMap(this))
.flatMap(new Func1<DnsZone, Observable<? extends DnsZone>>() {
@Override
public Observable<? extends DnsZone> call(DnsZone dnsZone) {
return self.recordSetsImpl.commitAndGetAllAsync()
.map(new Func1<List<DnsRecordSetImpl>, DnsZone>() {
@Override
public DnsZone call(List<DnsRecordSetImpl> recordSets) {
return self;
}
});
}
});
}
@Override
public Observable<DnsZone> refreshAsync() {
return super.refreshAsync().map(new Func1<DnsZone, DnsZone>() {
@Override
public DnsZone call(DnsZone dnsZone) {
DnsZoneImpl impl = (DnsZoneImpl) dnsZone;
impl.initRecordSets();
return impl;
}
});
}
@Override
protected Observable<ZoneInner> getInnerAsync() {
return this.manager().inner().zones().getByResourceGroupAsync(this.resourceGroupName(), this.name());
}
private void initRecordSets() {
this.aRecordSets = new ARecordSetsImpl(this);
this.aaaaRecordSets = new AaaaRecordSetsImpl(this);
this.cnameRecordSets = new CNameRecordSetsImpl(this);
this.mxRecordSets = new MXRecordSetsImpl(this);
this.nsRecordSets = new NSRecordSetsImpl(this);
this.ptrRecordSets = new PtrRecordSetsImpl(this);
this.srvRecordSets = new SrvRecordSetsImpl(this);
this.txtRecordSets = new TxtRecordSetsImpl(this);
this.recordSetsImpl.clearPendingOperations();
}
}