
com.google.cloud.dns.ZoneInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gcloud-java-dns Show documentation
Show all versions of gcloud-java-dns Show documentation
Java idiomatic client for Google Cloud DNS.
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.cloud.dns;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.api.services.dns.model.ManagedZone;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.joda.time.DateTime;
import org.joda.time.format.ISODateTimeFormat;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.List;
import java.util.Objects;
/**
* A {@code Zone} represents a DNS zone hosted by the Google Cloud DNS service. A zone is a subtree
* of the DNS namespace under one administrative responsibility. See Google Cloud DNS documentation for
* more information.
*/
public class ZoneInfo implements Serializable {
private static final long serialVersionUID = -5313169712036079818L;
private final String name;
private final String generatedId;
private final Long creationTimeMillis;
private final String dnsName;
private final String description;
private final String nameServerSet;
private final List nameServers;
/**
* Builder for {@code ZoneInfo}.
*/
public abstract static class Builder {
/**
* Sets a mandatory user-provided name for the zone. It must be unique within the project.
*/
public abstract Builder name(String name);
/**
* Sets service-generated id for the zone.
*/
abstract Builder generatedId(String generatedId);
/**
* Sets the time when this zone was created.
*/
abstract Builder creationTimeMillis(long creationTimeMillis);
/**
* Sets a mandatory DNS name of this zone, for instance "example.com.".
*/
public abstract Builder dnsName(String dnsName);
/**
* Sets a mandatory description for this zone. The value is a string of at most 1024 characters
* which has no effect on the zone's function.
*/
public abstract Builder description(String description);
/**
* Optionally specifies the NameServerSet for this zone. A NameServerSet is a set of DNS name
* servers that all host the same zones. Most users will not need to specify this value.
*/
abstract Builder nameServerSet(String nameServerSet);
// this should not be included in tooling as per the service owners
/**
* Sets a list of servers that hold the information about the zone. This information is provided
* by Google Cloud DNS and is read only.
*/
abstract Builder nameServers(List nameServers);
/**
* Builds the instance of {@code ZoneInfo} based on the information set by this builder.
*/
public abstract ZoneInfo build();
}
static class BuilderImpl extends Builder {
private String name;
private String generatedId;
private Long creationTimeMillis;
private String dnsName;
private String description;
private String nameServerSet;
private List nameServers;
private BuilderImpl(String name) {
this.name = checkNotNull(name);
}
/**
* Creates a builder from an existing ZoneInfo object.
*/
BuilderImpl(ZoneInfo info) {
this.name = info.name;
this.generatedId = info.generatedId;
this.creationTimeMillis = info.creationTimeMillis;
this.dnsName = info.dnsName;
this.description = info.description;
this.nameServerSet = info.nameServerSet;
if (info.nameServers != null) {
this.nameServers = ImmutableList.copyOf(info.nameServers);
}
}
@Override
public Builder name(String name) {
this.name = checkNotNull(name);
return this;
}
@Override
Builder generatedId(String generatedId) {
this.generatedId = generatedId;
return this;
}
@Override
Builder creationTimeMillis(long creationTimeMillis) {
this.creationTimeMillis = creationTimeMillis;
return this;
}
@Override
public Builder dnsName(String dnsName) {
this.dnsName = checkNotNull(dnsName);
return this;
}
@Override
public Builder description(String description) {
this.description = checkNotNull(description);
return this;
}
@Override
Builder nameServerSet(String nameServerSet) {
this.nameServerSet = checkNotNull(nameServerSet);
return this;
}
@Override
Builder nameServers(List nameServers) {
checkNotNull(nameServers);
this.nameServers = Lists.newLinkedList(nameServers);
return this;
}
@Override
public ZoneInfo build() {
return new ZoneInfo(this);
}
}
ZoneInfo(BuilderImpl builder) {
this.name = builder.name;
this.generatedId = builder.generatedId;
this.creationTimeMillis = builder.creationTimeMillis;
this.dnsName = builder.dnsName;
this.description = builder.description;
this.nameServerSet = builder.nameServerSet;
this.nameServers = builder.nameServers == null
? null : ImmutableList.copyOf(builder.nameServers);
}
/**
* Returns a ZoneInfo object with assigned {@code name}, {@code dnsName} and {@code description}.
*/
public static ZoneInfo of(String name, String dnsName, String description) {
return new BuilderImpl(name).dnsName(dnsName).description(description).build();
}
/**
* Returns the user-defined name of the zone.
*/
public String name() {
return name;
}
/**
* Returns the service-generated id for this zone.
*/
public String generatedId() {
return generatedId;
}
/**
* Returns the time when this zone was created on the server.
*/
public Long creationTimeMillis() {
return creationTimeMillis;
}
/**
* Returns the DNS name of this zone, for instance "example.com.".
*/
public String dnsName() {
return dnsName;
}
/**
* Returns the description of this zone.
*/
public String description() {
return description;
}
/**
* Returns the optionally specified set of DNS name servers that all host this zone. This value is
* set only for specific use cases and is left empty for vast majority of users.
*/
public String nameServerSet() {
return nameServerSet;
}
/**
* The nameservers that the zone should be delegated to. This is defined by the Google DNS cloud.
*/
public List nameServers() {
return nameServers == null ? ImmutableList.of() : nameServers;
}
/**
* Returns a builder for {@code ZoneInfo} prepopulated with the metadata of this zone.
*/
public Builder toBuilder() {
return new BuilderImpl(this);
}
ManagedZone toPb() {
ManagedZone pb =
new ManagedZone();
pb.setDescription(this.description());
pb.setDnsName(this.dnsName());
if (this.generatedId() != null) {
pb.setId(new BigInteger(this.generatedId()));
}
pb.setName(this.name());
pb.setNameServers(this.nameServers); // do use real attribute value which may be null
pb.setNameServerSet(this.nameServerSet());
if (this.creationTimeMillis() != null) {
pb.setCreationTime(ISODateTimeFormat.dateTime()
.withZoneUTC()
.print(this.creationTimeMillis()));
}
return pb;
}
static ZoneInfo fromPb(ManagedZone pb) {
Builder builder = new BuilderImpl(pb.getName());
if (pb.getDescription() != null) {
builder.description(pb.getDescription());
}
if (pb.getDnsName() != null) {
builder.dnsName(pb.getDnsName());
}
if (pb.getId() != null) {
builder.generatedId(pb.getId().toString());
}
if (pb.getNameServers() != null) {
builder.nameServers(pb.getNameServers());
}
if (pb.getNameServerSet() != null) {
builder.nameServerSet(pb.getNameServerSet());
}
if (pb.getCreationTime() != null) {
builder.creationTimeMillis(DateTime.parse(pb.getCreationTime()).getMillis());
}
return builder.build();
}
@Override
public boolean equals(Object obj) {
return obj == this
|| obj != null
&& obj.getClass().equals(ZoneInfo.class)
&& Objects.equals(toPb(), ((ZoneInfo) obj).toPb());
}
@Override
public int hashCode() {
return Objects.hash(name, generatedId, creationTimeMillis, dnsName, description, nameServerSet,
nameServers);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name())
.add("generatedId", generatedId())
.add("description", description())
.add("dnsName", dnsName())
.add("nameServerSet", nameServerSet())
.add("nameServers", nameServers())
.add("creationTimeMillis", creationTimeMillis())
.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy