package org.ovirt.engine.core.common.businessentities.network; import java.util.Objects; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import org.ovirt.engine.core.common.utils.MacAddressValidationPatterns; import org.ovirt.engine.core.common.utils.ToStringBuilder; import org.ovirt.engine.core.common.validation.annotation.ValidNameWithDot; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.validation.group.UpdateEntity; import org.ovirt.engine.core.common.validation.group.UpdateVmNic; import org.ovirt.engine.core.compat.Guid; /** * <code>VmNic</code> defines a type of {@link NetworkInterface} for instances of {@link VM}. */ public class VmNic extends NetworkInterface<VmNetworkStatistics> { private static final long serialVersionUID = 7428150502868988886L; static final String VALIDATION_MESSAGE_MAC_ADDRESS_NOT_NULL = "VALIDATION_VM_NETWORK_MAC_ADDRESS_NOT_NULL"; static final String VALIDATION_MESSAGE_NAME_NOT_NULL = "VALIDATION_VM_NETWORK_NAME_NOT_NULL"; public static final String VALIDATION_MESSAGE_MAC_ADDRESS_INVALID = "VALIDATION_VM_NETWORK_MAC_ADDRESS_INVALID"; public static final String VALIDATION_VM_NETWORK_MAC_ADDRESS_MULTICAST = "VALIDATION_VM_NETWORK_MAC_ADDRESS_MULTICAST"; private Guid vmId; private Guid vnicProfileId; private Guid vmTemplateId; /** * Link State of the Nic. <BR> * <code>true</code> if UP and <code>false</code> if DOWN. */ private boolean linked; public VmNic() { super(new VmNetworkStatistics(), VmInterfaceType.pv.getValue()); linked = true; } public void setVmId(Guid vmId) { this.vmId = vmId; this.statistics.setVmId(vmId); } public Guid getVmId() { return vmId; } @Override public Object getQueryableId() { return getVmId(); } public void setVmTemplateId(Guid vmTemplateId) { this.vmTemplateId = vmTemplateId; } public Guid getVmTemplateId() { return vmTemplateId; } public boolean isLinked() { return linked; } public void setLinked(boolean linked) { this.linked = linked; } @NotNull(message = VALIDATION_MESSAGE_NAME_NOT_NULL, groups = { CreateEntity.class, UpdateEntity.class }) @ValidNameWithDot(groups = { CreateEntity.class, UpdateEntity.class }) @Override public String getName() { return super.getName(); } @NotNull(message = VALIDATION_MESSAGE_MAC_ADDRESS_NOT_NULL, groups = { UpdateVmNic.class }) @Pattern.List({ @Pattern(regexp = "(^$)|(" + MacAddressValidationPatterns.VALID_MAC_ADDRESS_FORMAT + ")", message = VALIDATION_MESSAGE_MAC_ADDRESS_INVALID, groups = { CreateEntity.class }), @Pattern(regexp = "(^$)|(" + MacAddressValidationPatterns.NON_MULTICAST_MAC_ADDRESS_FORMAT + ")", message = VALIDATION_VM_NETWORK_MAC_ADDRESS_MULTICAST, groups = { CreateEntity.class }), @Pattern(regexp = MacAddressValidationPatterns.VALID_MAC_ADDRESS_FORMAT, message = VALIDATION_MESSAGE_MAC_ADDRESS_INVALID, groups = { UpdateEntity.class }), @Pattern(regexp = MacAddressValidationPatterns.NON_MULTICAST_MAC_ADDRESS_FORMAT, message = VALIDATION_VM_NETWORK_MAC_ADDRESS_MULTICAST, groups = { UpdateEntity.class }), @Pattern(regexp = MacAddressValidationPatterns.NON_NULLABLE_MAC_ADDRESS_FORMAT, message = VALIDATION_MESSAGE_MAC_ADDRESS_INVALID, groups = { CreateEntity.class, UpdateEntity.class }) }) @Override public String getMacAddress() { return super.getMacAddress(); } public Guid getVnicProfileId() { return vnicProfileId; } public void setVnicProfileId(Guid vnicProfileId) { this.vnicProfileId = vnicProfileId; } @Override public String toString() { return ToStringBuilder.forInstance(this) .append("id", getId()) .append("vnicProfileId", getVnicProfileId()) .append("speed", getSpeed()) .append("type", getType()) .append("macAddress", getMacAddress()) .append("linked", isLinked()) .append("vmId", getVmId()) .append("vmTemplateId", getVmTemplateId()) .build(); } @Override public int hashCode() { return Objects.hash( super.hashCode(), linked, vmId, vnicProfileId, vmTemplateId ); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof VmNic)) { return false; } VmNic other = (VmNic) obj; return super.equals(obj) && Objects.equals(vmId, other.vmId) && Objects.equals(vnicProfileId, other.vnicProfileId) && Objects.equals(vmTemplateId, other.vmTemplateId); } public boolean isPassthrough() { return VmInterfaceType.pciPassthrough.equals(VmInterfaceType.forValue(getType())); } }