package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigCommon; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters; public class GetConfigurationValueQuery<P extends GetConfigurationValueParameters> extends QueriesCommandBase<P> { public GetConfigurationValueQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { Object returnValue = null; if (shouldReturnValue()) { try { final GetConfigurationValueParameters params = getParameters(); final ConfigValues value = ConfigValues.valueOf(params.getConfigValue().toString()); String version = params.getVersion(); if (version == null) { log.warn("calling {} ({}) with null version, using default {} for version", GetConfigurationValueQuery.class.getSimpleName(), value, ConfigCommon.defaultConfigurationVersion); version = ConfigCommon.defaultConfigurationVersion; } returnValue = Config.getValue(value, version); } catch (Exception e) { log.error("Unable to return config parameter {}: {}", getParameters(), e.getMessage()); log.debug("Exception", e); } } getQueryReturnValue().setReturnValue(returnValue); } /** * Validates if the query should return anything or not, according to the user's permissions: * <ul> * <li>If the query is run as an administrator (note that since we've reached the {@link #executeQueryCommand()} method, * we've already validated that the use is indeed an administrator), the results from the database queries should be returned.</li> * <li>If the query is run as a user, it may return results <b>ONLY</b> if the configuration value has {@link org.ovirt.engine.core.common.queries.ConfigurationValues.ConfigAuthType#User}.</li> * </ul> */ private boolean shouldReturnValue() { return !getParameters().isFiltered() || !getParameters().getConfigValue().isAdmin(); } }