com.canoo.webtest.plugins.emailtest.EmailStoreHeader.java Source code

Java tutorial

Introduction

Here is the source code for com.canoo.webtest.plugins.emailtest.EmailStoreHeader.java

Source

// Copyright  2006-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.emailtest;

import java.io.IOException;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.canoo.webtest.engine.StepFailedException;
import com.canoo.webtest.util.ConversionUtil;

/**
 * Stores the value of a header field within a message (or within a message part).
 *
 * @author Paul King, ASERT
 * @webtest.step category="Email"
 * name="emailStoreHeader"
 * description="Stores the value of a message (or message part) header field into a property."
 */
public class EmailStoreHeader extends AbstractMessageStoreStep {
    private static final Logger LOG = Logger.getLogger(EmailStoreHeader.class);
    private String fHeaderName;
    private String fPartIndex;

    public String getHeaderName() {
        return fHeaderName;
    }

    /**
     * Sets the name of the header of interest.
     *
     * @param headerName The header name
     * @webtest.parameter required="yes"
     * description="The name of the header of interest."
     */
    public void setHeaderName(final String headerName) {
        fHeaderName = headerName;
    }

    public String getPartIndex() {
        return fPartIndex;
    }

    /**
     * Sets the part index.
     *
     * @param partIndex The message part of interest
     * @webtest.parameter
     *   required="no"
     *   description="The index of the message part of interest. If set for a <em>Simple</em> message, will cause the step to fail. If set for a MIME <em>MultiPart</em> message will retrieve headers related to the message part instead of headers of the message itself."
     */
    public void setPartIndex(final String partIndex) {
        fPartIndex = partIndex;
    }

    /**
     * Calculate the result.
     *
     * @param message
     * @return The result
     */
    protected String performOperation(final Message message) throws MessagingException {
        if (StringUtils.isEmpty(getPartIndex())) {
            return arrayToString(message.getHeader(getHeaderName()));
        }
        final Object content;
        try {
            content = message.getContent();
        } catch (IOException e) {
            LOG.error("Error processing email message: ", e);
            throw new MessagingException("Error processing email message: " + e.getMessage());
        }
        if (content instanceof Multipart) {
            final Multipart mp = (Multipart) content;
            final int part = ConversionUtil.convertToInt(getPartIndex(), 0);
            if (part >= mp.getCount()) {
                throw new StepFailedException("PartIndex too large.", this);
            }
            return arrayToString(mp.getBodyPart(part).getHeader(getHeaderName()));
        }
        throw new StepFailedException("PartIndex supplied for a non-MultiPart message.", this);
    }

    private static String arrayToString(final String[] values) {
        final StringBuffer buf = new StringBuffer();
        for (int i = 0; i < values.length; i++) {
            buf.append(values[i]);
            if (i < values.length - 1) {
                buf.append(", ");
            }
        }
        return buf.toString();
    }

    protected void verifyParameters() {
        super.verifyParameters();
        nullParamCheck(getHeaderName(), "headerName");
        optionalIntegerParamCheck(getPartIndex(), "partIndex", true);
    }
}