package org.ovirt.engine.core.common.businessentities;
import java.util.Map;
import java.util.Objects;
import org.ovirt.engine.core.common.businessentities.comparators.BusinessEntityComparator;
import org.ovirt.engine.core.common.utils.ToStringBuilder;
import org.ovirt.engine.core.compat.Guid;
/**
* The VmDevice represents a managed or unmanaged VM device.<br>
* The VmDevice data consists of this entity which holds the immutable fields of the device.<br>
* Each device have a link to its VM id , an address and optional boot order and additional special device parameters. <br>
* This BE holds both managed (disk, network interface etc.) and unmanaged (sound, video etc.) devices.
*/
public class VmDevice implements IVdcQueryable, BusinessEntity<VmDeviceId>, Comparable<VmDevice> {
private static final long serialVersionUID = 826297167224396854L;
/** Device id and Vm id pair as a compound key */
private VmDeviceId id;
/** The device name. */
private String device;
/** The device type. */
private VmDeviceGeneralType type;
/** The device address. */
private String address;
/** The device boot order (if applicable). */
@TransientField
private int bootOrder;
/** The device special parameters. */
private Map<String, Object> specParams;
/** The device managed/unmanaged flag */
private boolean managed;
/** The device plugged flag */
private boolean plugged;
/** The device read-only flag */
private Boolean readOnly;
/** The device flag indicating whether the device is a device from a taken snapshot */
private Guid snapshotId;
/** The device alias. */
private String alias;
/** The device logical name. */
private String logicalName;
/** Map of custom properties */
private Map<String, String> customProperties;
/** The passthrough host device this vm device represents in case there is any. */
private String hostDevice;
public VmDevice() {
alias = "";
}
public VmDevice(VmDeviceId id, VmDeviceGeneralType type, String device, String address,
Map<String, Object> specParams,
boolean isManaged,
Boolean isPlugged,
Boolean isReadOnly,
String alias,
Map<String, String> customProperties,
Guid snapshotId,
String logicalName) {
this.id = id;
this.type = type;
this.device = device;
this.address = address;
this.specParams = specParams;
this.managed = isManaged;
this.plugged = isPlugged;
this.readOnly = isReadOnly;
this.alias = alias;
this.customProperties = customProperties;
this.snapshotId = snapshotId;
this.logicalName = logicalName;
}
@Override
public Object getQueryableId() {
return getId();
}
@Override
public VmDeviceId getId() {
return id;
}
@Override
public void setId(VmDeviceId id) {
this.id = id;
}
public Guid getDeviceId() {
return id.getDeviceId();
}
public void setDeviceId(Guid deviceId) {
id.setDeviceId(deviceId);
}
public Guid getVmId() {
return id.getVmId();
}
public void setVmId(Guid vmId) {
this.id.setVmId(vmId);
}
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public VmDeviceGeneralType getType() {
return type;
}
public void setType(VmDeviceGeneralType type) {
this.type = type;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getBootOrder() {
return bootOrder;
}
public void setBootOrder(int bootOrder) {
this.bootOrder = bootOrder;
}
public Map<String, Object> getSpecParams() {
return specParams;
}
public void setSpecParams(Map<String, Object> specParams) {
this.specParams = specParams;
}
public boolean isManaged() {
return managed;
}
public void setManaged(boolean managed) {
this.managed = managed;
}
public boolean isPlugged() {
return plugged;
}
public void setPlugged(boolean plugged) {
this.plugged = plugged;
}
public Boolean getReadOnly() {
return readOnly == null ? Boolean.FALSE : readOnly;
}
public void setReadOnly(Boolean readOnly) {
this.readOnly = readOnly;
}
public Guid getSnapshotId() {
return snapshotId;
}
public void setSnapshotId(Guid snapshotId) {
this.snapshotId = snapshotId;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public String getLogicalName() {
return logicalName;
}
public void setLogicalName(String logicalName) {
this.logicalName = logicalName;
}
public Map<String, String> getCustomProperties() {
return customProperties;
}
public void setCustomProperties(Map<String, String> customProperties) {
this.customProperties = customProperties;
}
public String getHostDevice() {
return hostDevice;
}
public void setHostDevice(String hostDevice) {
this.hostDevice = hostDevice;
}
@Override
public int hashCode() {
return Objects.hash(
id,
device,
type,
address,
specParams,
managed,
plugged,
getReadOnly(),
alias,
customProperties,
snapshotId,
logicalName,
hostDevice
);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof VmDevice)) {
return false;
}
VmDevice other = (VmDevice) obj;
return Objects.equals(id, other.id)
&& device.equals(other.device)
&& type.equals(other.type)
&& address.equals(other.address)
&& Objects.equals(specParams, other.specParams)
&& managed == other.managed
&& isPlugged() == other.isPlugged()
&& getReadOnly().equals(other.getReadOnly())
&& alias.equals(other.alias)
&& Objects.equals(customProperties, other.customProperties)
&& Objects.equals(snapshotId, other.snapshotId)
&& Objects.equals(logicalName, other.logicalName)
&& Objects.equals(hostDevice, other.hostDevice);
}
@Override
public String toString() {
return ToStringBuilder.forInstance(this)
.append("id", id)
.append("device", getDevice())
.append("type", getType())
.append("specParams", getSpecParams())
.append("address", getAddress())
.append("managed", isManaged())
.append("plugged", isPlugged())
.append("readOnly", getReadOnly())
.append("deviceAlias", getAlias())
.append("customProperties", getCustomProperties())
.append("snapshotId", getSnapshotId())
.append("logicalName", getLogicalName())
.append("hostDevice", getHostDevice())
.build();
}
@Override
public int compareTo(VmDevice other) {
return BusinessEntityComparator.<VmDevice, VmDeviceId>newInstance().compare(this, other);
}
}