package org.ovirt.engine.core.common.businessentities;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.ovirt.engine.core.common.businessentities.mapping.GuidType;
import org.ovirt.engine.core.common.validation.group.CreateEntity;
import org.ovirt.engine.core.common.validation.group.UpdateEntity;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.INotifyPropertyChanged;
import org.ovirt.engine.core.compat.StringFormat;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.core.compat.TimeSpan;
@XmlType(name = "vm_pools")
@Entity
@Table(name = "vm_pools")
@TypeDef(name = "guid", typeClass = GuidType.class)
public class vm_pools extends IVdcQueryable implements INotifyPropertyChanged, Serializable {
private static final long serialVersionUID = -2176168998321713354L;
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "org.ovirt.engine.core.dao.GuidGenerator")
@Column(name = "vm_pool_id")
@Type(type = "guid")
private Guid id;
@NotNull(message = "VALIDATION.VM_POOLS.NAME.NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class })
@Size(min = 1, max = BusinessEntitiesDefinitions.VM_POOL_NAME_SIZE)
@Column(name = "vm_pool_name")
private String name;
@Size(max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE)
@Column(name = "vm_pool_description", length = 4000)
private String description;
@Column(name = "vm_pool_type")
private VmPoolType type = VmPoolType.Automatic;
@Size(max = BusinessEntitiesDefinitions.VM_POOL_PARAMS)
@Column(name = "parameters", length = 200)
private String parameters = "";
@Column(name = "vds_group_id")
@Type(type = "guid")
private Guid vdsGroupId;
@Transient
private int defaultTimeInDays;
@Transient
private TimeSpan defaultStartTime = new TimeSpan();
@Transient
private TimeSpan defaultEndTime = new TimeSpan();
@Transient
private String vdsGroupName;
@Transient
private int vmPoolAssignedCount = 1;
@Transient
private int vmPoolRunningCount = 1;
/**
* TODO: Vitaly change it to better designed implementation
*/
public vm_pools(String vm_pool_description, Guid vm_pool_id, String vm_pool_name, VmPoolType vmPoolType,
Guid vds_group_id, int defaultTimeInDays, TimeSpan defaultStartTime, TimeSpan defaultEndTime) {
this(vm_pool_description, vm_pool_id, vm_pool_name, vmPoolType, vds_group_id);
this.defaultTimeInDays = defaultTimeInDays;
this.defaultStartTime = defaultStartTime;
this.defaultEndTime = defaultEndTime;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((defaultEndTime == null) ? 0 : defaultEndTime.hashCode());
result = prime * result + ((defaultStartTime == null) ? 0 : defaultStartTime.hashCode());
result = prime * result + defaultTimeInDays;
result = prime * result + ((parameters == null) ? 0 : parameters.hashCode());
result = prime * result + ((vdsGroupId == null) ? 0 : vdsGroupId.hashCode());
result = prime * result + ((vdsGroupName == null) ? 0 : vdsGroupName.hashCode());
result = prime * result + vmPoolAssignedCount;
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + vmPoolRunningCount;
result = prime * result + ((type == null) ? 0 : type.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;
vm_pools other = (vm_pools) obj;
if (defaultEndTime == null) {
if (other.defaultEndTime != null)
return false;
} else if (!defaultEndTime.equals(other.defaultEndTime))
return false;
if (defaultStartTime == null) {
if (other.defaultStartTime != null)
return false;
} else if (!defaultStartTime.equals(other.defaultStartTime))
return false;
if (defaultTimeInDays != other.defaultTimeInDays)
return false;
if (parameters == null) {
if (other.parameters != null)
return false;
} else if (!parameters.equals(other.parameters))
return false;
if (vdsGroupId == null) {
if (other.vdsGroupId != null)
return false;
} else if (!vdsGroupId.equals(other.vdsGroupId))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
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;
return true;
}
private void InitializedTimeLeasedDefaultData(String parameter) {
String[] values = parameter.split("[,]", -1);
if (values.length == 3) {
try {
defaultTimeInDays = Integer.parseInt(values[0]);
String[] startTime = values[1].split("[:]", -1);
if (startTime.length > 1) {
defaultStartTime = new TimeSpan(Integer.parseInt(startTime[0]), Integer.parseInt(startTime[1]), 0);
}
String[] endTime = values[2].split("[:]", -1);
if (endTime.length > 1) {
defaultEndTime = new TimeSpan(Integer.parseInt(endTime[0]), Integer.parseInt(endTime[1]), 0);
}
} catch (java.lang.Exception e) {
}
}
}
// C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to
// .NET attributes:
// @XmlElement - don't serizlize parameters since it has logic in it
public String getparameters() {
switch (getvm_pool_type()) {
case TimeLease: {
return StringFormat.format("%1$s,%2$s:%3$s,%4$s:%5$s", defaultTimeInDays, defaultStartTime.Hours,
defaultStartTime.Minutes, defaultEndTime.Hours, defaultEndTime.Minutes);
}
default: {
return parameters;
}
}
}
public void setparameters(String value) {
switch (getvm_pool_type()) {
case TimeLease: {
InitializedTimeLeasedDefaultData(value);
break;
}
default: {
parameters = value;
break;
}
}
}
@XmlElement(name = "DefaultTimeInDays")
public int getDefaultTimeInDays() {
return defaultTimeInDays;
}
public void setDefaultTimeInDays(int value) {
defaultTimeInDays = value;
}
@XmlElement(name = "DefaultStartTime")
public TimeSpan getDefaultStartTime() {
return defaultStartTime;
}
public void setDefaultStartTime(TimeSpan value) {
defaultStartTime = value;
}
@XmlElement(name = "DefaultEndTime")
public TimeSpan getDefaultEndTime() {
return defaultEndTime;
}
public void setDefaultEndTime(TimeSpan value) {
defaultEndTime = value;
}
public vm_pools() {
}
public vm_pools(String vm_pool_description, Guid vm_pool_id, String vm_pool_name, VmPoolType vmPoolType,
Guid vds_group_id) {
this.description = vm_pool_description;
this.id = vm_pool_id;
this.name = vm_pool_name;
this.type = vmPoolType;
this.vdsGroupId = vds_group_id;
}
@XmlElement
public String getvm_pool_description() {
return this.description;
}
public void setvm_pool_description(String value) {
this.description = value;
}
@XmlElement
public Guid getvm_pool_id() {
return this.id;
}
public void setvm_pool_id(Guid value) {
this.id = value;
}
@XmlElement
public String getvm_pool_name() {
return this.name;
}
public void setvm_pool_name(String value) {
if (!StringHelper.EqOp(this.name, value)) {
this.name = value;
}
}
@XmlElement
public int getvm_assigned_count() {
return vmPoolAssignedCount;
}
public void setvm_assigned_count(int value) {
vmPoolAssignedCount = value;
}
@XmlElement
public int getvm_running_count() {
return vmPoolRunningCount;
}
public void setvm_running_count(int value) {
vmPoolRunningCount = value;
}
@XmlElement
public VmPoolType getvm_pool_type() {
return type;
}
public void setvm_pool_type(VmPoolType value) {
this.type = value;
}
@XmlElement
public Guid getvds_group_id() {
return this.vdsGroupId;
}
public void setvds_group_id(Guid value) {
this.vdsGroupId = value;
}
@XmlElement
public String getvds_group_name() {
return this.vdsGroupName;
}
public void setvds_group_name(String value) {
this.vdsGroupName = value;
}
@Override
public Object getQueryableId() {
return getvm_pool_id();
}
private static final java.util.ArrayList<String> _poolProperties = new java.util.ArrayList<String>(
java.util.Arrays.asList(new String[] { "vm_pool_name", "vm_pool_description", "vm_pool_type",
"vm_running_count", "vm_assigned_count", "vds_group_name" }));
@Override
public java.util.ArrayList<String> getChangeablePropertiesList() {
return _poolProperties;
}
}