pl.chilldev.web.spring.config.TitleBeanDefinitionParser.java Source code

Java tutorial

Introduction

Here is the source code for pl.chilldev.web.spring.config.TitleBeanDefinitionParser.java

Source

/**
 * 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 java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;

import org.springframework.util.xml.DomUtils;

import org.w3c.dom.Element;

/**
 * `<title>` element parser.
 *
 * @version 0.0.2
 * @since 0.0.1
 */
public class TitleBeanDefinitionParser implements BeanDefinitionParser {
    /**
     * `<part>` element name.
     */
    public static final String ELEMENT_PART = "part";

    /**
     * `separator=""` attribute name.
     */
    public static final String ATTRIBUTE_SEPARATOR = "separator";

    /**
     * Title separator property name.
     */
    public static final String PROPERTY_TITLESEPARATOR = "titleSeparator";

    /**
     * Title parts property name.
     */
    public static final String PROPERTY_TITLE = "title";

    /**
     * Logger.
     */
    protected Logger logger = LoggerFactory.getLogger(TitleBeanDefinitionParser.class);

    /**
     * Initial title parts.
     */
    protected List<String> parts = new ArrayList<>();

    /**
     * Factory bean properties.
     */
    protected MutablePropertyValues properties;

    /**
     * Initializes bean parser.
     *
     * @param pageMetaModelFactoryBean Page model factory.
     * @since 0.0.2
     */
    public TitleBeanDefinitionParser(BeanDefinition pageMetaModelFactoryBean) {
        this.properties = pageMetaModelFactoryBean.getPropertyValues();
        this.properties.addPropertyValue(TitleBeanDefinitionParser.PROPERTY_TITLE, this.parts);
    }

    /**
     * {@inheritDoc}
     * @since 0.0.1
     */
    @Override
    public BeanDefinition parse(Element element, ParserContext parserContext) {
        if (element.hasAttribute(TitleBeanDefinitionParser.ATTRIBUTE_SEPARATOR)) {
            String separator = element.getAttribute(TitleBeanDefinitionParser.ATTRIBUTE_SEPARATOR);

            this.logger.info("Setting title separator to \"{}\".", separator);
            this.properties.addPropertyValue(TitleBeanDefinitionParser.PROPERTY_TITLESEPARATOR, separator);
        }

        String part;
        for (Element child : DomUtils.getChildElementsByTagName(element, TitleBeanDefinitionParser.ELEMENT_PART)) {
            part = DomUtils.getTextValue(child);

            this.logger.info("Adding \"{}\" as title part.", part);
            this.parts.add(part);
        }

        return null;
    }
}