Author: ronvoe122
Date: 2006-12-28 07:17:41-0800
New Revision: 10399
Modified:
trunk/ (props changed)
trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java
trunk/src/java/org/tigris/scarab/util/Email.java
trunk/src/schema/scarab-schema.xml
trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql
trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql
trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql
Log:
Merged revisions 10366-10369,10372-10373 via svnmerge from
http://scarab.tigris.org/svn/scarab/branches/release/b21
........
r10366 | ronvoe122 | 2006-11-29 19:38:43 +0100 (Mi, 29 Nov 2006) | 11 lines
[SCB1793] (archive emails are not sent in every case) - quick fix for b21:
For each modification of an issue an additional notification is saved.
The recipient in this notification is a dummy user (id = -1234),
which does not exist in the data base.
When this user occurs as a recipient in Email.java,
the recipient Email address is set to the archive email address.
The foreign key constraint on scarab_notification_status.recipient_id has been disabled.
This fk would prevent creating a notification for a nonexisting user as recipient.
This (dirty) fix is intended to be replaced by a clean solution in b22.
........
r10373 | ronvoe122 | 2006-12-01 18:18:24 +0100 (Fr, 01 Dez 2006) | 1 line
[SCB1793] changed upgrade scripts of other dbs.
........
Modified: trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java?view=diff&rev=10399&p1=trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java&p2=trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java&r1=10398&r2=10399
==============================================================================
--- trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java (original)
+++ trunk/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java 2006-12-28 07:17:41-0800
@@ -46,7 +46,6 @@
* individuals on behalf of CollabNet.
*/
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -55,11 +54,7 @@
import java.util.Map;
import java.util.Set;
import java.util.List;
-import java.util.StringTokenizer;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.torque.TorqueException;
@@ -78,7 +73,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.om.ScarabUserManager;
import org.tigris.scarab.tools.localization.L10NKey;
import org.tigris.scarab.tools.localization.L10NKeySet;
import org.tigris.scarab.tools.localization.L10NMessage;
@@ -150,14 +145,17 @@
{
try
{
+ NotificationStatus notification = null;
for (Iterator it = activitySet.getActivityList().iterator(); it.hasNext(); )
{
Activity act = (Activity)it.next();
if (act.getIssue().equals(issue))
{
- Issue actIssue = act.getIssue();
+ notification = new NotificationStatus(Email.getArchiveUser(), act);
+ NotificationStatusPeer.doInsert(notification);
+
Set users = issue.getAllUsersToEmail(AttributePeer.EMAIL_TO);
- users.addAll(actIssue.getAllUsersToEmail(AttributePeer.CC_TO));
+ users.addAll(issue.getAllUsersToEmail(AttributePeer.CC_TO));
users.addAll(activitySet.getRemovedUsers(issue));
// FIXME: Should we still make difference between CC & TO? If so...
@@ -167,41 +165,29 @@
// to view this attribute?
Integer moduleId = issue.getModuleId();
+ String activityType = act.getActivityType();
+
for (Iterator itusers = users.iterator(); itusers.hasNext(); )
{
ScarabUser user = (ScarabUser)itusers.next();
- String activityType = act.getActivityType();
Integer userId = user.getUserId();
- boolean wantsNotification;
- if(userId != null)
- {
- boolean isSelf = userId.equals(fromUser.getUserId());
- wantsNotification = NotificationFilterManager.isNotificationEnabledFor(moduleId, userId, isSelf, activityType);
- }
- else
- {
- // users without userId are considered to be email archivers, who always want notifications.
- wantsNotification = true;
- }
+
+ boolean isSelf = userId.equals(fromUser.getUserId());
+ boolean wantsNotification = NotificationFilterManager.isNotificationEnabledFor(moduleId, userId, isSelf, activityType);
if(wantsNotification)
{
- NotificationStatus notification = new NotificationStatus(user, act);
+ notification = new NotificationStatus(user, act);
NotificationStatusPeer.doInsert(notification);
}
}
}
}
}
- catch (TorqueException se)
- {
- log.error("queueNotifications(): ",se);
- }
catch (Exception e)
{
log.error("queueNotifications(): ",e);
}
-
}
@@ -213,7 +199,7 @@
*/
public void sendPendingNotifications()
{
- log.debug("sendPendingNotifications(): Collect pending notifications ...");
+ log.debug("sendPendingNotifications(): Collect pending notifications ...");
List pending = NotificationStatusPeer.getPendingNotifications();
if(pending == null)
@@ -280,17 +266,18 @@
try
{
issueId = issue.getUniqueId();
- ScarabUser receiver=null;
- try
+ Integer receiverId = currentNotification.getReceiverId();
+ ScarabUser receiver = null;
+ if(receiverId.equals(Email.getArchiveUser().getUserId()))
{
- receiver = currentNotification.getReceiver();
+ receiver = Email.getArchiveUser();
}
- catch(TorqueException te)
+ else
{
- log.warn("current notification has no reciever.");
+ receiver = ScarabUserManager.getInstance(receiverId);
}
creators.add(currentNotification.getCreator());
-
+
Map userActivities = getActivitiesForUser(issueActivities, receiver);
addActivity(currentNotification, userActivities);
addActivity(currentNotification, archiverActivities);
@@ -311,18 +298,11 @@
if (isOldEnough(issueTime))
{
log.debug("processing notifications for issue : ["+issueId+"]");
- Iterator userIterator = getUsersToNotifyIterator(issue, issueActivities);
- Map notifiedUserMailAdresses = new HashMap();
+ Iterator userIterator = getUsersToNotifyIterator(issueActivities);
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);
ectx.put("link", new ScarabLink());
@@ -354,19 +334,9 @@
}
else
{
- try
- {
- log.debug("Issue " + issue.getUniqueId()
- + ": Is not old enough.");
- }
- catch (TorqueException e)
- {
- // in case an error ocurs, we can't do anything here,
- // because the logging submodule itself is broken.
- // Hence give up without any further warning.
- }
+ log.debug("Issue " + issueId + ": Is not old enough.");
}
- }
+ }
log.debug("sendPendingNotifications(): ...finished!");
}
@@ -437,73 +407,11 @@
* @param issueActivities
* @return
*/
- private Iterator getUsersToNotifyIterator(Issue issue, Map issueActivities)
+ private Iterator getUsersToNotifyIterator(Map issueActivities)
{
- List userlist = new ArrayList();
-
- Iterator userIterator = issueActivities.keySet().iterator();
- while(userIterator.hasNext())
- {
- ScarabUser user = (ScarabUser)userIterator.next();
- userlist.add(user);
- }
-
- userlist.addAll(getArchiveUsers(issue));
-
- Iterator usersToNotifyIterator = userlist.iterator();
- return usersToNotifyIterator;
+ return issueActivities.keySet().iterator();
}
-
- /**
- * @param issue
- */
- private Set getArchiveUsers(Issue issue)
- {
- Set userSet = new HashSet();
- 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);
- userSet.add(otherUser);
- }
- }
- }
- catch(TorqueException te)
- {
- log.warn("Could not notify archive ["+te.getMessage()+"]");
- }
- return userSet;
- }
-
-
- 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.
@@ -832,16 +740,6 @@
null,
"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
{
@@ -904,12 +802,4 @@
L10NKey key = (L10NKey)typeDescriptions.get(activityType.getCode());
return key;
}
-
- /**
- * TODO: Remove this method as soon as Quartz is setup!!
- */
- protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
- {
- this.sendPendingNotifications();
- }
}
Modified: trunk/src/java/org/tigris/scarab/util/Email.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/util/Email.java?view=diff&rev=10399&p1=trunk/src/java/org/tigris/scarab/util/Email.java&p2=trunk/src/java/org/tigris/scarab/util/Email.java&r1=10398&r2=10399
==============================================================================
--- trunk/src/java/org/tigris/scarab/util/Email.java (original)
+++ trunk/src/java/org/tigris/scarab/util/Email.java 2006-12-28 07:17:41-0800
@@ -49,10 +49,12 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
import java.util.Properties;
import java.io.File;
@@ -66,11 +68,12 @@
import org.apache.fulcrum.template.TemplateContext;
import org.apache.fulcrum.velocity.ContextAdapter;
import org.apache.log4j.Logger;
+import org.apache.torque.TorqueException;
import org.apache.turbine.Turbine;
-import org.tigris.scarab.notification.ScarabNewNotificationManager;
import org.tigris.scarab.om.GlobalParameter;
import org.tigris.scarab.om.GlobalParameterManager;
import org.tigris.scarab.om.Module;
+import org.tigris.scarab.om.ScarabUserManager;
import org.tigris.scarab.om.ScarabUser;
import org.tigris.scarab.services.email.VelocityEmail;
import org.tigris.scarab.services.email.TemplateHtmlEmail;
@@ -111,7 +114,9 @@
private static final int TO = 0;
private static final int CC = 1;
-
+ private static final Integer ARCHIVE_USER_ID = new Integer(-1234);
+ private static ScarabUser archiveUser;
+
public static Logger log = Log.get(Email.class.getName());
private TemplateContext context = null;
@@ -305,11 +310,64 @@
toAndCC[toOrCC].add(address);
}
+ /**
+ * Checks if a user is the dummy user which indicates
+ * that an Email should be sent to the archive Email addresses
+ */
+ public static boolean isArchiveUser(ScarabUser user)
+ {
+ return user.getUserId()==ARCHIVE_USER_ID;
+ }
+
+ /**
+ * returns the dummy user which indicates
+ * that an Email should be sent to the archive Email addresses
+ */
+ public static ScarabUser getArchiveUser()
+ throws TorqueException
+ {
+ if(archiveUser==null)
+ {
+ archiveUser = ScarabUserManager.getInstance();
+ archiveUser.setUserId(ARCHIVE_USER_ID);
+ }
+ return archiveUser;
+ }
+
+ /**
+ * returns the archive Email addresses of a module
+ */
+ private static Set getArchiveAddresses(Module module)
+ {
+ Set expandedArchiveAddresses = new HashSet();
+
+ String archiveAddresses = module.getArchiveEmail();
+ if(archiveAddresses!=null)
+ {
+ StringTokenizer st = new StringTokenizer(archiveAddresses, ",;");
+ while (st.hasMoreTokens())
+ expandedArchiveAddresses.add(st.nextToken().trim());
+ }
+ return expandedArchiveAddresses;
+ }
+
private static void fileUser(Map userLocaleMap, ScarabUser user,
Module module, int toOrCC) throws Exception
{
- fileAddress(userLocaleMap, new InternetAddress(user.getEmail(), user
- .getName()), chooseLocale(user, module), toOrCC);
+ if(!isArchiveUser(user))
+ {
+ fileAddress(userLocaleMap, new InternetAddress(user.getEmail(),
+ user.getName()), chooseLocale(user, module), toOrCC);
+ }
+ else
+ {
+ for(Iterator addresses=getArchiveAddresses(module).iterator();addresses.hasNext();)
+ {
+ fileAddress(userLocaleMap, new InternetAddress((String)addresses.next(),
+ user.getName()), chooseLocale(user, module), toOrCC);
+
+ }
+ }
}
/**
Modified: trunk/src/schema/scarab-schema.xml
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/schema/scarab-schema.xml?view=diff&rev=10399&p1=trunk/src/schema/scarab-schema.xml&p2=trunk/src/schema/scarab-schema.xml&r1=10398&r2=10399
==============================================================================
--- trunk/src/schema/scarab-schema.xml (original)
+++ trunk/src/schema/scarab-schema.xml 2006-12-28 07:17:41-0800
@@ -1949,9 +1949,13 @@
<reference local="CREATOR_ID" foreign="USER_ID"/>
</foreign-key>
+ <!-- FIXME: [SCB1793] temporary commented out the next fk,
+ because (in b21) a nonexistent user_id is used to
+ save a notification for the archive emails
<foreign-key foreignTable="TURBINE_USER">
<reference local="RECEIVER_ID" foreign="USER_ID"/>
</foreign-key>
+ -->
<foreign-key foreignTable="SCARAB_ACTIVITY">
<reference local="ACTIVITY_ID" foreign="ACTIVITY_ID"/>
Modified: trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql?view=diff&rev=10399&p1=trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql&p2=trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql&r1=10398&r2=10399
==============================================================================
--- trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql (original)
+++ trunk/src/sql/mysql/upgrade/mysql-upgrade-1.0b20-1.0b21-2.sql 2006-12-28 07:17:41-0800
@@ -21,7 +21,10 @@
STATUS_COMMENT VARCHAR(255),
PRIMARY KEY(ACTIVITY_ID,CREATOR_ID,RECEIVER_ID),
FOREIGN KEY (CREATOR_ID) REFERENCES TURBINE_USER (USER_ID),
- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
+-- [SCB1793] commented out the next fk,
+-- because in b21 a nonexistent user_id is used to
+-- save a notification for the archive emails
+-- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
FOREIGN KEY (ACTIVITY_ID) REFERENCES SCARAB_ACTIVITY (ACTIVITY_ID),
INDEX IX_NOTIF_STATUS (STATUS)
)ENGINE=MyISAM;
Modified: trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql?view=diff&rev=10399&p1=trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql&p2=trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql&r1=10398&r2=10399
==============================================================================
--- trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql (original)
+++ trunk/src/sql/oracle/upgrade/oracle-upgrade-1.0b20-1.0b21-2.sql 2006-12-28 07:17:41-0800
@@ -12,7 +12,10 @@
STATUS_COMMENT VARCHAR2(255),
PRIMARY KEY(ACTIVITY_ID,CREATOR_ID,RECEIVER_ID),
FOREIGN KEY (CREATOR_ID) REFERENCES TURBINE_USER (USER_ID),
- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
+-- [SCB1793] commented out the next fk,
+-- because in b21 a nonexistent user_id is used to
+-- save a notification for the archive emails
+-- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
FOREIGN KEY (ACTIVITY_ID) REFERENCES SCARAB_ACTIVITY (ACTIVITY_ID),
INDEX IX_NOTIF_STATUS (STATUS)
);
Modified: trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql?view=diff&rev=10399&p1=trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql&p2=trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql&r1=10398&r2=10399
==============================================================================
--- trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql (original)
+++ trunk/src/sql/postgresql/upgrade/postgresql-upgrade-1.0b20-1.0b21-2.sql 2006-12-28 07:17:41-0800
@@ -18,7 +18,10 @@
STATUS_COMMENT VARCHAR(255),
PRIMARY KEY(ACTIVITY_ID,CREATOR_ID,RECEIVER_ID),
FOREIGN KEY (CREATOR_ID) REFERENCES TURBINE_USER (USER_ID),
- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
+-- [SCB1793] commented out the next fk,
+-- because in b21 a nonexistent user_id is used to
+-- save a notification for the archive emails
+-- FOREIGN KEY (RECEIVER_ID) REFERENCES TURBINE_USER (USER_ID),
FOREIGN KEY (ACTIVITY_ID) REFERENCES SCARAB_ACTIVITY (ACTIVITY_ID)
);
CREATE INDEX IX_NOTIF_STATUS ON SCARAB_NOTIFICATION_STATUS (STATUS);
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.