package org.ovirt.engine.core.common.businessentities.storage; import java.util.Date; import java.util.Objects; import javax.validation.constraints.NotNull; import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus; import org.ovirt.engine.core.common.businessentities.LeaseStatus; 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; public class Image implements BusinessEntityWithStatus<Guid, ImageStatus> { private static final long serialVersionUID = -7058426105212449257L; private Guid id; private boolean active; private VolumeClassification volumeClassification; private Date creationDate; private Date lastModified; private Guid parentId; private Guid templateImageId; private Guid snapshotId; private Guid diskId; private ImageStatus status; @NotNull(message = "VALIDATION_VOLUME_TYPE_NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class }) private VolumeType volumeType; private long size; @NotNull(message = "VALIDATION_VOLUME_FORMAT_NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class }) private VolumeFormat volumeFormat; private QcowCompat qcowCompat = QcowCompat.Undefined; private LeaseStatus leaseStatus; private Integer generation; public Image() { id = Guid.Empty; creationDate = new Date(); lastModified = new Date(0); parentId = Guid.Empty; templateImageId = Guid.Empty; status = ImageStatus.Unassigned; volumeType = VolumeType.Sparse; } @Override public Guid getId() { return id; } @Override public void setId(Guid id) { this.id = id; } public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } public Date getLastModified() { return lastModified; } public void setLastModified(Date lastModified) { this.lastModified = lastModified; } public Guid getParentId() { return parentId; } public void setParentId(Guid parentId) { this.parentId = parentId; } public Guid getTemplateImageId() { return templateImageId; } public void setTemplateImageId(Guid templateImageId) { this.templateImageId = templateImageId; } public Guid getSnapshotId() { return snapshotId; } public void setSnapshotId(Guid snapshotId) { this.snapshotId = snapshotId; } public Guid getDiskId() { return diskId; } public void setDiskId(Guid diskId) { this.diskId = diskId; } @Override public ImageStatus getStatus() { return status; } @Override public void setStatus(ImageStatus status) { this.status = status; } public VolumeType getVolumeType() { return volumeType; } public void setVolumeType(VolumeType volumeType) { this.volumeType = volumeType; } public long getSize() { return size; } public void setSize(long size) { this.size = size; } public VolumeFormat getVolumeFormat() { return volumeFormat; } public void setVolumeFormat(VolumeFormat volumeFormat) { this.volumeFormat = volumeFormat; } public QcowCompat getQcowCompat() { return qcowCompat; } public void setQcowCompat(QcowCompat qcowCompat) { this.qcowCompat = qcowCompat; } public VolumeClassification getVolumeClassification() { if (volumeClassification == null) { return active ? VolumeClassification.Volume : VolumeClassification.Snapshot; } return volumeClassification; } public void setVolumeClassification(VolumeClassification volumeClassification) { this.volumeClassification = volumeClassification; } public LeaseStatus getLeaseStatus() { return leaseStatus; } public void setLeaseStatus(LeaseStatus leaseStatus) { this.leaseStatus = leaseStatus; } public Integer getGeneration() { return generation; } public void setGeneration(Integer generation) { this.generation = generation; } @Override public int hashCode() { return Objects.hash( id, active, lastModified, parentId, snapshotId, status, templateImageId ); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Image)) { return false; } Image other = (Image) obj; return Objects.equals(id, other.id) && active == other.active && Objects.equals(lastModified, other.lastModified) && Objects.equals(parentId, other.parentId) && Objects.equals(snapshotId, other.snapshotId) && status == other.status && Objects.equals(templateImageId, other.templateImageId); } }