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.AuditLogSeverity; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.RemoveAuditLogByIdParameters; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.AuditLog; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.EventFloodRegulator; import org.ovirt.engine.core.dao.AuditLogDao; public class RemoveAuditLogByIdCommand<T extends RemoveAuditLogByIdParameters> extends ExternalEventCommandBase<T> { @Inject private AuditLogDirector auditLogDirector; @Inject private AuditLogDao auditLogDao; private AuditLog auditLog; public RemoveAuditLogByIdCommand(T parameters, CommandContext cmdContext) { super(parameters, cmdContext); } @Override protected boolean validate() { if (getAuditLog() == null) { return failValidation(EngineMessage.AUDIT_LOG_CANNOT_REMOVE_AUDIT_LOG_NOT_EXIST); } return true; } @Override protected void executeCommand() { AuditLog auditLog = getAuditLog(); auditLogDao.remove(getParameters().getAuditLogId()); setAuditLogDetails(auditLog); // clear the id so the auditLog will be considered as a system-level auditLog auditLog.setUserId(Guid.Empty); AuditLogableBase logableToClear = new AuditLogableBase(auditLog); // clean cache manager entry (if exists) EventFloodRegulator eventFloodRegulator = new EventFloodRegulator(logableToClear, auditLog.getLogType()); eventFloodRegulator.evict(); setSucceeded(true); } private AuditLog getAuditLog() { if (auditLog == null) { auditLog = auditLogDao.get(getParameters().getAuditLogId()); } return auditLog; } private void setAuditLogDetails(AuditLog auditLog) { this.setStorageDomainId(auditLog.getStorageDomainId()); this.setStoragePoolId(auditLog.getStoragePoolId()); this.setClusterId(auditLog.getClusterId()); this.setVdsId(auditLog.getVdsId()); this.setVmId(auditLog.getVmId()); this.setVmTemplateId(auditLog.getVmTemplateId()); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { AuditLog event = getAuditLog(); if (AuditLogSeverity.ALERT.equals(event.getSeverity())) { return Collections.singletonList(new PermissionSubject(Guid.SYSTEM, VdcObjectType.System, ActionGroup.AUDIT_LOG_MANAGEMENT)); } return getPermissionList(event); } @Override public AuditLogType getAuditLogTypeValue() { addCustomValue("AuditLogId", String.valueOf(getParameters().getAuditLogId())); return getSucceeded() ? AuditLogType.UNASSIGNED : AuditLogType.USER_REMOVE_AUDIT_LOG_FAILED; } }