GreenMailBeanDefinitionParser.java
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 = 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;
}
}