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.LabelConfigurable; 012 import org.springframework.richclient.core.LabelInfo; 013 import org.springframework.richclient.core.TitleConfigurable; 014 import org.springframework.util.StringUtils; 015 016 public class LabelConfigurableBeanPostProcessor implements BeanPostProcessor { 017 /** The key fragment used to retrieve the label for a given object. */ 018 public static final String LABEL_KEY = "label"; 019 020 private MessageSource messageSource; 021 022 public LabelConfigurableBeanPostProcessor(MessageSource messageSource) { 023 this.messageSource = messageSource; 024 } 025 026 public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { 027 if (bean instanceof LabelConfigurable) { 028 LabelConfigurable configurable = (LabelConfigurable) bean; 029 030 try { 031 String label = messageSource.getMessage(new DefaultMessageSourceResolvable(name + "." + LABEL_KEY), 032 Locale.getDefault()); 033 034 if (StringUtils.hasText(label)) { 035 configurable.setLabelInfo(LabelInfo.valueOf(label)); 036 } 037 } 038 catch (NoSuchMessageException e) { 039 throw new BeanInitializationException("Unable to initialize bean " + name, e); 040 } 041 } 042 043 return bean; 044 } 045 046 public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { 047 return bean; 048 } 049 }