package org.infoglue.calendar.util; import java.util.Locale; import java.util.ResourceBundle; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Session; import org.infoglue.calendar.actions.CalendarAbstractAction; import org.infoglue.calendar.controllers.CalendarLabelsController; import org.infoglue.common.util.ResourceBundleHelper; import com.opensymphony.xwork.ActionContext; public class CalendarLabelHelper { private static Log log = LogFactory.getLog(CalendarAbstractAction.class); public static CalendarLabelHelper getHelper() { return new CalendarLabelHelper(); } public String getLabel(String key, String languageCode, Session session) { Locale locale = Locale.ENGLISH; if(languageCode != null && !languageCode.equals("")) locale = new Locale(languageCode); return getLabel(key, locale, false, true, true, session); } public String getLabel(String key, String languageCode, boolean skipProperty, Session session) { Locale locale = Locale.ENGLISH; if(languageCode != null && !languageCode.equals("")) locale = new Locale(languageCode); return getLabel(key, locale, skipProperty, true, true, session); } public String getLabel(String key, String languageCode, boolean skipProperty, boolean fallbackToDefault, Session session) { Locale locale = Locale.ENGLISH; if(languageCode != null && !languageCode.equals("")) locale = new Locale(languageCode); return getLabel(key, locale, skipProperty, fallbackToDefault, true, session); } public String getLabel(String key, String languageCode, boolean skipProperty, boolean fallbackToDefault, boolean fallbackToKey, Session session) { Locale locale = Locale.ENGLISH; if(languageCode != null && !languageCode.equals("")) locale = new Locale(languageCode); String label = getLabel(key, locale, skipProperty, fallbackToDefault, fallbackToKey, session); return label; } public String getLabel(String key, Locale locale, boolean skipProperty, boolean fallbackToDefault, boolean fallbackToKey, Session session) { if(locale == null) locale = Locale.ENGLISH; String label = ""; if(fallbackToKey) label = key; try { Object derivedObject = findOnValueStack(key); String derivedValue = null; if(derivedObject != null) derivedValue = derivedObject.toString(); if(!skipProperty) { if(derivedValue != null) label = CalendarLabelsController.getCalendarLabelsController().getLabel("infoglueCalendar", derivedValue, locale, session); else label = CalendarLabelsController.getCalendarLabelsController().getLabel("infoglueCalendar", key, locale, session); } if(skipProperty || ((label == null || label.equals("")) && fallbackToDefault)) { ResourceBundle resourceBundle = ResourceBundleHelper.getResourceBundle("infoglueCalendar", locale); if(derivedValue != null) label = resourceBundle.getString(derivedValue); else label = resourceBundle.getString(key); } if((label == null || label.equals("")) && fallbackToKey) label = key; } catch(Exception e) { log.info("An label was not found for key: " + key + ": " + e.getMessage(), e); } return label; } public static Object findOnValueStack(String expr) { ActionContext a = ActionContext.getContext(); Object value = a.getValueStack().findValue(expr); return value; } }