// Copyright � 2006-2007 ASERT. Released under the Canoo Webtest license. package com.canoo.webtest.plugins.emailtest; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.canoo.webtest.util.ConversionUtil; /** * Stores the message's id into a property. * * @author Paul King, ASERT * @webtest.step category="Email" * name="emailStoreMessageId" * description="Stores the message id (optionally matching specific criteria) of a particular message." */ public class EmailStoreMessageId extends AbstractSelectStep { private static final Logger LOG = Logger.getLogger(EmailStoreMessageId.class); private String fMessageIndex; public String getMessageIndex() { return fMessageIndex; } /** * Sets the message index. * * @param index The message index * @webtest.parameter required="no" * default="0, the first message" * description="The messageIndex if more than one message match." */ public void setMessageIndex(final String index) { fMessageIndex = index; } /** * Calculate the message id * * @param folder * @return The extracted count value */ protected String processContent(final Folder folder) throws MessagingException { final Message[] messages = retrieveMatchingMessages(folder); if (StringUtils.isEmpty(fMessageIndex)) { LOG.info("Multiple matching messages found, using the first."); } if (messages.length == 0) { throw new MessagingException("No messages matching criteria."); } final int messageIndex = ConversionUtil.convertToInt(getMessageIndex(), 0); if (messageIndex >= messages.length) { throw new MessagingException("Invalid messageIndex '" + getMessageIndex() + "', valid range is 0.." + (messages.length - 1)); } return String.valueOf(messages[messageIndex].getMessageNumber()); } protected void verifyParameters() { super.verifyParameters(); optionalIntegerParamCheck(getMessageIndex(), "messageIndex", true); } }