package org.ovirt.engine.core.bll.storage;
import java.util.List;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.SetStoragePoolStatusParameters;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
import org.ovirt.engine.core.common.businessentities.storage_pool_iso_map;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields;
@CustomLogFields({ @CustomLogField("Error") })
public class SetStoragePoolStatusCommand<T extends SetStoragePoolStatusParameters> extends
StorageHandlingCommandBase<T> {
public SetStoragePoolStatusCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
getStoragePool().setstatus(getParameters().getStatus());
setVdsIdRef(getStoragePool().getspm_vds_id());
DbFacade.getInstance().getStoragePoolDAO().updateStatus(getStoragePool().getId(), getStoragePool().getstatus());
if (getParameters().getStatus() == StoragePoolStatus.Problematic
|| getParameters().getStatus() == StoragePoolStatus.NotOperational) {
List<storage_pool_iso_map> storagesStatusInPool = DbFacade.getInstance()
.getStoragePoolIsoMapDAO().getAllForStoragePool(getStoragePool().getId());
for (storage_pool_iso_map storageStatusInPool : storagesStatusInPool) {
if (storageStatusInPool.getstatus() != null
&& storageStatusInPool.getstatus() == StorageDomainStatus.Active) {
storageStatusInPool.setstatus(StorageDomainStatus.Unknown);
DbFacade.getInstance()
.getStoragePoolIsoMapDAO()
.updateStatus(storageStatusInPool.getId(), storageStatusInPool.getstatus());
}
}
}
StoragePoolStatusHandler.PoolStatusChanged(getStoragePool().getId(), getStoragePool().getstatus());
setSucceeded(true);
}
public String getError() {
return Backend.getInstance().getVdsErrorsTranslator()
.TranslateErrorTextSingle(getParameters().getError().toString());
}
@Override
public AuditLogType getAuditLogTypeValue() {
if (getSucceeded()) {
if (StringHelper.isNullOrEmpty(getVdsName())) {
setVdsName("Unavailable");
}
return getParameters().getAuditLogType();
} else {
return AuditLogType.SYSTEM_FAILED_CHANGE_STORAGE_POOL_STATUS;
}
}
@Override
protected boolean canDoAction() {
return CheckStoragePool();
}
}