/** * */ package vnet.sms.gateway.server.framework.internal.description; import static org.apache.commons.lang.Validate.notNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import vnet.sms.gateway.server.framework.GatewayServerDescriptionAware; import vnet.sms.gateway.server.framework.spi.GatewayServerDescription; /** * @author obergner * */ public class GatewayServerDescriptionInjector implements BeanPostProcessor, ApplicationContextAware { private final Logger log = LoggerFactory.getLogger(getClass()); private ApplicationContext applicationContext; /** * @see vnet.sms.common.context.ApplicationContextAware#setApplicationContext(vnet.sms.common.context.ApplicationContext) */ @Override public void setApplicationContext( final ApplicationContext applicationContext) throws BeansException { notNull(applicationContext, "Argument 'applicationContext' must not be null"); this.applicationContext = applicationContext; } /** * @see vnet.sms.common.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object, * java.lang.String) */ @Override public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException { this.log.trace("Testing if {} implements {} ...", bean, GatewayServerDescriptionAware.class.getName()); if (bean instanceof GatewayServerDescriptionAware) { this.log.debug( "{} DOES implement {} - will inject GatewayServerDescription", bean, GatewayServerDescriptionAware.class.getName()); final GatewayServerDescription gatewayServerDescription = lookupGatewayServerDescription(); GatewayServerDescriptionAware.class.cast(bean) .setGatewayServerDescription(gatewayServerDescription); this.log.info("Injected {} into {}", gatewayServerDescription, bean); } else { this.log.trace("{} does NOT implement {} - SKIPPING", bean, GatewayServerDescriptionAware.class.getName()); } return bean; } private GatewayServerDescription lookupGatewayServerDescription() { if (this.applicationContext == null) { throw new IllegalStateException( "No ApplicationContext has been set - cannot lookup GatewayServerDescription"); } return this.applicationContext.getBean(GatewayServerDescription.class); } /** * @see vnet.sms.common.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, * java.lang.String) */ @Override public Object postProcessAfterInitialization(final Object bean, final String beanName) throws BeansException { return bean; } }