/**
* Copyright 2008 Sakaiproject 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.osedu.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.adminsiteperms.tool;
import java.text.MessageFormat;
import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.util.ResourceLoader;
import org.springframework.context.support.AbstractMessageSource;
/**
* Simple spring message source that uses the Sakai resource loader as the source
* and avoids too many refreshes of the Sakai resource loader.
* The actual resource loader will only be loaded one time
*
* @author Aaron Zeckoski (azeckoski @ vt.edu)
*/
public class ResourceLoaderMessageSource extends AbstractMessageSource {
private static Log log = LogFactory.getLog(ResourceLoaderMessageSource.class);
ResourceLoader resourceLoader;
public void setBasename(String baseName) {
if (baseName.startsWith("classpath:")) {
baseName = baseName.replaceFirst("classpath:", "");
baseName = baseName.replaceAll("/",".");
}
this.resourceLoader = new ResourceLoader(baseName, ResourceLoaderMessageSource.class.getClassLoader());
log.info("Sakai-SitePerms i18n MSG basename init: "+baseName);
}
protected MessageFormat resolveCode(String code, Locale locale) {
if (locale != null && resourceLoader.getLocale() == null) {
resourceLoader.setContextLocale(locale);
} else {
locale = resourceLoader.getLocale();
}
String msg;
if ("DEBUG".equals(locale.getVariant()) || "XX".equals(locale.getCountry())) {
msg = "** "+code+" **";
} else {
msg = resourceLoader.getString(code);
}
if (log.isTraceEnabled()) log.trace("MSG resolveCode: "+code+" ("+locale.getLanguage() + "_" + locale.getCountry()+(locale.getVariant() == null ? "" : " -"+locale.getVariant())+") into msg: "+msg);
return createMessageFormat(msg, locale);
}
protected String resolveCodeWithoutArguments(String code, Locale locale) {
if (locale != null && resourceLoader.getLocale() == null) {
resourceLoader.setContextLocale(locale);
} else {
locale = resourceLoader.getLocale();
}
String msg;
if ("DEBUG".equals(locale.getVariant()) || "XX".equals(locale.getCountry())) {
msg = "** "+code+" **";
} else {
msg = resourceLoader.getString(code);
}
if (log.isTraceEnabled()) log.trace("MSG resolveCode (noargs): "+code+" ("+locale.getLanguage() + "_" + locale.getCountry()+(locale.getVariant() == null ? "" : " -"+locale.getVariant())+") into msg: "+msg);
return msg;
}
}