package org.ovirt.engine.core.bll.validator;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.qos.QosDao;
import org.ovirt.engine.core.utils.ReplacementUtils;
public class HostNetworkQosValidator extends QosValidator<HostNetworkQos> {
public HostNetworkQosValidator(HostNetworkQos qos) {
super(qos);
}
@Override
public ValidationResult requiredValuesPresent() {
/*
only getOutAverageLinkshare is mandatory, getOutAverageUpperlimit(), getOutAverageRealtime() are not.
* */
HostNetworkQos qos = getQos();
boolean shouldFail = qos != null && qos.getOutAverageLinkshare() == null;
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_MISSING_VALUES).when(
shouldFail);
}
public ValidationResult requiredQosValuesPresentForOverriding(String networkName) {
HostNetworkQos qos = getQos();
boolean shouldFail = qos != null && !qos.isEmpty() && qos.getOutAverageLinkshare() == null;
return ValidationResult.failWith(EngineMessage.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES,
ReplacementUtils.createSetVariableString(
"ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_MISSING_VALUES_LIST",
networkName))
.when(shouldFail);
}
/**
* Verify that if upper limit and real time rates are provided, real time isn't lower than upper limit.
*/
public ValidationResult valuesConsistent() {
return valuesConsistent(null);
}
public ValidationResult valuesConsistent(String networkName) {
HostNetworkQos qos = getQos();
if (qos == null) {
return ValidationResult.VALID;
}
Integer outUpperlimit = qos.getOutAverageUpperlimit();
Integer outRealtime = qos.getOutAverageRealtime();
boolean shouldFail = outUpperlimit != null && outRealtime != null && outUpperlimit < outRealtime;
if (networkName == null) {
return ValidationResult
.failWith(EngineMessage.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_INCONSISTENT_VALUES)
.when(shouldFail);
} else {
return ValidationResult
.failWith(EngineMessage.ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES,
ReplacementUtils.createSetVariableString(
"ACTION_TYPE_FAILED_HOST_NETWORK_QOS_SETUP_NETWORKS_INCONSISTENT_VALUES_LIST",
networkName))
.when(shouldFail);
}
}
@Override
protected QosDao<HostNetworkQos> getQosDao() {
return DbFacade.getInstance().getHostNetworkQosDao();
}
}