blob: 781443f874fcac3876ea5d41ca52d4a86f38fd19 [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.Set;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
/**
* Detailed information about a server such as cpuCores, hardware configuration
* (cpu, memory and disk), ip addresses, cost, transfer, os and more.
*
* @see <a href= "https://customer.glesys.com/api.php?a=doc#server_details" />
*/
public class ServerDetails extends Server {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromServerDetails(this);
}
public abstract static class Builder<T extends Builder<T>> extends Server.Builder<T> {
protected Server.State state;
protected String description;
protected String templateName;
protected int cpuCores;
protected int memorySizeMB;
protected int diskSizeGB;
protected int transferGB;
protected Cost cost;
protected Set<Ip> ips = ImmutableSet.of();
/**
* @see ServerDetails#getState()
*/
public T state(Server.State state) {
this.state = checkNotNull(state, "state");
return self();
}
/**
* @see ServerDetails#getDescription()
*/
public T description(String description) {
this.description = checkNotNull(description, "description");
return self();
}
/**
* @see ServerDetails#getTemplateName()
*/
public T templateName(String templateName) {
this.templateName = checkNotNull(templateName, "templateName");
return self();
}
/**
* @see ServerDetails#getCpuCores()
*/
public T cpuCores(int cpuCores) {
this.cpuCores = cpuCores;
return self();
}
/**
* @see ServerDetails#getMemorySizeMB()
*/
public T memorySizeMB(int memorySizeMB) {
this.memorySizeMB = memorySizeMB;
return self();
}
/**
* @see ServerDetails#getDiskSizeGB()
*/
public T diskSizeGB(int diskSizeGB) {
this.diskSizeGB = diskSizeGB;
return self();
}
/**
* @see ServerDetails#getTransferGB()
*/
public T transferGB(int transferGB) {
this.transferGB = transferGB;
return self();
}
/**
* @see ServerDetails#getCost()
*/
public T cost(Cost cost) {
this.cost = checkNotNull(cost, "cost");
return self();
}
/**
* @see ServerDetails#getIps()
*/
public T ips(Set<Ip> ips) {
this.ips = ImmutableSet.copyOf(checkNotNull(ips, "ips"));
return self();
}
public T ips(Ip... in) {
return ips(ImmutableSet.copyOf(in));
}
public ServerDetails build() {
return new ServerDetails(id, hostname, datacenter, platform, state, description, templateName, cpuCores, memorySizeMB, diskSizeGB, transferGB, cost, ips);
}
public T fromServerDetails(ServerDetails in) {
return super.fromServer(in)
.state(in.getState())
.description(in.getDescription())
.templateName(in.getTemplateName())
.cpuCores(in.getCpuCores())
.memorySizeMB(in.getMemorySizeMB())
.diskSizeGB(in.getDiskSizeGB())
.transferGB(in.getTransferGB())
.cost(in.getCost())
.ips(in.getIps());
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final Server.State state;
private final String description;
private final String templateName;
private final int cpuCores;
private final int memorySizeMB;
private final int diskSizeGB;
private final int transferGB;
private final Cost cost;
private final Set<Ip> ips;
@ConstructorProperties({
"serverid", "hostname", "datacenter", "platform", "state", "description", "templatename", "cpucores",
"memorysize", "disksize", "transfer", "cost", "iplist"
})
protected ServerDetails(String id, String hostname, String datacenter, String platform, @Nullable Server.State state,
@Nullable String description, String templateName, int cpuCores, int memorySizeMB,
int diskSizeGB, int transferGB, Cost cost, @Nullable Set<Ip> ips) {
super(id, hostname, datacenter, platform);
this.state = state;
this.description = description;
this.templateName = checkNotNull(templateName, "templateName");
this.cpuCores = cpuCores;
this.memorySizeMB = memorySizeMB;
this.diskSizeGB = diskSizeGB;
this.transferGB = transferGB;
this.cost = checkNotNull(cost, "cost");
this.ips = ips == null ? ImmutableSet.<Ip>of() : ImmutableSet.copyOf(checkNotNull(ips, "ips"));
}
/**
* @return the state of the server (e.g. "running")
*/
public Server.State getState() {
return this.state;
}
/**
* @return the user-specified description of the server
*/
public String getDescription() {
return this.description;
}
/**
* @return the name of the template used to create the server
*/
public String getTemplateName() {
return this.templateName;
}
/**
* @return number of cores on the server
*/
public int getCpuCores() {
return this.cpuCores;
}
/**
* @return the memory of the server in MB
*/
public int getMemorySizeMB() {
return this.memorySizeMB;
}
/**
* @return the disk of the server in GB
*/
public int getDiskSizeGB() {
return this.diskSizeGB;
}
/**
* @return the transfer of the server
*/
public int getTransferGB() {
return this.transferGB;
}
/**
* @return details of the cost of the server
*/
public Cost getCost() {
return this.cost;
}
/**
* @return the ip addresses assigned to the server
*/
public Set<Ip> getIps() {
return this.ips;
}
protected ToStringHelper string() {
return super.string().add("state", state).add("description", description).add("templateName", templateName)
.add("cpuCores", cpuCores).add("memorySizeMB", memorySizeMB).add("diskSizeGB", diskSizeGB)
.add("transferGB", transferGB).add("cost", cost).add("ips", ips);
}
}