package org.ovirt.engine.core.bll; import java.text.MessageFormat; import org.ovirt.engine.core.bll.storage.StorageHandlingCommandBase; import org.ovirt.engine.core.bll.utils.VersionSupport; import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetAvailableClusterVersionsParameters; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class GetAvailableClusterVersionsQuery<P extends GetAvailableClusterVersionsParameters> extends QueriesCommandBase<P> { public GetAvailableClusterVersionsQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { if (getParameters().getVdsGroupId() != null) { java.util.ArrayList<Version> result = new java.util.ArrayList<Version>(); VDSGroup cluster = DbFacade.getInstance().getVdsGroupDAO().get(getParameters().getVdsGroupId()); if (cluster != null) { SearchParameters p = new SearchParameters(MessageFormat.format( StorageHandlingCommandBase.UpVdssInCluster, cluster.getname()), SearchType.VDS); p.setMaxCount(Integer.MAX_VALUE); Iterable<IVdcQueryable> clusterUpVdss = (Iterable<IVdcQueryable>) Backend.getInstance() .runInternalQuery(VdcQueryType.Search, p).getReturnValue(); for (Version supportedVer : Config .<java.util.HashSet<Version>> GetValue(ConfigValues.SupportedClusterLevels)) { // if version lower than current skip because cannot // decrease version if (supportedVer.compareTo(cluster.getcompatibility_version()) < 0) { continue; } boolean versionOk = true; // check all vdss support this ver for (IVdcQueryable vds : clusterUpVdss) { if (!VersionSupport.checkClusterVersionSupported(cluster.getcompatibility_version(), (VDS) vds)) { versionOk = false; break; } } if (versionOk) { result.add(supportedVer); } } } getQueryReturnValue().setReturnValue(result); } else { getQueryReturnValue().setReturnValue( new java.util.ArrayList<Version>(Config .<java.util.HashSet<Version>> GetValue(ConfigValues.SupportedClusterLevels))); } } }