/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds 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.ibm.smartcloud.domain; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Date; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.gson.annotations.SerializedName; /** * * The current state of the instance. * * @author Adrian Cole */ public class Instance implements Comparable<Instance> { public static Builder builder() { return new Builder(); } public static class Builder { private Date launchTime; private Set<Software> software = Sets.newLinkedHashSet(); private IP primaryIP; private Set<IP> secondaryIPs = Sets.newLinkedHashSet(); private String requestId; private String keyName; private String name; private String instanceType; private Status status; private String owner; private String location; private String imageId; private Set<String> productCodes = Sets.newLinkedHashSet(); private String requestName; private String id; private Date expirationTime; private Vlan vlan; private int diskSize; private boolean rootOnly; private String antiCollocationInstance; public Builder launchTime(Date launchTime) { this.launchTime = launchTime; return this; } public Builder software(Iterable<Software> software) { this.software = ImmutableSet.<Software> copyOf(checkNotNull(software, "software")); return this; } public Builder primaryIP(IP primaryIP) { this.primaryIP = primaryIP; return this; } public Builder secondaryIPs(Iterable<IP> secondaryIPs) { this.secondaryIPs = ImmutableSet.<IP> copyOf(checkNotNull(secondaryIPs, "secondaryIPs")); return this; } public Builder requestId(String requestId) { this.requestId = requestId; return this; } public Builder keyName(String keyName) { this.keyName = keyName; return this; } public Builder name(String name) { this.name = name; return this; } public Builder instanceType(String instanceType) { this.instanceType = instanceType; return this; } public Builder status(Status status) { this.status = status; return this; } public Builder owner(String owner) { this.owner = owner; return this; } public Builder location(String location) { this.location = location; return this; } public Builder imageId(String imageId) { this.imageId = imageId; return this; } public Builder productCodes(Iterable<String> productCodes) { this.productCodes = ImmutableSet.<String> copyOf(checkNotNull(productCodes, "productCodes")); return this; } public Builder requestName(String requestName) { this.requestName = requestName; return this; } public Builder id(String id) { this.id = id; return this; } public Builder expirationTime(Date expirationTime) { this.expirationTime = expirationTime; return this; } public Builder vlan(Vlan vlan) { this.vlan = vlan; return this; } public Builder diskSize(int diskSize) { this.diskSize = diskSize; return this; } public Builder rootOnly(boolean rootOnly) { this.rootOnly = rootOnly; return this; } public Builder antiCollocationInstance(String antiCollocationInstance) { this.antiCollocationInstance = antiCollocationInstance; return this; } public Instance build() { return new Instance(launchTime, software, primaryIP, secondaryIPs, requestId, keyName, name, instanceType, status, owner, location, imageId, productCodes, requestName, id, expirationTime, vlan, diskSize, rootOnly, antiCollocationInstance); } } public static enum Status { NEW, PROVISIONING, FAILED, REMOVED, REJECTED, ACTIVE, UNKNOWN, DEPROVISIONING, RESTARTING, STARTING, STOPPING, STOPPED, DEPROVISION_PENDING, UNRECOGNIZED; public static Status fromValue(String v) { switch (Integer.parseInt(v)) { case 0: return NEW; case 1: return PROVISIONING; case 2: return FAILED; case 3: return REMOVED; case 4: return REJECTED; case 5: return ACTIVE; case 6: return UNKNOWN; case 7: return DEPROVISIONING; case 8: return RESTARTING; case 9: return STARTING; case 10: return STOPPING; case 11: return STOPPED; case 12: return DEPROVISION_PENDING; default: return UNRECOGNIZED; } } } public static class Software { private String version; private String type; private String name; public Software(String name, String type, String version) { this.version = version; this.type = type; this.name = name; } public Software() { } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); result = prime * result + ((version == null) ? 0 : version.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Software other = (Software) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (type == null) { if (other.type != null) return false; } else if (!type.equals(other.type)) return false; if (version == null) { if (other.version != null) return false; } else if (!version.equals(other.version)) return false; return true; } public String getVersion() { return version; } public String getType() { return type; } public String getName() { return name; } @Override public String toString() { return "[name=" + name + ", type=" + type + ", version=" + version + "]"; } } private Date launchTime; private Set<Software> software = Sets.newLinkedHashSet(); private IP primaryIP; @SerializedName("secondaryIP") private Set<IP> secondaryIPs = Sets.newLinkedHashSet(); private String requestId; private String keyName; private String name; private String instanceType; private Status status; private String owner; private String location; private String imageId; private Set<String> productCodes = Sets.newLinkedHashSet(); private String requestName; private String id; private Date expirationTime; private Vlan vlan; private int diskSize; @SerializedName("root-only") private boolean rootOnly; private String antiCollocationInstance; Instance() { } public Instance(Date launchTime, Iterable<Software> software, IP primaryIP, Iterable<IP> secondaryIPs, String requestId, String keyName, String name, String instanceType, Status status, String owner, String location, String imageId, Iterable<String> productCodes, String requestName, String id, Date expirationTime, Vlan vlan, int diskSize, boolean rootOnly, String antiCollocationInstance) { this.launchTime = launchTime; this.software = ImmutableSet.copyOf(software); this.primaryIP = primaryIP; this.secondaryIPs = ImmutableSet.copyOf(secondaryIPs); this.requestId = requestId; this.keyName = keyName; this.name = name; this.instanceType = instanceType; this.status = status; this.owner = owner; this.location = location; this.imageId = imageId; this.productCodes = ImmutableSet.copyOf(productCodes); this.requestName = requestName; this.id = id; this.expirationTime = expirationTime; this.vlan = vlan; this.diskSize = diskSize; this.rootOnly = rootOnly; this.antiCollocationInstance = antiCollocationInstance; } public Date getLaunchTime() { return launchTime; } public Set<Software> getSoftware() { return software; } public IP getPrimaryIP() { return primaryIP; } public Set<IP> getSecondaryIPs() { return secondaryIPs; } public String getRequestId() { return requestId; } public String getKeyName() { return keyName; } public String getName() { return name; } public String getInstanceType() { return instanceType; } public Status getStatus() { return status; } public String getOwner() { return owner; } public String getLocation() { return location; } public String getImageId() { return imageId; } public Set<String> getProductCodes() { return productCodes; } public String getRequestName() { return requestName; } public String getId() { return id; } public Date getExpirationTime() { return expirationTime; } public Vlan getVlan() { return vlan; } public int getDiskSize() { return diskSize; } public boolean isRootOnly() { return rootOnly; } public String getAntiCollocationInstance() { return antiCollocationInstance; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Instance other = (Instance) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } @Override public String toString() { return String .format( "[id=%s, instanceType=%s, owner=%s, name=%s, location=%s, status=%s, imageId=%s, primaryIP=%s, secondaryIPs=%s, diskSize=%s, keyName=%s, launchTime=%s, rootOnly=%s, vlan=%s, software=%s, expirationTime=%s, antiCollocationInstance=%s, requestId=%s, requestName=%s, productCodes=%s]", id, instanceType, owner, name, location, status, imageId, primaryIP, secondaryIPs, diskSize, keyName, launchTime, rootOnly, vlan, software, expirationTime, antiCollocationInstance, requestId, requestName, productCodes); } @Override public int compareTo(Instance arg0) { return id.compareTo(arg0.getId()); } }