
pl.chilldev.web.spring.config.LinkBeanDefinitionParser Maven / Gradle / Ivy
/**
* 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