/*
* Licensed to csti consulting
* You may obtain a copy of the License at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-Aug 24, 2010 Consultation CS-TI inc.
*
* 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 com.salesmanager.core.util;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.LocaleProvider;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.TextProviderFactory;
public class LabelUtil {
private Locale locale;
private LabelUtil() {
}
public static LabelUtil getInstance() {
return new LabelUtil();
}
public void setLocale(Locale locale) {
this.locale = locale;
}
public Locale getLocale() {
return locale;
}
public String getText(String aTextName) {
if (locale == null) {
setLocale(LocaleUtil.getDefaultLocale());
}
return getTextProvider().getText(getLocale(), aTextName);
}
public String getText(HttpServletRequest request, String aTextName) {
setLocale(LocaleUtil.getLocale(request));
return getTextProvider().getText(getLocale(), aTextName);
}
public String getText(Locale locale, String aTextName) {
setLocale(locale);
return getTextProvider().getText(getLocale(), aTextName);
}
public String getText(String lang, String aTextName, String parameter) {
getLocale(lang);
return getTextProvider().getText(getLocale(), aTextName, parameter);
}
public String getText(Locale locale, String aTextName, List params) {
return getTextProvider().getText(getLocale(), aTextName, params);
}
public String getText(String lang, String aTextName) {
getLocale(lang);
return getTextProvider().getText(getLocale(), aTextName);
}
private void getLocale(String lang) {
if(StringUtils.isBlank(lang)) {
lang = LanguageUtil.getDefaultLanguage();
}
if (lang.equals("en")) {
setLocale(Locale.ENGLISH);
} else if (lang.equals("fr")) {
setLocale(Locale.FRENCH);
} else {
setLocale(new Locale(lang));
}
}
private SmTextProvider getTextProvider() {
ActionContext ctx = ActionContext.getContext();
if (ctx == null) {// use the other method
return new CustomLabelUtil();
} else {// use struts method
return new StrutsLabelUtil();
}
}
}
interface SmTextProvider {
String getText(Locale locale, String key);
String getText(Locale locale, String key, List parameters);
String getText(Locale locale, String key, String parameter);
}
class StrutsLabelUtil implements LocaleProvider, SmTextProvider {
private Locale locale;
private void setLocale(Locale locale) {
this.locale = locale;
}
public Locale getLocale() {
return locale;
}
public String getText(Locale locale, String key) {
this.setLocale(locale);
TextProvider textProvider = (new TextProviderFactory()).createInstance(
StrutsLabelUtil.class, this);
return textProvider.getText(key);
}
public String getText(Locale locale, String key, List parameters) {
this.setLocale(locale);
TextProvider textProvider = (new TextProviderFactory()).createInstance(
StrutsLabelUtil.class, this);
return textProvider.getText(key, parameters);
}
public String getText(Locale locale, String key, String parameter) {
this.setLocale(locale);
TextProvider textProvider = (new TextProviderFactory()).createInstance(
StrutsLabelUtil.class, this);
return textProvider.getText(key, new String[] { parameter });
}
}
class CustomLabelUtil implements SmTextProvider {
private static List bundleList = new ArrayList();
static {// load config files
Configuration props = PropertiesUtil.getConfiguration();
List lst = (List) props.getProperty("struts.custom.i18n.resources");
if (lst != null) {
bundleList = lst;
}
}
public String getText(Locale locale, String key) {
Iterator bundleListIterator = bundleList.iterator();
ResourceBundle myResources = null;
String label = "";
while (bundleListIterator.hasNext()) {
String bundle = (String) bundleListIterator.next();
try {
myResources = ResourceBundle.getBundle(bundle, locale);
if (myResources != null) {
String l = myResources.getString(key);
if (l != null) {
label = l;
break;
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
return label;
}
public String getText(Locale locale, String key, List parameters) {
Iterator bundleListIterator = bundleList.iterator();
ResourceBundle myResources = null;
String label = "";
while (bundleListIterator.hasNext()) {
String bundle = (String) bundleListIterator.next();
try {
myResources = ResourceBundle.getBundle(bundle, locale);
if (myResources != null) {
String l = myResources.getString(key);
if (l != null) {
MessageFormat mFormat = new MessageFormat(l);
String[] params = new String[parameters.size()];
params = (String[]) parameters.toArray(params);
l = mFormat.format(params);
label = l;
break;
}
}
} catch (Exception e) {
// Handle exception
}
}
return label;
}
public String getText(Locale locale, String key, String parameter) {
Iterator bundleListIterator = bundleList.iterator();
ResourceBundle myResources = null;
String label = "";
while (bundleListIterator.hasNext()) {
String bundle = (String) bundleListIterator.next();
try {
myResources = ResourceBundle.getBundle(bundle, locale);
if (myResources != null) {
String l = myResources.getString(key);
if (l != null) {
MessageFormat mFormat = new MessageFormat(l);
l = mFormat.format(parameter);
label = l;
break;
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
return label;
}
}