package org.zstack.header.volume;
import org.zstack.header.configuration.DiskOfferingEO;
import org.zstack.header.image.ImageEO;
import org.zstack.header.storage.primary.PrimaryStorageEO;
import org.zstack.header.vm.VmInstanceEO;
import org.zstack.header.vo.ForeignKey;
import org.zstack.header.vo.ForeignKey.ReferenceOption;
import org.zstack.header.vo.Index;
import org.zstack.header.vo.ResourceVO;
import org.zstack.header.vo.ShadowEntity;
import javax.persistence.*;
import java.sql.Timestamp;
@MappedSuperclass
public class VolumeAO extends ResourceVO implements ShadowEntity {
@Column
@Index
private String name;
@Column
private String description;
@Column
@ForeignKey(parentEntityClass = PrimaryStorageEO.class, onDeleteAction = ReferenceOption.CASCADE)
private String primaryStorageUuid;
@Column
private String vmInstanceUuid;
@Column
@ForeignKey(parentEntityClass = DiskOfferingEO.class, onDeleteAction = ReferenceOption.RESTRICT)
private String diskOfferingUuid;
@Column
@ForeignKey(parentEntityClass = ImageEO.class, onDeleteAction = ReferenceOption.SET_NULL)
private String rootImageUuid;
@Column
private String installPath;
@Column
@Enumerated(EnumType.STRING)
private VolumeType type;
@Column
@Enumerated(EnumType.STRING)
private VolumeStatus status;
@Column
private long size;
@Column
private Long actualSize;
@Column
private Integer deviceId;
@Column
private String format;
@Column
@Enumerated(EnumType.STRING)
private VolumeState state;
@Column
private Timestamp createDate;
@Column
private Timestamp lastOpDate;
@Column
private boolean isShareable;
@Transient
private VolumeAO shadow;
public VolumeAO() {
this.state = VolumeState.Enabled;
}
public boolean isShareable() {
return isShareable;
}
public void setShareable(boolean shareable) {
isShareable = shareable;
}
public VolumeAO getShadow() {
return shadow;
}
@Override
public void setShadow(Object o) {
shadow = (VolumeAO) o;
}
@PreUpdate
private void preUpdate() {
lastOpDate = null;
}
public Long getActualSize() {
return actualSize;
}
public void setActualSize(Long actualSize) {
this.actualSize = actualSize;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getDiskOfferingUuid() {
return diskOfferingUuid;
}
public void setDiskOfferingUuid(String diskOfferingUuid) {
this.diskOfferingUuid = diskOfferingUuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPrimaryStorageUuid() {
return primaryStorageUuid;
}
public void setPrimaryStorageUuid(String primaryStorageUuid) {
this.primaryStorageUuid = primaryStorageUuid;
}
public String getVmInstanceUuid() {
return vmInstanceUuid;
}
public void setVmInstanceUuid(String vmInstanceUuid) {
this.vmInstanceUuid = vmInstanceUuid;
}
public String getInstallPath() {
return installPath;
}
public void setInstallPath(String installPath) {
this.installPath = installPath;
}
public VolumeType getType() {
return type;
}
public void setType(VolumeType volumeType) {
this.type = volumeType;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public VolumeState getState() {
return state;
}
public void setState(VolumeState state) {
this.state = state;
}
public boolean isAttached() {
return this.vmInstanceUuid != null;
}
public String getRootImageUuid() {
return rootImageUuid;
}
public void setRootImageUuid(String rootImageUuid) {
this.rootImageUuid = rootImageUuid;
}
public Timestamp getCreateDate() {
return createDate;
}
public void setCreateDate(Timestamp createDate) {
this.createDate = createDate;
}
public Timestamp getLastOpDate() {
return lastOpDate;
}
public void setLastOpDate(Timestamp lastOpDate) {
this.lastOpDate = lastOpDate;
}
public Integer getDeviceId() {
return deviceId;
}
public void setDeviceId(Integer deviceId) {
this.deviceId = deviceId;
}
public VolumeStatus getStatus() {
return status;
}
public void setStatus(VolumeStatus status) {
this.status = status;
}
}