package org.ovirt.engine.core.common.businessentities.storage;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.ovirt.engine.core.common.businessentities.VmEntityType;
/**
* The disk is contains data from the {@link BaseDisk} and the storage specific details for the disk, which are
* determined by {@link Disk#getDiskStorageType()}.<br>
* The disk may be attached to a VM or Template, which is indicated by {@link Disk#getVmEntityType()}. If it is null,
* then the disk is detached (floating).<br>
* <br>
* <b>Preferably, use this entity as the base reference wherever you don't need to hold a reference of a specific
* storage implementation.</b>
*/
public abstract class Disk extends BaseDisk {
private static final long serialVersionUID = 1380107681294904254L;
/**
* The VM Type is indicated by this field, or <code>null</code> if it is detached.
*/
private VmEntityType vmEntityType;
private int numberOfVms;
private ArrayList<String> vmNames;
private List<String> templateVersionNames;
/**
* Plugged and readOnly are of type Boolean (as opposed to boolean) since they are optional.
* In case the disk is not in a vm context, null will ensure they are invisible.
*/
private boolean plugged;
private String logicalName;
/**
* Image Transfer information is only for display purposes
*/
private ImageTransferPhase imageTransferPhase;
private Long imageTransferBytesSent;
private Long imageTransferBytesTotal;
/**
* @return Whether taking snapshots of this disk is allowed
*/
public abstract boolean isAllowSnapshot();
public VmEntityType getVmEntityType() {
return vmEntityType;
}
public void setVmEntityType(VmEntityType vmEntityType) {
this.vmEntityType = vmEntityType;
}
public boolean getPlugged() {
return plugged;
}
public void setPlugged(boolean plugged) {
this.plugged = plugged;
}
public String getLogicalName() {
return logicalName;
}
public void setLogicalName(String logicalName) {
this.logicalName = logicalName;
}
public abstract long getSize();
public ImageTransferPhase getImageTransferPhase() {
return imageTransferPhase;
}
public void setImageTransferPhase(ImageTransferPhase imageTransferPhase) {
this.imageTransferPhase = imageTransferPhase;
}
public Long getImageTransferBytesSent() {
return imageTransferBytesSent;
}
public void setImageTransferBytesSent(Long imageTransferBytesSent) {
this.imageTransferBytesSent = imageTransferBytesSent;
}
public Long getImageTransferBytesTotal() {
return imageTransferBytesTotal;
}
public void setImageTransferBytesTotal(Long imageTransferBytesTotal) {
this.imageTransferBytesTotal = imageTransferBytesTotal;
}
@Override
public int hashCode() {
return Objects.hash(
super.hashCode(),
plugged,
vmNames,
templateVersionNames,
vmEntityType,
numberOfVms,
logicalName
);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Disk)) {
return false;
}
Disk other = (Disk) obj;
return super.equals(obj)
&& Objects.equals(plugged, other.plugged)
&& Objects.equals(vmNames, other.vmNames)
&& Objects.equals(templateVersionNames, other.templateVersionNames)
&& Objects.equals(logicalName, other.logicalName)
&& vmEntityType == other.vmEntityType
&& numberOfVms == other.numberOfVms;
}
public int getNumberOfVms() {
return numberOfVms;
}
public void setNumberOfVms(int numberOfVms) {
this.numberOfVms = numberOfVms;
}
public ArrayList<String> getVmNames() {
return vmNames;
}
public void setVmNames(ArrayList<String> vmNames) {
this.vmNames = vmNames;
}
public List<String> getTemplateVersionNames() {
return this.templateVersionNames;
}
public void setTemplateVersionNames(List<String> templateVersionNames) {
this.templateVersionNames = templateVersionNames;
}
@JsonIgnore
public boolean isDiskSnapshot() {
return false;
}
@JsonIgnore
public boolean isOvfStore() {
return getContentType() == DiskContentType.OVF_STORE;
}
}