package org.ovirt.engine.core.bll.qos;
import java.util.Objects;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.validator.HostNetworkQosValidator;
import org.ovirt.engine.core.common.action.QosParametersBase;
import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.network.HostNetworkQosDao;
public class UpdateHostNetworkQosCommand extends UpdateQosCommandBase<HostNetworkQos, HostNetworkQosValidator> {
@Inject
private RefreshNetworksParametersFactory refreshNetworksParametersFactory;
public UpdateHostNetworkQosCommand(QosParametersBase<HostNetworkQos> parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected HostNetworkQosDao getQosDao() {
return getDbFacade().getHostNetworkQosDao();
}
@Override
protected HostNetworkQosValidator getQosValidator(HostNetworkQos qos) {
return new HostNetworkQosValidator(qos);
}
@Override
protected boolean validate() {
HostNetworkQosValidator validator = getQosValidator(getQos());
return super.validate()
&& validate(validator.requiredValuesPresent())
&& validate(validator.valuesConsistent());
}
@Override
protected void executeCommand() {
Guid qosId = getQosId();
HostNetworkQos oldQos = getQosDao().get(qosId);
HostNetworkQos newQos = getQos();
super.executeCommand();
if (networkUpdateRequired(oldQos, newQos)) {
refreshNetworks(refreshNetworksParametersFactory.create(qosId));
}
}
/**
* @param oldQos Qos entity before update
* @param newQos Qos entity after update
* @return true if Qos entity was update in such way, which needs to update related networks.
*/
private boolean networkUpdateRequired(HostNetworkQos oldQos, HostNetworkQos newQos) {
boolean noChange = Objects.equals(newQos.getOutAverageLinkshare(), oldQos.getOutAverageLinkshare())
&& Objects.equals(newQos.getOutAverageRealtime(), oldQos.getOutAverageRealtime())
&& Objects.equals(newQos.getOutAverageUpperlimit(), oldQos.getOutAverageUpperlimit());
return !noChange;
}
}