KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > james > transport > matchers > SizeGreaterThan


1 /***********************************************************************
2  * Copyright (c) 2000-2004 The Apache Software Foundation. *
3  * All rights reserved. *
4  * ------------------------------------------------------------------- *
5  * Licensed under the Apache License, Version 2.0 (the "License"); you *
6  * may not use this file except in compliance with the License. You *
7  * may obtain a copy of the License at: *
8  * *
9  * http://www.apache.org/licenses/LICENSE-2.0 *
10  * *
11  * Unless required by applicable law or agreed to in writing, software *
12  * distributed under the License is distributed on an "AS IS" BASIS, *
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
14  * implied. See the License for the specific language governing *
15  * permissions and limitations under the License. *
16  ***********************************************************************/

17
18 package org.apache.james.transport.matchers;
19
20 import org.apache.mailet.GenericMatcher;
21 import org.apache.mailet.Mail;
22
23 import javax.mail.Header JavaDoc;
24 import javax.mail.MessagingException JavaDoc;
25 import javax.mail.internet.MimeMessage JavaDoc;
26 import java.util.Collection JavaDoc;
27 import java.util.Enumeration JavaDoc;
28 import java.util.Locale JavaDoc;
29
30 /**
31  * Checks whether the message (entire message, not just content) is greater
32  * than a certain number of bytes. You can use 'k' and 'm' as optional postfixes.
33  * In other words, "1m" is the same as writing "1024k", which is the same as
34  * "1048576".
35  *
36  */

37 public class SizeGreaterThan extends GenericMatcher {
38
39     int cutoff = 0;
40
41     public void init() {
42         String JavaDoc amount = getCondition().trim().toLowerCase(Locale.US);
43         if (amount.endsWith("k")) {
44             amount = amount.substring(0, amount.length() - 1);
45             cutoff = Integer.parseInt(amount) * 1024;
46         } else if (amount.endsWith("m")) {
47             amount = amount.substring(0, amount.length() - 1);
48             cutoff = Integer.parseInt(amount) * 1024 * 1024;
49         } else {
50             cutoff = Integer.parseInt(amount);
51         }
52     }
53
54     public Collection JavaDoc match(Mail mail) throws MessagingException JavaDoc {
55         MimeMessage JavaDoc message = mail.getMessage();
56         //Calculate the size
57
int size = message.getSize();
58         Enumeration JavaDoc e = message.getAllHeaders();
59         while (e.hasMoreElements()) {
60             size += ((Header JavaDoc)e.nextElement()).toString().length();
61         }
62         if (size > cutoff) {
63             return mail.getRecipients();
64         } else {
65             return null;
66         }
67     }
68 }
69
Popular Tags