/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.i18n.message;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.util.Assert;
public class ExtReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource {
private String[] fileBasenames = new String[0];
public List<String> getFileBasenames() {
List<String> basenameList = new ArrayList<String>();
// REVERSE ARRAY TO KEEP THE FILEPATH ORDER LIKE SPRING
for (int i = 0; i < fileBasenames.length; i++) {
String fileBasename = fileBasenames[i];
if(fileBasename.contains("classpath")){
fileBasename = fileBasename.replace("classpath:*", "");
fileBasename = fileBasename.replace("classpath:", "");
}
basenameList.add(fileBasename);
}
Collections.reverse(basenameList);
return basenameList;
}
public Map<String, String> getWordingProperties(String fileName, Locale locale) {
final Map<String, String> wording = new HashMap<String, String>();
final PropertiesHolder propertiesHolder = getSpecificProperties(fileName, locale);
final Properties properties = propertiesHolder.getProperties();
if(properties != null){
final Set<Object> keys = properties.keySet();
for (Iterator<Object> iterator = keys.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
if(StringUtils.isNotEmpty(key)){
wording.put(key, properties.getProperty(key));
}
}
}
return wording;
}
protected PropertiesHolder getSpecificProperties(String fileNamePattern, Locale locale) {
String fileName = "classpath:" + fileNamePattern + "_" + locale.toString();
PropertiesHolder propertiesHolder = getProperties(fileName);
if(propertiesHolder == null){
fileName = "classpath:" + fileNamePattern;
propertiesHolder = getProperties(fileName);
}
return propertiesHolder;
}
@Override
public void setBasenames(String... basenames) {
if (basenames != null) {
this.fileBasenames = new String[basenames.length];
for (int i = 0; i < basenames.length; i++) {
String basename = basenames[i];
Assert.hasText(basename, "Basename must not be empty");
this.fileBasenames[i] = basename.trim();
}
}
super.setBasenames(basenames);
}
}