package com.icegreen.greenmail.spring; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; /** * Parses the GreenMail bean definition. * * @author Marcel May (mm) */ public class GreenMailBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { /** The default hostname ({@value}). */ public static final String DEFAULT_HOSTNAME = "localhost"; /** The default port offset ({@value}). */ private static final Integer DEFAULT_PORT_OFFSET = Integer.valueOf(3000); /** The default time to wait for server startup in millis ({@value}). */ public static final long DEFAULT_SERVER_STARTUP_TIMEOUT = 1000L; /** {@inheritDoc} */ @Override protected Class<?> getBeanClass(final Element element) { return GreenMailBean.class; } /** {@inheritDoc} */ @Override protected void doParse(final Element element, final BeanDefinitionBuilder builder) { builder.addPropertyValue("hostname", extractHostname(element)); builder.addPropertyValue("portOffset", extractPortOffset(element)); builder.addPropertyValue("serverStartupTimeout", extractServerStartupTimeout(element)); } private Object extractPortOffset(final Element pElement) { Element portOffsetElement = DomUtils.getChildElementByTagName(pElement, "portOffset"); if(null!=portOffsetElement) { return portOffsetElement.getTextContent(); } return DEFAULT_PORT_OFFSET; } private Object extractServerStartupTimeout(final Element pElement) { Element serverStartupTimeoutElement = DomUtils.getChildElementByTagName(pElement, "serverStartupTimeout"); if(null!=serverStartupTimeoutElement) { return serverStartupTimeoutElement.getTextContent(); } return DEFAULT_SERVER_STARTUP_TIMEOUT; } private Object extractHostname(final Element pElement) { Element hostnameElement = DomUtils.getChildElementByTagName(pElement, "hostname"); if(null!=hostnameElement) { return hostnameElement.getTextContent(); } return DEFAULT_HOSTNAME; } }