Scarab commit: svn commit: r10222 - branches/release/b21/src: java/org/tigris/scarab/notification java/org/tigris/scarab/om webapp/WEB-INF/templates/email/notification

[email protected]
Newsgroups gmane.comp.java.scarab.cvs
Message-ID <[email protected]>
Author: dabbous
Date: 2006-07-24 01:33:50-0700
New Revision: 10222

Modified:
   branches/release/b21/src/java/org/tigris/scarab/notification/ScarabNewNotificationManager.java
   branches/release/b21/src/java/org/tigris/scarab/om/Issue.java
   branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm

Log:
EMail subjects contained the current Issue status in any case, which made the subject
unadequate in severeal situations.
Now the current Issue status is only addded to the EMail subject when the status
has been changed in at least one of the associated notifications. Thus we see an Email 
notification "SCB0815 ... New ..." only ONCE. subsequent notifications
will not contain the current status any more until the status is set to something else.

I removed the "experimental method getEmailShortInfo() from Issue.java
and added some enhanced coding to NewNotificationManager

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=10222&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=10221&r2=10222
==============================================================================
--- 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-24 01:33:50-0700
@@ -67,9 +67,13 @@
 import org.tigris.scarab.om.Activity;
 import org.tigris.scarab.om.ActivitySet;
 import org.tigris.scarab.notification.ActivityType;
+import org.tigris.scarab.om.Attribute;
 import org.tigris.scarab.om.AttributePeer;
+import org.tigris.scarab.om.AttributeValue;
+import org.tigris.scarab.om.GlobalParameterManager;
 import org.tigris.scarab.om.Issue;
 import org.tigris.scarab.om.IssueManager;
+import org.tigris.scarab.om.Module;
 import org.tigris.scarab.om.NotificationFilterManager;
 import org.tigris.scarab.om.NotificationStatus;
 import org.tigris.scarab.om.NotificationStatusPeer;
@@ -233,6 +237,7 @@
             firstNotification        = null;
             lastNotification         = null;
             Long issueTime           = null;
+            String changedStatusAttributeValue = "";
             
             Set notificationSet = (Set)pendingIssueMap.get(issue);
 
@@ -240,6 +245,30 @@
             for (Iterator it = notificationSet.iterator(); it.hasNext();)
             {
                 NotificationStatus currentNotification = (NotificationStatus) it.next();
+
+                ActivityType activityType = currentNotification.getActivityType();
+                if(changedStatusAttributeValue.length() == 0 && activityType.equals(ActivityType.ATTRIBUTE_CHANGED))
+                {
+                    try
+                    {
+                        Attribute attribute = currentNotification.getActivity().getAttribute();
+                        if (getIsStatusAttribute(attribute, issue))
+                        {
+                            String name = attribute.getName();
+                            AttributeValue av = issue.getAttributeValue(name);
+                            if(av != null)
+                            {
+                                changedStatusAttributeValue = av.getValue();
+                            }
+                        }
+                    }
+                    catch (TorqueException e)
+                    {
+                        Log.get().warn("Database acess error while retrieving status attribute value.(ignored)");
+                        Log.get().warn("db layer reported: ["+e.getMessage()+"]");
+                    }
+                }
+                
                 firstNotification = getOldestNotification(currentNotification, firstNotification);
                 lastNotification  = getYoungestNotification(currentNotification, lastNotification);
                 try
@@ -294,7 +323,7 @@
                     ectx.put("creators", creators);
                     ectx.put("firstNotification", firstNotification);
                     ectx.put("lastNotification", lastNotification);
-                    
+                    ectx.put("changedStatus",changedStatusAttributeValue);
                     Map groupedActivities = (Map) issueActivities.get(user);
                     if(groupedActivities == null)
                     {
@@ -334,6 +363,46 @@
         log.debug("sendPendingNotifications(): ...finished!");
     }
 
+    
+    /**
+     * This method returns true, if the attribute is identified as 
+     * the "status_attribute" for the current module/issue_type combination.
+     * 
+     * NOTE: The "status_attribute" id is searched in SCARAB_GLOBAL_ATTRIBUTE
+     * first, although it currently should not find any entry there. In a future
+     * release it is intended to allow a more sophisticated controll over what
+     * a status attribute is and how it should be rendered e.g. into email subject.
+     * 
+     * @param attribute
+     * @param issue
+     * @return
+     * @throws TorqueException
+     */
+    private boolean getIsStatusAttribute(Attribute attribute, Issue issue)
+    throws TorqueException
+    {
+        boolean result=false;
+        Module module = issue.getModule();
+        String key = "status_attribute_"+attribute.getAttributeId();
+
+        String statusId = GlobalParameterManager.getString(key,module);
+        if(!statusId.equals(""))
+        {
+            result = true; // the attribute IS the status_attribute
+        }
+        else
+        {
+            String name = attribute.getName().toLowerCase();
+            String globalStatusAttributeName = GlobalParameterManager.getString("scarab.common.status.id").toLowerCase();
+            if(name.equals(globalStatusAttributeName))
+            {
+                result=true;
+            }
+        }
+        return result;
+    }
+    
+    
 
     /**
      * @param ectx
@@ -811,9 +880,8 @@
      * @param type The type for which we want to get the corresponding group's name
      * @return
      */
-    private LocalizationKey getActivityGroup(String activityCode)
+    private LocalizationKey getActivityGroup(ActivityType activityType)
     {
-        ActivityType activityType = ActivityType.getActivityType(activityCode);
         L10NKey key = (L10NKey)typeDescriptions.get(activityType.getCode());
         return key;        
     }

Modified: branches/release/b21/src/java/org/tigris/scarab/om/Issue.java
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/java/org/tigris/scarab/om/Issue.java?view=diff&rev=10222&p1=branches/release/b21/src/java/org/tigris/scarab/om/Issue.java&p2=branches/release/b21/src/java/org/tigris/scarab/om/Issue.java&r1=10221&r2=10222
==============================================================================
--- branches/release/b21/src/java/org/tigris/scarab/om/Issue.java	(original)
+++ branches/release/b21/src/java/org/tigris/scarab/om/Issue.java	2006-07-24 01:33:50-0700
@@ -882,39 +882,21 @@
         }
     }
 
-    /**
-     * This method is currently experimental.
-     * It allows to retrieve the current status
-     * of the issue regarding the options "new", "started","closed"
-     * and so on. If for any reason the status 
-     * @return
-     * @throws TorqueException
-     */
-    public String getEmailShortInfo()
-    throws TorqueException
-    {
-        String result = "";
 
-        String key = "status_attribute_"+this.getTypeId();
-
-        String statusId = GlobalParameterManager.getString(key,this.getModule());
-        if(!statusId.equals(""))
-        {
-            int sid = Integer.parseInt(statusId);
-            AttributeValue av = getAttributeValue(sid);
-            if(av != null)
-            {
-                result=av.getValue();
-            }
-        }
-        return result;
-    }
-    
     public AttributeValue getAttributeValue(String attributeName)
         throws TorqueException
     {
         Attribute attribute = Attribute.getInstance(attributeName);
-        return getAttributeValue(attribute);
+        AttributeValue result;
+        if(attribute == null)
+        {
+            result = null;
+        }
+        else
+        {
+            result = getAttributeValue(attribute);
+        }
+        return result;
     }
 
     public AttributeValue getAttributeValue(int id)

Modified: branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm?view=diff&rev=10222&p1=branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm&p2=branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm&r1=10221&r2=10222
==============================================================================
--- branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm	(original)
+++ branches/release/b21/src/webapp/WEB-INF/templates/email/notification/IssueActivitySubject.vm	2006-07-24 01:33:50-0700
@@ -1 +1 @@
-#set ($args = [$issue.Module.RealName.toUpperCase(), $issue.UniqueId, $l10n.getIgnoreMissingResource($issue.getEmailShortInfo())]) $l10n.format("DefaultModifyIssueEmailSubject", $args)
\ No newline at end of file
+#set ($args = [$issue.Module.RealName.toUpperCase(), $issue.UniqueId, $l10n.getIgnoreMissingResource($changedStatus)]) $l10n.format("DefaultModifyIssueEmailSubject", $args)
\ No newline at end of file
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.