package com.intuit.tank.project;
/*
* #%L
* Intuit Tank data model
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import com.intuit.tank.vm.api.enumerated.VMRegion;
@Entity
@Table(name = "vm_instance")
public class VMInstance extends BaseEntity {
private static final long serialVersionUID = 1L;
public static final String PROPERTY_INSTANCE_ID = "instanceId";
@Column(name = "job_id")
private String jobId;
@Column(name = "size")
private String size;
@Column(name = "ami_id")
private String amiId;
@Column(name = "status")
private String status;
@Column(name = "instance_id")
private String instanceId;
@Column(name = "start_time")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;
@Column(name = "end_time")
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
@Column(name = "region")
@Enumerated(EnumType.STRING)
private VMRegion region;
@OneToMany(mappedBy = "vmInstance", fetch = FetchType.EAGER)
private Set<JobVMInstance> vmInstances = new HashSet<JobVMInstance>();
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getAmiId() {
return amiId;
}
public void setAmiId(String amiId) {
this.amiId = amiId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
public String getJobId() {
return jobId;
}
public VMRegion getRegion() {
return region;
}
public void setRegion(VMRegion region) {
this.region = region;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
/**
* @return the vmImages
*/
public Set<JobVMInstance> getVMInstances() {
return vmInstances;
}
/**
* @param vmImages
* the vmImages to set
*/
public void setVMInstances(Set<JobVMInstance> vmImages) {
this.vmInstances = vmImages;
}
/**
* @{inheritDoc
*/
@Override
public String toString() {
return new ToStringBuilder(this).append("id", getId()).append("region", region).append("amiId", amiId)
.toString();
}
/**
* @{inheritDoc
*/
@Override
public boolean equals(Object obj) {
if (!(obj instanceof VMInstance)) {
return false;
}
VMInstance o = (VMInstance) obj;
return new EqualsBuilder().append(o.getId(), getId()).isEquals();
}
public static Builder builder() {
return new Builder();
}
public static Builder builderFrom(VMInstance image) {
return new Builder(image);
}
/**
* @{inheritDoc
*/
@Override
public int hashCode() {
return new HashCodeBuilder(65, 33).append(getId()).toHashCode();
}
public static class Builder extends VMImageBuilderBase<Builder> {
private Builder() {
super(new VMInstance());
}
private Builder(VMInstance img) {
super(img);
}
public VMInstance build() {
return getInstance();
}
}
static class VMImageBuilderBase<GeneratorT extends VMImageBuilderBase<GeneratorT>> {
private VMInstance instance;
protected VMImageBuilderBase(VMInstance aInstance) {
instance = aInstance;
}
protected VMInstance getInstance() {
return instance;
}
@SuppressWarnings("unchecked")
public GeneratorT size(String aValue) {
instance.setSize(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT amiId(String aValue) {
instance.setAmiId(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT status(String aValue) {
instance.setStatus(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT instanceId(String aValue) {
instance.setInstanceId(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT jobId(String aValue) {
instance.setJobId(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT region(VMRegion aValue) {
instance.setRegion(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT startTime(Date aValue) {
instance.setStartTime(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT endTime(Date aValue) {
instance.setEndTime(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT vmImages(Set<JobVMInstance> aValue) {
instance.setVMInstances(aValue);
return (GeneratorT) this;
}
@SuppressWarnings("unchecked")
public GeneratorT addVmImage(JobVMInstance aValue) {
if (instance.getVMInstances() == null) {
instance.setVMInstances(new HashSet<JobVMInstance>());
}
((HashSet<JobVMInstance>) instance.getVMInstances()).add(aValue);
return (GeneratorT) this;
}
}
}