blob: 590bccb9da79fc1f443a6e5360ececed7a10c098 [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.rackspace.cloudfiles.v1.domain;
import static com.google.common.base.Objects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import java.beans.ConstructorProperties;
import java.net.URI;
import javax.inject.Named;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
/**
* Represents a CDN Container in Rackspace Cloud Files.
*
* @author Jeremy Daggett
*/
public class CDNContainer implements Comparable<CDNContainer> {
private String name;
@Named("cdn_enabled")
private boolean enabled;
@Named("log_retention")
private boolean logRetention;
private int ttl;
@Named("cdn_uri")
private URI uri;
@Named("cdn_ssl_uri")
private URI sslUri;
@Named("cdn_streaming_uri")
private URI streamingUri;
@Named("cdn_ios_uri")
private URI iosUri;
@ConstructorProperties({ "name", "cdn_enabled", "log_retention", "ttl", "cdn_uri", "cdn_ssl_uri", "cdn_streaming_uri", "cdn_ios_uri"})
public CDNContainer(String name, boolean enabled, boolean logRetention, int ttl, URI uri, URI sslUri, URI streamingUri, URI iosUri) {
this.name = checkNotNull(name, "name required");
this.enabled = enabled;
this.logRetention = logRetention;
this.ttl = ttl;
this.uri = checkNotNull(uri, "uri required");
this.sslUri = checkNotNull(sslUri, "sslUri required");
this.streamingUri = checkNotNull(streamingUri, "streamingUri required");
this.iosUri = checkNotNull(iosUri, "iosUri required");
}
/**
* <h3>NOTE</h3>
* The container name is not available from HEAD CDN responses and will be null.
*
* @return The name of this CDN container.
*/
public String getName() {
return name;
}
/**
* @return {@code true} if the container is CDN enabled, {@code false} if not.
*/
public boolean isEnabled() {
return enabled;
}
/**
* @return {@code true} if the logs will be retained for this CDN container, {@code false} if not.
*/
public boolean isLogRetentionEnabled() {
return logRetention;
}
/**
* @return the TTL for this CDN container.
*/
public int getTtl() {
return ttl;
}
/**
* @return the {@link URI} for this CDN container.
*/
public URI getUri() {
return uri;
}
/**
* @return the SSL {@link URI} for this CDN container.
*/
public URI getSslUri() {
return sslUri;
}
/**
* @return the streaming {@link URI} for this CDN container.
*/
public URI getStreamingUri() {
return streamingUri;
}
/**
* @return the iOS {@link URI} for this CDN container.
*/
public URI getIosUri() {
return iosUri;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
CDNContainer that = CDNContainer.class.cast(obj);
return Objects.equal(this.name, that.name)
&& Objects.equal(this.enabled, that.enabled)
&& Objects.equal(this.logRetention, that.logRetention)
&& Objects.equal(this.ttl, that.ttl)
&& Objects.equal(this.uri, that.uri)
&& Objects.equal(this.sslUri, that.sslUri)
&& Objects.equal(this.streamingUri, that.streamingUri)
&& Objects.equal(this.iosUri, that.iosUri);
}
@Override
public int hashCode() {
return Objects.hashCode(getName(), isEnabled(), isLogRetentionEnabled(), getTtl(), getUri(), getSslUri(), getStreamingUri(), getIosUri());
}
@Override
public String toString() {
return string().toString();
}
protected ToStringHelper string() {
return toStringHelper("").omitNullValues()
.add("name", getName())
.add("enabled", isEnabled())
.add("logRetention", isLogRetentionEnabled())
.add("ttl", getTtl())
.add("uri", getUri())
.add("sslUri", getSslUri())
.add("streamingUri", getStreamingUri())
.add("iosUri", getIosUri());
}
@Override
public int compareTo(CDNContainer that) {
if (that == null)
return 1;
if (this == that)
return 0;
return this.getName().compareTo(that.getName());
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String name;
private boolean enabled;
private boolean logRetention;
private int ttl;
private URI uri;
private URI sslUri;
private URI streamingUri;
private URI iosUri;
/**
* @see CDNContainer#getName()
*/
public Builder name(String name) {
this.name = checkNotNull(name, "name");
return this;
}
/**
* @see CDNContainer#isEnabled()
*/
public Builder enabled(boolean enabled) {
this.enabled = enabled;
return this;
}
/**
* @see CDNContainer#isLogRetentionEnabled()
*/
public Builder logRetention(boolean logRetention) {
this.logRetention = logRetention;
return this;
}
/**
* @see CDNContainer#getTtl()
*/
public Builder ttl(int ttl) {
this.ttl = ttl;
return this;
}
/**
* @see CDNContainer#getUri()
*/
public Builder uri(URI uri) {
this.uri = uri;
return this;
}
/**
* @see CDNContainer#getSslUri()
*/
public Builder sslUri(URI sslUri) {
this.sslUri = sslUri;
return this;
}
/**
* @see CDNContainer#getStreamingUri()
*/
public Builder streamingUri(URI streamingUri) {
this.streamingUri = streamingUri;
return this;
}
/**
* @see CDNContainer#getIosUri()
*/
public Builder iosUri(URI iosUri) {
this.iosUri = iosUri;
return this;
}
public CDNContainer build() {
return new CDNContainer(name, enabled, logRetention, ttl, uri, sslUri, streamingUri, iosUri);
}
public Builder fromContainer(CDNContainer from) {
return name(from.getName())
.enabled(from.isEnabled())
.logRetention(from.isLogRetentionEnabled())
.ttl(from.getTtl())
.uri(from.getUri())
.sslUri(from.getSslUri())
.streamingUri(from.getStreamingUri())
.iosUri(from.getIosUri());
}
}
}