001 package org.springframework.richclient.context.support;
002
003 import java.util.Locale;
004
005 import org.springframework.beans.BeansException;
006 import org.springframework.beans.factory.BeanInitializationException;
007 import org.springframework.beans.factory.config.BeanPostProcessor;
008 import org.springframework.context.MessageSource;
009 import org.springframework.context.NoSuchMessageException;
010 import org.springframework.context.support.DefaultMessageSourceResolvable;
011 import org.springframework.richclient.core.TitleConfigurable;
012 import org.springframework.util.StringUtils;
013
014 public class TitleConfigurableBeanPostProcessor implements BeanPostProcessor {
015 /** The key fragment used to retrieve the title for a given object. */
016 public static final String TITLE_KEY = "title";
017
018 private MessageSource messageSource;
019
020 public TitleConfigurableBeanPostProcessor(MessageSource messageSource) {
021 this.messageSource = messageSource;
022 }
023
024 public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
025 if (bean instanceof TitleConfigurable) {
026 TitleConfigurable configurable = (TitleConfigurable) bean;
027
028 try {
029 String title = messageSource.getMessage(new DefaultMessageSourceResolvable(name + "." + TITLE_KEY),
030 Locale.getDefault());
031
032 if (StringUtils.hasText(title)) {
033 configurable.setTitle(title);
034 }
035 }
036 catch (NoSuchMessageException e) {
037 throw new BeanInitializationException("Unable to initialize bean " + name, e);
038 }
039 }
040
041 return bean;
042 }
043
044 public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
045 return bean;
046 }
047 }