blob: af38c6f304db79022c9e67ea88e3162fa7771637 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.jclouds.glesys.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.util.Date;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.MoreObjects.ToStringHelper;
/**
* Domain data for a Glesys account.
*
* @see <a href= "https://customer.glesys.com/api.php?a=doc#domain_list" />
*/
public class Domain {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromDomain(this);
}
public abstract static class Builder<T extends Builder<T>> {
protected abstract T self();
protected String domainName;
protected Date createTime;
protected int recordCount;
protected boolean useGlesysNameServer;
protected String primaryNameServer;
protected String responsiblePerson;
protected int ttl;
protected int refresh;
protected int retry;
protected int expire;
protected int minimum;
/**
* @see Domain#getName()
*/
public T domainName(String domainName) {
this.domainName = checkNotNull(domainName, "domainName");
return self();
}
/**
* @see Domain#getCreateTime()
*/
public T createTime(Date createTime) {
this.createTime = createTime;
return self();
}
/**
* @see Domain#getRecordCount()
*/
public T recordCount(int recordCount) {
this.recordCount = recordCount;
return self();
}
/**
* @see Domain#isUseGlesysNameServer()
*/
public T useGlesysNameServer(boolean useGlesysNameServer) {
this.useGlesysNameServer = useGlesysNameServer;
return self();
}
/**
* @see Domain#getPrimaryNameServer()
*/
public T primaryNameServer(String primaryNameServer) {
this.primaryNameServer = primaryNameServer;
return self();
}
/**
* @see Domain#getResponsiblePerson()
*/
public T responsiblePerson(String responsiblePerson) {
this.responsiblePerson = responsiblePerson;
return self();
}
/**
* @see Domain#getTtl()
*/
public T ttl(int ttl) {
this.ttl = ttl;
return self();
}
/**
* @see Domain#getRefresh()
*/
public T refresh(int refresh) {
this.refresh = refresh;
return self();
}
/**
* @see Domain#getRetry()
*/
public T retry(int retry) {
this.retry = retry;
return self();
}
/**
* @see Domain#getExpire()
*/
public T expire(int expire) {
this.expire = expire;
return self();
}
/**
* @see Domain#getMinimum()
*/
public T minimum(int minimum) {
this.minimum = minimum;
return self();
}
public Domain build() {
return new Domain(domainName, createTime, recordCount, new GleSYSBoolean(useGlesysNameServer), primaryNameServer, responsiblePerson, ttl, refresh, retry, expire, minimum);
}
public T fromDomain(Domain in) {
return this.domainName(in.getName())
.createTime(in.getCreateTime())
.recordCount(in.getRecordCount())
.useGlesysNameServer(in.isUseGlesysNameServer())
.primaryNameServer(in.getPrimaryNameServer())
.responsiblePerson(in.getResponsiblePerson())
.ttl(in.getTtl())
.refresh(in.getRefresh())
.retry(in.getRetry())
.expire(in.getExpire());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String domainName;
private final Date createTime;
private final int recordCount;
private final boolean useGlesysNameServer;
private final String primaryNameServer;
private final String responsiblePerson;
private final int ttl;
private final int refresh;
private final int retry;
private final int expire;
private final int minimum;
@ConstructorProperties({
"domainname", "createtime", "recordcount", "usingglesysnameserver", "primarynameserver", "responsibleperson",
"ttl", "refresh", "retry", "expire", "minimum"
})
protected Domain(String domainName, @Nullable Date createTime, int recordCount, GleSYSBoolean useGlesysNameServer,
@Nullable String primaryNameServer, @Nullable String responsiblePerson,
int ttl, int refresh, int retry, int expire, int minimum) {
this.domainName = checkNotNull(domainName, "domainName");
this.createTime = createTime;
this.recordCount = recordCount;
this.useGlesysNameServer = checkNotNull(useGlesysNameServer, "useGlesysNameServer").getValue();
this.primaryNameServer = primaryNameServer;
this.responsiblePerson = responsiblePerson;
this.ttl = ttl;
this.refresh = refresh;
this.retry = retry;
this.expire = expire;
this.minimum = minimum;
}
/**
* @return the domain name, ex. "jclouds.org"
*/
public String getName() {
return this.domainName;
}
/**
* @return the date the domain was registered with GleSYS
*/
public Date getCreateTime() {
return this.createTime;
}
/**
* @return the number of DNS records for this domain
*/
public int getRecordCount() {
return this.recordCount;
}
/**
* @return true if a GleSYS nameserver holds the records
*/
public boolean isUseGlesysNameServer() {
return this.useGlesysNameServer;
}
@Nullable
public String getPrimaryNameServer() {
return primaryNameServer;
}
/**
* The E-mail address of the person responsible for this domain (reformatted with '.' at end).
*/
@Nullable
public String getResponsiblePerson() {
return responsiblePerson;
}
/**
* TTL (time to live). The number of seconds a domain name is cached locally before expiration and return to authoritative nameServers for updates
*/
public int getTtl() {
return ttl;
}
/**
* The number of seconds between update requests from secondary and slave name servers
*/
public int getRefresh() {
return refresh;
}
/**
* The number of seconds the secondary/slave will wait before retrying when the last attempt failed
*/
public int getRetry() {
return retry;
}
/**
* The number of seconds a master or slave will wait before considering the data stale if it cannot reach the primary name server
*/
public int getExpire() {
return expire;
}
/**
* The minimum/default TTL if the domain does not specify ttl
*
* @see #getTtl()
*/
public int getMinimum() {
return minimum;
}
@Override
public int hashCode() {
return Objects.hashCode(domainName);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Domain that = Domain.class.cast(obj);
return Objects.equal(this.domainName, that.domainName);
}
protected ToStringHelper string() {
return MoreObjects.toStringHelper("")
.add("domainName", domainName).add("createTime", createTime).add("recordCount", recordCount).add("useGlesysNameServer", useGlesysNameServer);
}
@Override
public String toString() {
return string().toString();
}
}