Author: dabbous
Date: 2006-07-08 16:35:00-0700
New Revision: 10203
Modified:
branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java
branches/release/b21/src/java/org/tigris/scarab/util/Email.java
Log:
reworked how the notificationManager creates emails.
the main problem was that emails to the archiver where sent
to often (more than once) for one specific notification.
this was so, because the NM determined the archiver Email
too often.
Modified: branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java?view=diff&rev=10203&p1=branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java&p2=branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java&r1=10202&r2=10203
==============================================================================
--- branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java (original)
+++ branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java 2006-07-08 16:35:00-0700
@@ -55,7 +55,9 @@
import java.util.Map;
import java.util.Set;
import java.util.List;
+import java.util.StringTokenizer;
+import javax.mail.internet.InternetAddress;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -74,6 +76,7 @@
import org.tigris.scarab.om.NotificationStatus;
import org.tigris.scarab.om.NotificationStatusPeer;
import org.tigris.scarab.om.ScarabUser;
+import org.tigris.scarab.om.ScarabUserImpl;
import org.tigris.scarab.tools.localization.L10NKey;
import org.tigris.scarab.tools.localization.L10NKeySet;
import org.tigris.scarab.tools.localization.L10NMessage;
@@ -260,11 +263,17 @@
if (isOldEnough(issueTime))
{
log.debug("processing notifications for issue : ["+issueId+"]");
- Iterator userIterator = issueActivities.keySet().iterator();
+ Iterator userIterator = getUsersToNotifyIterator(issue, issueActivities);
+ Map notifiedUserMailAdresses = new HashMap();
while( userIterator.hasNext())
{
ScarabUser user = (ScarabUser) userIterator.next();
-
+ String emailAdress = user.getEmail();
+ if(userAlreadyNotified(emailAdress,notifiedUserMailAdresses))
+ {
+ continue;
+ }
+ notifiedUserMailAdresses.put(emailAdress,user);
// Prepare E-Mail context ...
EmailContext ectx = new EmailContext();
ectx.put("issue", issue);
@@ -274,20 +283,23 @@
ectx.put("lastNotification", lastNotification);
Map groupedActivities = (Map) issueActivities.get(user);
- ectx.put("ActivityIssue", groupedActivities
+ if(groupedActivities != null)
+ {
+ ectx.put("ActivityIssue", groupedActivities
.get(L10NKeySet.ActivityIssue));
- ectx.put("ActivityAttributeChanges", groupedActivities
+ ectx.put("ActivityAttributeChanges", groupedActivities
.get(L10NKeySet.ActivityAttributeChanges));
- ectx.put("ActivityPersonnelChanges", groupedActivities
+ ectx.put("ActivityPersonnelChanges", groupedActivities
.get(L10NKeySet.ActivityPersonnelChanges));
- ectx.put("ActivityComments", groupedActivities
+ ectx.put("ActivityComments", groupedActivities
.get(L10NKeySet.ActivityComments));
- ectx.put("ActivityAssociatedInfo", groupedActivities
+ ectx.put("ActivityAssociatedInfo", groupedActivities
.get(L10NKeySet.ActivityAssociatedInfo));
- ectx.put("ActivityDependencies", groupedActivities
+ ectx.put("ActivityDependencies", groupedActivities
.get(L10NKeySet.ActivityDependencies));
- ectx.put("ActivityReasons", consolidateActivityReasons(groupedActivities));
-
+ ectx.put("ActivityReasons", consolidateActivityReasons(groupedActivities));
+ }
+
Exception exception = null;
try
{
@@ -300,6 +312,7 @@
updateNotificationRepository(groupedActivities, exception);
}
+
}
else
{
@@ -321,6 +334,66 @@
/**
+ * @param issueActivities
+ * @return
+ */
+ private Iterator getUsersToNotifyIterator(Issue issue, Map issueActivities)
+ {
+ List userlist = new ArrayList();
+
+ Iterator userIterator = issueActivities.keySet().iterator();
+ while(userIterator.hasNext())
+ {
+ ScarabUser user = (ScarabUser)userIterator.next();
+ userlist.add(user);
+ }
+
+ try
+ {
+ String archiveEmail = issue.getModule().getArchiveEmail();
+ if (archiveEmail != null && archiveEmail.trim().length() == 0)
+ {
+ archiveEmail = null;
+ }
+ if (archiveEmail != null)
+ {
+ List expandedArchive = expandMultipleAddresses(archiveEmail);
+ for (Iterator iter = expandedArchive.iterator(); iter.hasNext(); )
+ {
+ String ccTarget = (String)iter.next();
+ ScarabUser otherUser = new ScarabUserImpl();
+ otherUser.setEmail(ccTarget);
+ userlist.add(otherUser);
+ }
+ }
+ }
+ catch(TorqueException te)
+ {
+ log.warn("Could not notify archive ["+te.getMessage()+"]");
+ }
+
+ Iterator usersToNotifyIterator = userlist.iterator();
+ return usersToNotifyIterator;
+ }
+
+
+ private boolean userAlreadyNotified(String emailAdress, Map notifiedUserMailAdresses)
+ {
+ ScarabUser user = (ScarabUser)notifiedUserMailAdresses.get(emailAdress);
+ boolean result;
+ if(user != null)
+ {
+ result = true;
+ }
+ else
+ {
+ result = false;
+ }
+ return result;
+ }
+
+
+ /**
* Return the Notification which is the youngest of n1,n2
* Note: If one of the notificaitons is null, return the other.
* If both notificaitons are null, return null
@@ -626,6 +699,7 @@
String[] fromUser = getFromUser(issue, context);
String[] replyToUser = issue.getModule().getSystemEmail();
+
Email.sendEmail(
context,
issue.getModule(),
@@ -636,6 +710,16 @@
"notification/IssueActivity.vm");
}
+ private static List expandMultipleAddresses(String addresses)
+ {
+ List expanded = new ArrayList();
+ StringTokenizer st = new StringTokenizer(addresses, ",;");
+ while (st.hasMoreTokens())
+ expanded.add(st.nextToken().trim());
+ return expanded;
+ }
+
+
private String[] getFromUser(Issue issue, EmailContext context) throws TorqueException
{
String[] replyToUser = null;
Modified: branches/release/b21/src/java/org/tigris/scarab/util/Email.java
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/java/org/tigris/scarab/util/Email.java?view=diff&rev=10203&p1=branches/release/b21/src/java/org/tigris/scarab/util/Email.java&p2=branches/release/b21/src/java/org/tigris/scarab/util/Email.java&r1=10202&r2=10203
==============================================================================
--- branches/release/b21/src/java/org/tigris/scarab/util/Email.java (original)
+++ branches/release/b21/src/java/org/tigris/scarab/util/Email.java 2006-07-08 16:35:00-0700
@@ -136,16 +136,9 @@
//
// Remove duplicate addresses from the cc: list
//
- ccUsers.removeAll(toUsers);
+ ccUsers.removeAll(toUsers);
- String archiveEmail = module.getArchiveEmail();
- if (archiveEmail != null && archiveEmail.trim().length() == 0)
- {
- archiveEmail = null;
- }
-
- Map userLocaleMap = groupAddressesByLocale(module, toUsers, ccUsers,
- archiveEmail);
+ Map userLocaleMap = groupAddressesByLocale(module, toUsers, ccUsers);
for (Iterator i = userLocaleMap.keySet().iterator(); i.hasNext();)
{
@@ -227,15 +220,6 @@
throw new ScarabException(L10NKeySet.ExceptionEmailFailure,t);
}
}
-
- private static List expandMultipleAddresses(String addresses)
- {
- List expanded = new ArrayList();
- StringTokenizer st = new StringTokenizer(addresses, ",;");
- while (st.hasMoreTokens())
- expanded.add(st.nextToken().trim());
- return expanded;
- }
/**
* Creates a map of Locale objects -> List[2], where the first
@@ -249,8 +233,7 @@
*/
private static Map groupAddressesByLocale(Module module,
Collection toUsers,
- Collection ccUsers,
- String archiveEmail)
+ Collection ccUsers)
throws Exception
{
Map result = new HashMap();
@@ -263,13 +246,6 @@
{
fileUser(result, (ScarabUser) iter.next(), module, CC);
}
- if (archiveEmail != null)
- {
- List expandedArchive = expandMultipleAddresses(archiveEmail);
- for (Iterator iter = expandedArchive.iterator(); iter.hasNext(); )
- fileAddress(result, new InternetAddress((String)iter.next()),
- chooseLocale(null, module), CC);
- }
return result;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.