package org.ovirt.engine.core.bll.storage.pool;
import java.util.EnumSet;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.storage.StorageHandlingCommandBase;
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.dao.StoragePoolDao;
import org.ovirt.engine.core.vdsbroker.storage.StoragePoolDomainHelper;
public class SetStoragePoolStatusCommand<T extends SetStoragePoolStatusParameters> extends
StorageHandlingCommandBase<T> {
@Inject
private StoragePoolDomainHelper storagePoolDomainHelper;
@Inject
private StoragePoolDao storagePoolDao;
public SetStoragePoolStatusCommand(T parameters, CommandContext commandContext) {
super(parameters, commandContext);
}
@Override
protected void executeCommand() {
getStoragePool().setStatus(getParameters().getStatus());
setVdsIdRef(getStoragePool().getSpmVdsId());
storagePoolDao.updateStatus(getStoragePool().getId(), getStoragePool().getStatus());
if (getParameters().getStatus() == StoragePoolStatus.NonResponsive
|| getParameters().getStatus() == StoragePoolStatus.NotOperational) {
storagePoolDomainHelper.updateApplicablePoolDomainsStatuses(getStoragePool().getId(),
EnumSet.of(StorageDomainStatus.Active),
StorageDomainStatus.Unknown,
null);
}
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 (StringUtils.isEmpty(getVdsName())) {
setVdsName("Unavailable");
}
return getParameters().getAuditLogType();
} else {
return AuditLogType.SYSTEM_FAILED_CHANGE_STORAGE_POOL_STATUS;
}
}
@Override
protected boolean validate() {
return checkStoragePool();
}
}