/* * (c) Copyright 2005-2012 JAXIO, www.jaxio.com * Source code generated by Celerio, a Jaxio product * Want to use Celerio within your company? email us at info@jaxio.com * Follow us on twitter: @springfuse * Template pack-backend-sd:src/main/java/project/util/ResourcesUtil.p.vm.java */ package com.company.demo.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import org.apache.log4j.Logger; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Lazy; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.MessageSourceResourceBundle; import org.springframework.stereotype.Service; /** * ResourcesUtil allows you to retrieve localized resources for the locale present in the current thread of execution. * It can be used from both Spring beans (simple dependency injection) and from non spring beans. In the later case, * you obtain the reference thanks to the static method ResourcesUtil.getInstance() */ @Service @Lazy(false) public class ResourcesUtil { private static final Logger log = Logger.getLogger(ResourcesUtil.class); public static final String DATE_FORMAT_KEY = "dateformat_default"; /** * Default date pattern used in @DateTimeFormat annotation. */ public final static String DATE_FORMAT_PATTERN = "yyyy-MM-dd"; private static ResourcesUtil instance; private static MessageSource messageSource; private Map<Locale, ResourceBundle> cache = new HashMap<Locale, ResourceBundle>(); @Autowired public ResourcesUtil(MessageSource ms) { messageSource = ms; instance = this; } /** * Call it from non spring aware code to obtain a reference to the ResourcesUtil singleton instance. */ public static ResourcesUtil getInstance() { return instance; } /** * Return the MessageSource that backs this ResourcesUtil. */ public MessageSource getMessageSource() { return messageSource; } /** * Return the underlying spring MessageSource as a ResourceBundle. */ public ResourceBundle getAsResourceBundle() { Locale locale = LocaleContextHolder.getLocale(); ResourceBundle rb = cache.get(locale); if (rb == null) { rb = new MessageSourceResourceBundle(messageSource, locale); cache.put(locale, rb); } return rb; } /** * Return the property value for the contextual locale. * If no value is found, the passed key is returned. */ public String getProperty(String key) { return getProperty(key, null); } /** * Return the property value for the contextual locale. * If no value is found, the passed key is returned. */ public String getProperty(String key, Object[] args) { if (key == null) { return ""; } return messageSource.getMessage(key, args, LocaleContextHolder.getLocale()); } /** * Return the date as a localized string using the contextual locale. */ public String getFormattedDate(Date date) { if (date == null) { return ""; } String format = getProperty(DATE_FORMAT_KEY); SimpleDateFormat dateFormat = new SimpleDateFormat(format, LocaleContextHolder.getLocale()); return dateFormat.format(date); } /** * Return the local date as a localized string using the contextual locale. */ public String getFormattedDate(LocalDate localDate) { if (localDate == null) { return ""; } String format = getProperty(DATE_FORMAT_KEY); return localDate.toString(format, LocaleContextHolder.getLocale()); } /** * Return the local date time as a localized string using the contextual locale. */ public String getFormattedDate(LocalDateTime localDateTime) { if (localDateTime == null) { return ""; } String format = getProperty(DATE_FORMAT_KEY); return localDateTime.toString(format, LocaleContextHolder.getLocale()); } /** * Some facility such as Spring resources loader uses as default the file encoding used by the OS. * To simplify the configuration you can enforce the default file encoding to UTF-8. */ public void forceFileEncodingToUTF8() { if (!"UTF-8".equals(System.getProperty("file.encoding"))) { try { log.warn("Forcing file.encoding system property to UTF-8 instead of " + System.getProperty("file.encoding")); System.setProperty("file.encoding", "UTF-8"); } catch (Exception e) { log.warn("Could not set file.encoding programmatically to UTF-8, please configure the JVM manually", e); } } } }