package org.ovirt.engine.core.bll.storage.pool;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.QueriesCommandBase;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.core.dao.ClusterDao;
import org.ovirt.engine.core.dao.StoragePoolDao;
public class GetAvailableStoragePoolVersionsQuery<P extends IdQueryParameters>
extends QueriesCommandBase<P> {
@Inject
private StoragePoolDao storagePoolDao;
@Inject
private ClusterDao clusterDao;
public GetAvailableStoragePoolVersionsQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
if (getParameters().getId() != null) {
ArrayList<Version> result = new ArrayList<>();
StoragePool storagePool = storagePoolDao.get(getParameters().getId());
if (storagePool != null) {
List<Cluster> clusters =
clusterDao.getAllForStoragePool(storagePool.getId(), getUserID(), getParameters().isFiltered());
for (Version supportedVer : Config
.<HashSet<Version>> getValue(ConfigValues.SupportedClusterLevels)) {
// if version lower than current skip because cannot
// decrease version
if (supportedVer.compareTo(storagePool.getCompatibilityVersion()) < 0) {
continue;
}
boolean versionOk = true;
// check all clusters are not grater than this ver
for (Cluster cluster : clusters) {
if (supportedVer.compareTo(cluster.getCompatibilityVersion()) > 0) {
versionOk = false;
break;
}
}
if (versionOk) {
result.add(supportedVer);
}
}
}
getQueryReturnValue().setReturnValue(result);
} else {
getQueryReturnValue().setReturnValue(
new ArrayList<>(Config.<HashSet<Version>> getValue(ConfigValues.SupportedClusterLevels)));
}
}
}