1 /****************************************************************
2 * Licensed to the Apache Software Foundation (ASF) under one *
3 * or more contributor license agreements. See the NOTICE file *
4 * distributed with this work for additional information *
5 * regarding copyright ownership. The ASF licenses this file *
6 * to you under the Apache License, Version 2.0 (the *
7 * "License"); you may not use this file except in compliance *
8 * with the License. You may obtain a copy of the License at *
9 * *
10 * http://www.apache.org/licenses/LICENSE-2.0 *
11 * *
12 * Unless required by applicable law or agreed to in writing, *
13 * software distributed under the License is distributed on an *
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15 * KIND, either express or implied. See the License for the *
16 * specific language governing permissions and limitations *
17 * under the License. *
18 ****************************************************************/
19
20
21 package org.apache.mailet.base;
22
23 import java.util.ArrayList;
24 import java.util.Collection;
25
26 import javax.mail.MessagingException;
27
28 import org.apache.mailet.Mail;
29 import org.apache.mailet.Matcher;
30 import org.apache.mailet.MatcherConfig;
31
32 /**
33 * This class can be used as a wrapper for getting the "not matched" recipients
34 *
35 */
36 public class MatcherInverter implements Matcher {
37
38 private Matcher wrappedMatcher;
39
40 public MatcherInverter(Matcher wrappedMatcher) {
41 this.wrappedMatcher = wrappedMatcher;
42 }
43
44 /**
45 * @see org.apache.mailet.Matcher#destroy()
46 */
47 public void destroy() {
48 wrappedMatcher.destroy();
49 }
50
51 /**
52 * @see org.apache.mailet.Matcher#getMatcherConfig()
53 */
54 public MatcherConfig getMatcherConfig() {
55 return wrappedMatcher.getMatcherConfig();
56 }
57
58 /**
59 * @see org.apache.mailet.Matcher#getMatcherInfo()
60 */
61 public String getMatcherInfo() {
62 return wrappedMatcher.getMatcherInfo();
63 }
64
65 /**
66 * @see org.apache.mailet.Matcher#destroy()
67 */
68 public void init(MatcherConfig config) throws MessagingException {
69 wrappedMatcher.init(config);
70 }
71
72 /**
73 * Return a Collection of "not matched" recipients
74 *
75 */
76 public Collection match(Mail mail) throws MessagingException {
77 // Create a new recipient Collection cause mail.getRecipients() give a reference to the internal
78 // list of recipients. If we make changes there the original collection whould be corrupted
79 Collection recipients = new ArrayList(mail.getRecipients());
80
81 recipients.removeAll(wrappedMatcher.match(mail));
82 return recipients;
83 }
84
85 }