All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.chilldev.web.spring.config.LinkBeanDefinitionParser Maven / Gradle / Ivy

There is a newer version: 0.1.2
Show newest version
/**
 * This file is part of the ChillDev-Web.
 *
 * @license http://mit-license.org/ The MIT license
 * @copyright 2014 - 2015 © by Rafał Wrzeszcz - Wrzasq.pl.
 */

package pl.chilldev.web.spring.config;

import java.util.HashSet;
import java.util.Set;

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.springframework.util.xml.DomUtils;

import org.w3c.dom.Element;

import pl.chilldev.web.spring.model.Link;

/**
 * `<link>` element parser.
 */
public class LinkBeanDefinitionParser
    implements
        BeanDefinitionParser
{
    /**
     * `<rel>` element name.
     */
    public static final String ELEMENT_REL = "rel";

    /**
     * `href=""` attribute name.
     */
    public static final String ATTRIBUTE_HREF = "href";

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

    /**
     * `media=""` attribute name.
     */
    public static final String ATTRIBUTE_MEDIA = "media";

    /**
     * Links property name.
     */
    public static final String PROPERTY_LINKS = "links";

    /**
     * Logger.
     */
    private Logger logger = LoggerFactory.getLogger(LinkBeanDefinitionParser.class);

    /**
     * Initial links.
     */
    private ManagedList links = new ManagedList<>();

    /**
     * Initializes bean parser.
     *
     * @param pageMetaModelFactoryBean Page model factory.
     */
    public LinkBeanDefinitionParser(BeanDefinition pageMetaModelFactoryBean)
    {
        pageMetaModelFactoryBean.getPropertyValues().addPropertyValue(
            LinkBeanDefinitionParser.PROPERTY_LINKS,
            this.links
        );
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public BeanDefinition parse(Element element, ParserContext parserContext)
    {
        String href = element.getAttribute(LinkBeanDefinitionParser.ATTRIBUTE_HREF);
        Set rels = new HashSet();
        for (Element child : DomUtils.getChildElementsByTagName(element, LinkBeanDefinitionParser.ELEMENT_REL)) {
            rels.add(DomUtils.getTextValue(child));
        }

        GenericBeanDefinition link = new GenericBeanDefinition();
        link.setBeanClass(Link.class);

        int i = 0;
        ConstructorArgumentValues arguments = link.getConstructorArgumentValues();
        arguments.addIndexedArgumentValue(
            i++,
            href
        );
        arguments.addIndexedArgumentValue(
            i++,
            rels
        );
        arguments.addIndexedArgumentValue(
            i++,
            pl.chilldev.web.spring.util.DomUtils.getRealAttributeValue(
                element,
                LinkBeanDefinitionParser.ATTRIBUTE_TYPE
            )
        );
        arguments.addIndexedArgumentValue(
            i++,
            pl.chilldev.web.spring.util.DomUtils.getRealAttributeValue(
                element,
                LinkBeanDefinitionParser.ATTRIBUTE_MEDIA
            )
        );

        this.logger.info("Adding \"{}\" link.", href);
        this.links.add(link);

        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy