package org.ovirt.engine.core.bll; import java.util.EnumMap; import java.util.HashMap; import java.util.Map; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.queries.ArchCapabilitiesParameters; import org.ovirt.engine.core.common.queries.ArchCapabilitiesParameters.ArchCapabilitiesVerb; import org.ovirt.engine.core.compat.Version; public class GetArchitectureCapabilitiesQuery<P extends ArchCapabilitiesParameters> extends QueriesCommandBase<P> { public GetArchitectureCapabilitiesQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { setReturnValue(getMap(getParameters().getArchCapabilitiesVerb())); } private static Map<ArchitectureType, Map<Version, Boolean>> getMap(ArchCapabilitiesVerb archCapabilitiesVerb) { if (archCapabilitiesVerb == null) { return null; } Map<ArchitectureType, Map<Version, Boolean>> supportMap = new EnumMap<>(ArchitectureType.class); for (ArchitectureType arch : ArchitectureType.values()) { Map<Version, Boolean> archMap = new HashMap<>(); for (Version version : Version.ALL) { archMap.put(version, isSupported(archCapabilitiesVerb, arch, version)); } supportMap.put(arch, archMap); } return supportMap; } /** * Checks if a feature is supported * * @param archCapabilitiesVerb * The feature * @param architecture * The CPU Architecture * @param version * The cluster compatibility version */ private static boolean isSupported(ArchCapabilitiesVerb archCapabilitiesVerb, ArchitectureType architecture, Version version) { switch (archCapabilitiesVerb) { case GetMigrationSupport: return FeatureSupported.isMigrationSupported(architecture, version); case GetMemorySnapshotSupport: return FeatureSupported.isMemorySnapshotSupportedByArchitecture(architecture, version); case GetSuspendSupport: return FeatureSupported.isSuspendSupportedByArchitecture(architecture, version); case GetMemoryHotUnplugSupport: return FeatureSupported.hotUnplugMemory(version, architecture); } return false; } }