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 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. * * @version 0.0.2 * @since 0.0.1 */ 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. */ protected Logger logger = LoggerFactory.getLogger(LinkBeanDefinitionParser.class); /** * Initial links. */ protected ManagedList<BeanDefinition> links = new ManagedList<>(); /** * Initializes bean parser. * * @param pageMetaModelFactoryBean Page model factory. * @since 0.0.2 */ public LinkBeanDefinitionParser(BeanDefinition pageMetaModelFactoryBean) { pageMetaModelFactoryBean.getPropertyValues().addPropertyValue(LinkBeanDefinitionParser.PROPERTY_LINKS, this.links); } /** * {@inheritDoc} * @since 0.0.2 */ @Override public BeanDefinition parse(Element element, ParserContext parserContext) { String href = element.getAttribute(LinkBeanDefinitionParser.ATTRIBUTE_HREF); Set<String> rels = new HashSet<String>(); 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; } }