Java tutorial
/** * This file is part of the ChillDev-Web. * * @license http://mit-license.org/ The MIT license * @copyright 2014 by Rafa Wrzeszcz - Wrzasq.pl. */ package pl.chilldev.web.spring.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.web.context.WebApplicationContext; import org.w3c.dom.Element; import pl.chilldev.web.core.markup.Generator; import pl.chilldev.web.core.page.PageMetaModel; import pl.chilldev.web.spring.context.PageMetaModelFactoryBean; import pl.chilldev.web.spring.context.SpringBeansFacesPageMetaModelResolver; import pl.chilldev.web.spring.context.SpringBeansJspPageMetaModelResolver; import pl.chilldev.web.tags.context.PageMetaModelContextUtils; /** * `<handle-page-model>` element parser. * * @version 0.0.3 * @since 0.0.1 */ public class HandlePageModelBeanDefinitionParser implements BeanDefinitionParser { /** * `xhtml=""` attribute name. */ public static final String ATTRIBUTE_XHTML = "xhtml"; /** * Page model creation method name. */ public static final String METHOD_CREATEPAGEMETAMODEL = "createPageMetaModel"; /** * Logger. */ protected Logger logger = LoggerFactory.getLogger(HandlePageModelBeanDefinitionParser.class); /** * Page meta model for aggregating all the info. */ protected BeanDefinition pageMetaModelFactoryBean; /** * Assigns page meta model for aggregating all the info. * * @param pageMetaModelFactoryBean Page model bean definition. * @since 0.0.1 */ public HandlePageModelBeanDefinitionParser(BeanDefinition pageMetaModelFactoryBean) { this.pageMetaModelFactoryBean = pageMetaModelFactoryBean; } /** * {@inheritDoc} * @since 0.0.1 */ @Override public BeanDefinition parse(Element element, ParserContext parserContext) { // page model bean prototype GenericBeanDefinition pageMetaModelBean = new GenericBeanDefinition(); pageMetaModelBean.setBeanClass(PageMetaModel.class); pageMetaModelBean.setScope(WebApplicationContext.SCOPE_REQUEST); pageMetaModelBean.setFactoryBeanName(PageMetaModelFactoryBean.class.getName()); pageMetaModelBean.setFactoryMethodName(HandlePageModelBeanDefinitionParser.METHOD_CREATEPAGEMETAMODEL); parserContext.getRegistry().registerBeanDefinition(PageMetaModel.class.getName(), pageMetaModelBean); parserContext.getRegistry().registerBeanDefinition(PageMetaModelFactoryBean.class.getName(), this.pageMetaModelFactoryBean); // XHTML switch needs to be handled with generator bean if (element.hasAttribute(HandlePageModelBeanDefinitionParser.ATTRIBUTE_XHTML)) { boolean xhtml = element.getAttribute(HandlePageModelBeanDefinitionParser.ATTRIBUTE_XHTML) .equals("true"); GenericBeanDefinition generatorBean = new GenericBeanDefinition(); generatorBean.setBeanClass(Generator.class); this.logger.info("Setting markup generator XHTML mode to {}.", xhtml); ConstructorArgumentValues arguments = generatorBean.getConstructorArgumentValues(); arguments.addGenericArgumentValue(xhtml); parserContext.getRegistry().registerBeanDefinition(Generator.class.getName(), generatorBean); arguments = pageMetaModelBean.getConstructorArgumentValues(); arguments.addGenericArgumentValue(new RuntimeBeanReference(Generator.class.getName())); } // register new resolving strategy PageMetaModelContextUtils.setPageMetaModelResolver(new SpringBeansJspPageMetaModelResolver()); pl.chilldev.web.faces.context.PageMetaModelContextUtils .setPageMetaModelResolver(new SpringBeansFacesPageMetaModelResolver()); return null; } }