/**********************************************************************************
*
* $Id: ConfigurationBean.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $
*
***********************************************************************************
*
* Copyright (c) 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.tool.gradebook.ui;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.api.ServerConfigurationService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* Provides a way to override UI bean definitions from the Sakai component
* framework while still visibly injecting them in UI configuration files.
*
* (If our UI logic was based on Spring beans rather than JSF backing beans,
* there might be a more straightforward way to deliver this capability.)
*/
public class ConfigurationBean implements ApplicationContextAware{
private static final Log log = LogFactory.getLog(ConfigurationBean.class);
private ApplicationContext applicationContext;
private Map<String, Object> pluginDefaults;
private ServerConfigurationService serverConfigurationService;
/**
* @param name
* @return the bean configured to match the given plug-in key, or null if none were found
*/
public Object getPlugin(String key) {
Object target = null;
if (log.isDebugEnabled()) log.debug("key=" + key + ", serverConfigurationService=" + serverConfigurationService + ", default=" + pluginDefaults.get(key));
if (serverConfigurationService != null) {
// As of Sakai 2.4, the framework's configuration service
// returns the empty string instead of null if a property isn't found.
target = StringUtils.stripToNull(serverConfigurationService.getString(key));
}
if (target == null) {
target = pluginDefaults.get(key);
}
if (target != null) {
if (target instanceof String) {
// Assume that we got a bean name instead of the
// bean itself.
target = applicationContext.getBean((String)target);
}
}
if (log.isDebugEnabled()) log.debug("for " + key + " returning " + target);
return target;
}
public String getConfig(String name, String defaultValue) {
String val = defaultValue;
if (serverConfigurationService != null) {
val = serverConfigurationService.getString(name, defaultValue);
}
return val;
}
public boolean getBooleanConfig(String name, boolean defaultValue) {
boolean val = defaultValue;
if (serverConfigurationService != null) {
val = serverConfigurationService.getBoolean(name, defaultValue);
}
return val;
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public void setPluginDefaults(Map<String, Object> pluginDefaults) {
this.pluginDefaults = pluginDefaults;
}
/**
* If this method is never called (as in the case of standalone builds), the
* default map of property values will be used.
* @param serverConfigurationService
*/
public void setServerConfigurationService(
ServerConfigurationService serverConfigurationService) {
this.serverConfigurationService = serverConfigurationService;
}
}