package org.ovirt.engine.core.bll; import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.IdParameters; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.dao.QuotaDao; public class RemoveQuotaCommand extends CommandBase<IdParameters> { @Inject private QuotaDao quotaDao; private Quota quota; public RemoveQuotaCommand(IdParameters parameters, CommandContext cmdContext) { super(parameters, cmdContext); } @Override protected boolean validate() { if (getParameters() == null || (getParameters().getId() == null)) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_QUOTA_NOT_EXIST); return false; } Quota quota = getQuota(); if (quota == null) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_QUOTA_NOT_EXIST); return false; } if (quota.isDefault()) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_QUOTA_DEFAULT_CANNOT_BE_CHANGED); return false; } // If the quota is in use by ether VM or image - return false if (!QuotaEnforcementTypeEnum.DISABLED.equals(quota.getQuotaEnforcementType()) && quotaDao.isQuotaInUse(quota)) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_QUOTA_IN_USE_BY_VM_OR_DISK); return false; } // Otherwise return true; } @Override protected void executeCommand() { quotaDao.remove(getParameters().getId()); getQuotaManager().removeQuotaFromCache(getQuota().getStoragePoolId(), getParameters().getId()); getReturnValue().setSucceeded(true); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.singletonList(new PermissionSubject(getParameters().getId(), VdcObjectType.Quota, getActionType().getActionGroup())); } @Override protected void setActionMessageParameters() { addValidationMessage(EngineMessage.VAR__ACTION__REMOVE); addValidationMessage(EngineMessage.VAR__TYPE__QUOTA); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.USER_DELETE_QUOTA : AuditLogType.USER_FAILED_DELETE_QUOTA; } public Quota getQuota() { if (quota == null) { setQuota(quotaDao.getById(getParameters().getId())); } return quota; } public void setQuota(Quota quota) { this.quota = quota; } }