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

Java tutorial

Introduction

Here is the source code for pl.chilldev.web.spring.config.ScriptBeanDefinitionParser.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 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.support.GenericBeanDefinition;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;

import org.w3c.dom.Element;

import pl.chilldev.web.spring.model.Script;
import pl.chilldev.web.spring.util.DomUtils;

/**
 * `<script>` element parser.
 *
 * @version 0.0.2
 * @since 0.0.1
 */
public class ScriptBeanDefinitionParser implements BeanDefinitionParser {
    /**
     * `src=""` attribute name.
     */
    public static final String ATTRIBUTE_SRC = "src";

    /**
     * `type=""` attribute name.
     */
    public static final String ATTRIBUTE_TYPE = "type";

    /**
     * `flow=""` attribute name.
     */
    public static final String ATTRIBUTE_FLOW = "flow";

    /**
     * `charset=""` attribute name.
     */
    public static final String ATTRIBUTE_CHARSET = "charset";

    /**
     * Scripts property name.
     */
    public static final String PROPERTY_SCRIPTS = "scripts";

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

    /**
     * Initial scripts.
     */
    protected ManagedList<BeanDefinition> scripts = new ManagedList<>();

    /**
     * Initializes bean parser.
     *
     * @param pageMetaModelFactoryBean Page model factory.
     * @since 0.0.2
     */
    public ScriptBeanDefinitionParser(BeanDefinition pageMetaModelFactoryBean) {
        pageMetaModelFactoryBean.getPropertyValues().addPropertyValue(ScriptBeanDefinitionParser.PROPERTY_SCRIPTS,
                this.scripts);
    }

    /**
     * {@inheritDoc}
     * @since 0.0.2
     */
    @Override
    public BeanDefinition parse(Element element, ParserContext parserContext) {
        String src = element.getAttribute(ScriptBeanDefinitionParser.ATTRIBUTE_SRC);

        GenericBeanDefinition script = new GenericBeanDefinition();
        script.setBeanClass(Script.class);

        int i = 0;
        ConstructorArgumentValues arguments = script.getConstructorArgumentValues();
        arguments.addIndexedArgumentValue(i++, src);
        arguments.addIndexedArgumentValue(i++,
                DomUtils.getRealAttributeValue(element, ScriptBeanDefinitionParser.ATTRIBUTE_TYPE));
        arguments.addIndexedArgumentValue(i++,
                DomUtils.getRealAttributeValue(element, ScriptBeanDefinitionParser.ATTRIBUTE_FLOW));
        arguments.addIndexedArgumentValue(i++,
                DomUtils.getRealAttributeValue(element, ScriptBeanDefinitionParser.ATTRIBUTE_CHARSET));

        this.logger.info("Adding \"{}\" script.", src);
        this.scripts.add(script);

        return null;
    }
}