01: // Copyright © 2006-2007 ASERT. Released under the Canoo Webtest license.
02: package com.canoo.webtest.plugins.emailtest;
03:
04: import java.io.IOException;
05: import java.util.regex.Matcher;
06: import java.util.regex.Pattern;
07:
08: import javax.mail.Message;
09: import javax.mail.MessagingException;
10: import javax.mail.Multipart;
11:
12: import org.apache.log4j.Logger;
13:
14: /**
15: * Stores the number of parts found within a message.
16: *
17: * @author Paul King, ASERT
18: * @webtest.step
19: * category="Email"
20: * name="emailStorePartCount"
21: * description="Stores the number of parts found within a message. For old-style (non-MIME) uuencoded messages, this returns the number of uuencoded attachments. For new style MIME messages, it returns the number of MIME parts found."
22: */
23: public class EmailStorePartCount extends AbstractMessageStoreStep {
24: private static final Logger LOG = Logger
25: .getLogger(EmailStorePartCount.class);
26:
27: protected String performOperation(final Message message)
28: throws MessagingException {
29: final Object content;
30: try {
31: content = message.getContent();
32: } catch (IOException e) {
33: LOG.error("Error processing email message: ", e);
34: throw new MessagingException(
35: "Error processing email message: " + e.getMessage());
36: }
37: if (content instanceof Multipart) {
38: return String
39: .valueOf(performMultipartMessageCount((Multipart) content));
40: }
41: return String
42: .valueOf(performSimpleMessageCount((String) content));
43: }
44:
45: private static int performMultipartMessageCount(
46: final Multipart multipart) throws MessagingException {
47: return multipart.getCount();
48: }
49:
50: private static int performSimpleMessageCount(final String content) {
51: // iterate over string looking for ^begin ddd$
52: final String lineStr = "(^.*$)";
53: final String startUuencodeStr = "begin \\d\\d\\d .*";
54: final Pattern linePattern = Pattern.compile(lineStr,
55: Pattern.MULTILINE);
56: final Matcher matcher = linePattern.matcher(content);
57: int count = 0;
58: while (matcher.find()) {
59: final String line = matcher.group(0);
60: if (line.matches(startUuencodeStr)) {
61: count++;
62: }
63: }
64: return count;
65: }
66: }
|