package org.ovirt.engine.core.bll.qos; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.ovirt.engine.core.bll.CommandBase; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.network.HostSetupNetworksParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.QosValidator; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.QosParametersBase; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.qos.QosDao; public abstract class QosCommandBase<T extends QosBase, M extends QosValidator<T>> extends CommandBase<QosParametersBase<T>> { private T qos; private Guid qosId; public QosCommandBase(QosParametersBase<T> parameters, CommandContext cmdContext) { super(parameters, cmdContext); } @Override protected void init() { super.init(); if (getQos() != null) { setStoragePoolId(getQos().getStoragePoolId()); addCustomValue("QosName", getQos().getName()); } getParameters().setShouldBeLogged(true); } @Override protected boolean validate() { M validator = getQosValidator(getQos()); return validateParameters() && validate(validator.requiredValuesPresent()); } public T getQos() { if (qos == null) { if (getParameters().getQos() == null) { if (getParameters().getQosId() != null) { qos = getQosDao().get(getParameters().getQosId()); } } else { qos = getParameters().getQos(); } } return qos; } public Guid getQosId() { if (qosId == null) { if (getParameters().getQosId() != null) { qosId = getParameters().getQosId(); } else if (getParameters().getQos() != null) { qosId = getParameters().getQos().getId(); } } return qosId; } @Override public Guid getStoragePoolId() { if (super.getStoragePoolId() == null && getQos() != null) { setStoragePoolId(getQos().getStoragePoolId()); } return super.getStoragePoolId(); } protected boolean validateParameters() { if (getQos() == null) { return failValidation(EngineMessage.ACTION_TYPE_FAILED_QOS_NOT_FOUND); } return true; } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.singletonList(new PermissionSubject(getStoragePoolId(), VdcObjectType.StoragePool, getActionType().getActionGroup())); } protected abstract QosDao<T> getQosDao(); @Override protected void setActionMessageParameters() { addValidationMessage(EngineMessage.VAR__TYPE__QOS); } protected abstract M getQosValidator(T qosBase); protected void refreshNetworks(ArrayList<VdcActionParametersBase> parameters) { if (!parameters.isEmpty()) { HostSetupNetworksParametersBuilder.updateParametersSequencing(parameters); runInternalMultipleActions(VdcActionType.PersistentHostSetupNetworks, parameters); } } }