KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > cruisecontrol > publishers > email > EmailMapperHelper


1 /********************************************************************************
2  * CruiseControl, a Continuous Integration Toolkit
3  * Copyright (c) 2001-2003, ThoughtWorks, Inc.
4  * 651 W Washington Ave. Suite 600
5  * Chicago, IL 60661 USA
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * + Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * + Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  *
20  * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
21  * names of its contributors may be used to endorse or promote
22  * products derived from this software without specific prior
23  * written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
29  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  ********************************************************************************/

37 package net.sourceforge.cruisecontrol.publishers.email;
38
39 import java.util.Hashtable JavaDoc;
40 import java.util.Map JavaDoc;
41 import java.util.Set JavaDoc;
42 import java.util.Iterator JavaDoc;
43
44 import net.sourceforge.cruisecontrol.publishers.EmailPublisher;
45
46 import org.apache.log4j.Logger;
47
48 public class EmailMapperHelper {
49
50     private static final Logger LOG = Logger.getLogger(EmailMapperHelper.class);
51
52     /*
53      * CACHE contains a Map with mapped users for each Publisher
54      */

55     private static final Map JavaDoc CACHE = new Hashtable JavaDoc();
56
57     public static void addCacheEntry(Object JavaDoc cache, String JavaDoc user, String JavaDoc mappedUser) {
58         Map JavaDoc map = (Map JavaDoc) CACHE.get(cache);
59         if (map == null) {
60             map = new Hashtable JavaDoc();
61             CACHE.put(cache, map);
62         }
63         map.put(user, mappedUser);
64     }
65
66     public static String JavaDoc getCachedUser(Object JavaDoc cache, String JavaDoc user) {
67         String JavaDoc mappedUser = null;
68         Map JavaDoc map = (Map JavaDoc) CACHE.get(cache);
69         if (map != null) {
70             mappedUser = (String JavaDoc) map.get(user);
71         }
72         return mappedUser;
73     }
74
75     public void mapUsers(EmailPublisher publisher, Set JavaDoc users, Set JavaDoc mappedUsers) {
76         // first iterate over the users and check if mapping is cached
77
for (Iterator JavaDoc userIterator = users.iterator(); userIterator.hasNext(); ) {
78             String JavaDoc user = (String JavaDoc) userIterator.next();
79             String JavaDoc mappedUser = getCachedUser(publisher, user);
80             if (mappedUser != null) {
81                 LOG.debug("User " + user + " found in cache. Mapped to: " + mappedUser);
82                 userIterator.remove();
83                 mappedUsers.add(mappedUser);
84             }
85         }
86
87         // iterate over each mapper,
88
// put the mapping into the cache if a hit and partissapates in caching
89
EmailMapper[] mappers = publisher.getEmailMapper();
90         for (int i = 0; i < mappers.length; i++) {
91             mappers[i].mapUsers(users, mappedUsers);
92         }
93
94         // take the still unmapped users and move them into the mappedUsers set
95
for (Iterator JavaDoc userIterator = users.iterator(); userIterator.hasNext(); ) {
96             mappedUsers.add(userIterator.next());
97             userIterator.remove();
98         }
99     }
100 }
101
Popular Tags