package org.ovirt.engine.core.bll;
import java.util.List;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.VdsGroupParametersBase;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.vm_pools;
import org.ovirt.engine.core.common.validation.group.RemoveEntity;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class RemoveVdsGroupCommand<T extends VdsGroupParametersBase> extends VdsGroupCommandBase<T> {
public RemoveVdsGroupCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
DbFacade.getInstance().getVdsGroupDAO().remove(getVdsGroup().getID());
setSucceeded(true);
}
@Override
protected boolean canDoAction() {
List<vm_pools> list = null;
boolean returnValue = super.canDoAction();
getReturnValue().getCanDoActionMessages()
.add(VdcBllMessages.VAR__ACTION__REMOVE.toString());
if (getVdsGroup().getID().equals(VDSGroup.DEFAULT_VDS_GROUP_ID)) {
addCanDoActionMessage(VdcBllMessages.VDS_CANNOT_REMOVE_DEFAULT_VDS_GROUP);
returnValue = false;
}
if (DbFacade.getInstance().getVdsStaticDAO().getAllForVdsGroup(getVdsGroup().getID()).size() != 0) {
addCanDoActionMessage(VdcBllMessages.VDS_CANNOT_REMOVE_VDS_GROUP_VDS_DETECTED);
returnValue = false;
}
if (DbFacade.getInstance().getVmStaticDAO().getAllByVdsGroup(getVdsGroup().getID()).size() != 0) {
addCanDoActionMessage(VdcBllMessages.VM_CANNOT_REMOVE_VDS_GROUP_VMS_DETECTED);
returnValue = false;
}
if (DbFacade.getInstance().getVmTemplateDAO().getAllForVdsGroup(getVdsGroup().getID()).size() != 0) {
addCanDoActionMessage(VdcBllMessages.VMT_CANNOT_REMOVE_VDS_GROUP_VMTS_DETECTED);
returnValue = false;
}
if ((list = DbFacade.getInstance().getVmPoolDAO().getAll()).size() > 0) {
for (vm_pools pool : list) {
if (pool.getvds_group_id().equals(getVdsGroup().getID())) {
addCanDoActionMessage(VdcBllMessages.VDS_GROUP_CANNOT_REMOVE_HAS_VM_POOLS);
returnValue = false;
break;
}
}
}
return returnValue;
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.USER_REMOVE_VDS_GROUP
: AuditLogType.USER_REMOVE_VDS_GROUP_FAILED;
}
@Override
protected List<Class<?>> getValidationGroups() {
addValidationGroup(RemoveEntity.class);
return super.getValidationGroups();
}
}