blob: 74b841d7c9d82ebf118a3a3027e18e879009111d [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 com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.MoreObjects.ToStringHelper;
/**
* Class ServerSpec
*/
public class ServerSpec {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromServerSpec(this);
}
public abstract static class Builder<T extends Builder<T>> {
protected abstract T self();
protected String platform;
protected String datacenter;
protected int memorySizeMB;
protected int diskSizeGB;
protected String templateName;
protected int cpuCores;
protected int transferGB;
/**
* @see ServerSpec#getPlatform()
*/
public T platform(String platform) {
this.platform = checkNotNull(platform, "platform");
return self();
}
/**
* @see ServerSpec#getDatacenter()
*/
public T datacenter(String datacenter) {
this.datacenter = checkNotNull(datacenter, "datacenter");
return self();
}
/**
* @see ServerSpec#getMemorySizeMB()
*/
public T memorySizeMB(int memorySizeMB) {
this.memorySizeMB = memorySizeMB;
return self();
}
/**
* @see ServerSpec#getDiskSizeGB()
*/
public T diskSizeGB(int diskSizeGB) {
this.diskSizeGB = diskSizeGB;
return self();
}
/**
* @see ServerSpec#getTemplateName()
*/
public T templateName(String templateName) {
this.templateName = checkNotNull(templateName, "templateName");
return self();
}
/**
* @see ServerSpec#getCpuCores()
*/
public T cpuCores(int cpuCores) {
this.cpuCores = cpuCores;
return self();
}
/**
* @see ServerSpec#getTransferGB()
*/
public T transferGB(int transferGB) {
this.transferGB = transferGB;
return self();
}
public ServerSpec build() {
return new ServerSpec(platform, datacenter, memorySizeMB, diskSizeGB, templateName, cpuCores, transferGB);
}
public T fromServerSpec(ServerSpec in) {
return this.platform(in.getPlatform())
.datacenter(in.getDatacenter())
.memorySizeMB(in.getMemorySizeMB())
.diskSizeGB(in.getDiskSizeGB())
.templateName(in.getTemplateName())
.cpuCores(in.getCpuCores())
.transferGB(in.getTransferGB());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String platform;
private final String datacenter;
private final int memorySizeMB;
private final int diskSizeGB;
private final String templateName;
private final int cpuCores;
private final int transferGB;
@ConstructorProperties({
"platform", "datacenter", "memorySizeMB", "diskSizeGB", "templateName", "cpuCores", "transferGB"
})
protected ServerSpec(String platform, String datacenter, int memorySizeMB, int diskSizeGB, String templateName, int cpuCores, int transferGB) {
this.platform = checkNotNull(platform, "platform");
this.datacenter = checkNotNull(datacenter, "datacenter");
this.memorySizeMB = memorySizeMB;
this.diskSizeGB = diskSizeGB;
this.templateName = checkNotNull(templateName, "templateName");
this.cpuCores = cpuCores;
this.transferGB = transferGB;
}
/**
* @return the data center to create the new server in
*/
public String getPlatform() {
return this.platform;
}
/**
* @return the platform to use (i.e. "Xen" or "OpenVZ")
*/
public String getDatacenter() {
return this.datacenter;
}
/**
* @return the os template to use to create the new server
*/
public int getMemorySizeMB() {
return this.memorySizeMB;
}
/**
* @return the amount of disk space, in GB, to allocate
*/
public int getDiskSizeGB() {
return this.diskSizeGB;
}
/**
* @return the memory, in MB, to allocate
*/
public String getTemplateName() {
return this.templateName;
}
/**
* @return the number of CPU cores to allocate
*/
public int getCpuCores() {
return this.cpuCores;
}
/**
* @return bandwidth of in GB
*/
public int getTransferGB() {
return this.transferGB;
}
@Override
public int hashCode() {
return Objects.hashCode(platform, datacenter, memorySizeMB, diskSizeGB, templateName, cpuCores, transferGB);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
ServerSpec that = ServerSpec.class.cast(obj);
return Objects.equal(this.platform, that.platform)
&& Objects.equal(this.datacenter, that.datacenter)
&& Objects.equal(this.memorySizeMB, that.memorySizeMB)
&& Objects.equal(this.diskSizeGB, that.diskSizeGB)
&& Objects.equal(this.templateName, that.templateName)
&& Objects.equal(this.cpuCores, that.cpuCores)
&& Objects.equal(this.transferGB, that.transferGB);
}
protected ToStringHelper string() {
return MoreObjects.toStringHelper("").add("platform", platform).add("datacenter", datacenter)
.add("memorySizeMB", memorySizeMB).add("diskSizeGB", diskSizeGB).add("templateName", templateName)
.add("cpuCores", cpuCores).add("transferGB", transferGB);
}
@Override
public String toString() {
return string().toString();
}
}