package org.ovirt.engine.core.bll.validator.storage;
import java.util.Arrays;
import java.util.List;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.ClusterDao;
import org.ovirt.engine.core.dao.StoragePoolIsoMapDao;
/**
* Validate validation methods for storage pool handling
*/
public class StoragePoolValidator {
private StoragePool storagePool;
public StoragePoolValidator(StoragePool storagePool) {
this.storagePool = storagePool;
}
protected ClusterDao getClusterDao() {
return DbFacade.getInstance().getClusterDao();
}
public StoragePoolIsoMapDao getStoragePoolIsoMapDao() {
return DbFacade.getInstance().getStoragePoolIsoMapDao();
}
public ValidationResult isNotLocalfsWithDefaultCluster() {
if (storagePool.isLocal() && containsDefaultCluster()) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_STORAGE_POOL_WITH_DEFAULT_CLUSTER_CANNOT_BE_LOCALFS);
}
return ValidationResult.VALID;
}
protected boolean containsDefaultCluster() {
List<Cluster> clusters = getClusterDao().getAllForStoragePool(storagePool.getId());
boolean hasDefaultCluster = false;
for (Cluster cluster : clusters) {
if (cluster.getId().equals(Config.getValue(ConfigValues.AutoRegistrationDefaultClusterID))) {
hasDefaultCluster = true;
break;
}
}
return hasDefaultCluster;
}
public ValidationResult isUp() {
if (storagePool == null || storagePool.getStatus() != StoragePoolStatus.Up) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_IMAGE_REPOSITORY_NOT_FOUND);
}
return ValidationResult.VALID;
}
public ValidationResult isAnyDomainInProcess() {
List<StoragePoolIsoMap> poolIsoMaps = getStoragePoolIsoMapDao().getAllForStoragePool(storagePool.getId());
for (StoragePoolIsoMap domainIsoMap : poolIsoMaps) {
if (domainIsoMap.getStatus() != null && domainIsoMap.getStatus().isStorageDomainInProcess()) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2,
String.format("$status %1$s", domainIsoMap.getStatus()));
}
}
return ValidationResult.VALID;
}
public ValidationResult checkStoragePoolNotInStatus(StoragePoolStatus... statuses) {
List<StoragePoolStatus> statusList = Arrays.asList(statuses);
if (!statusList.contains(storagePool.getStatus())) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_STORAGE_POOL_STATUS_ILLEGAL);
}
return ValidationResult.VALID;
}
}