You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ev...@apache.org on 2007/09/27 10:24:59 UTC

svn commit: r579940 - in /maven/continuum/trunk: continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/ continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/ continuum-webapp/src/main/resources/META-INF/plexus/

Author: evenisse
Date: Thu Sep 27 01:24:57 2007
New Revision: 579940

URL: http://svn.apache.org/viewvc?rev=579940&view=rev
Log:
[CONTINUUM-1484] Allow customization of email subject
Submitted by: Tomislav Stojcevich

Modified:
    maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
    maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java
    maven/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml

Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java?rev=579940&r1=579939&r2=579940&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java Thu Sep 27 01:24:57 2007
@@ -128,6 +128,18 @@
      */
     private boolean includeBuildSummary = true;
 
+    /**
+     * Customizable mail subject.  Use any combination of literal text, project or build attributes.
+     * Examples: 
+     *   "[continuum] BUILD ${state}: ${project.groupId} ${project.name}" results in "[continuum] BUILD SUCCESSFUL: foo.bar Hello World"
+     *   "[continuum] BUILD ${state}: ${project.name} ${project.scmTag}" results in "[continuum] BUILD SUCCESSFUL: Hello World Branch001"
+     *   "[continuum] BUILD ${state}: ${project.name} ${build.durationTime}" results in "[continuum] BUILD SUCCESSFUL: Hello World 2 sec"
+     *   "[continuum] BUILD ${state}: ${project.name}, Build Def - ${build.buildDefinition.description}" results in "[continuum] BUILD SUCCESSFUL: Hello World, Build Def - Nightly Test Build"
+     * 
+     * @plexus.configuration
+     */
+    private String subjectFormat = "[continuum] BUILD ${state}: ${project.groupId} ${project.name}";
+
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
@@ -343,7 +355,12 @@
         // Send the mail
         // ----------------------------------------------------------------------
 
-        String subject = generateSubject( project, build );
+        String subject;
+        try {
+            subject = generateSubject( project, build );
+        } catch ( Exception e ) {
+            throw new NotificationException( "Error while generating mail subject.", e );
+        }
 
         sendMessage( project, recipients, subject, content, configuration );
     }
@@ -414,33 +431,51 @@
             .getVarValue(), executorConfigurator, profile );
     }
 
-    private String generateSubject( Project project, BuildResult build )
+    private String generateSubject( Project project, BuildResult build ) throws Exception
+    {
+        String state = getState( project, build );
+        
+        VelocityContext context = new VelocityContext();
+        context.put( "project", project );
+        context.put( "build", build );
+        context.put( "state", state );
+        
+        StringWriter writer = new StringWriter();
+
+        boolean velocityResults = velocity.getEngine().evaluate( context, writer, "subjectPattern", subjectFormat );
+            
+        String subject = writer.toString();
+
+        return subject;
+    }
+
+    private String getState( Project project, BuildResult build )
     {
         int state = project.getState();
 
-        if ( build != null )
-        {
+        if ( build != null ) {
             state = build.getState();
         }
 
+
         if ( state == ContinuumProjectState.OK )
         {
-            return "[continuum] BUILD SUCCESSFUL: " + project.getName();
+            return "SUCCESSFUL";
         }
         else if ( state == ContinuumProjectState.FAILED )
         {
-            return "[continuum] BUILD FAILURE: " + project.getName();
+            return "FAILURE";
         }
         else if ( state == ContinuumProjectState.ERROR )
         {
-            return "[continuum] BUILD ERROR: " + project.getName();
+            return "ERROR";
         }
         else
         {
             getLogger().warn( "Unknown build state " + state + " for project " + project.getId() );
 
-            return "[continuum] ERROR: Unknown build state " + state + " for " + project.getName() + " project";
-        }
+            return "ERROR: Unknown build state " + state;
+       }
     }
 
     private void sendMessage( Project project, Set recipients, String subject, String content, Map configuration )
@@ -478,6 +513,8 @@
         try
         {
             message.setSubject( subject );
+
+            getLogger().info( "Message Subject: '" + subject + "'." );
 
             message.setContent( content );
 

Modified: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java?rev=579940&r1=579939&r2=579940&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java (original)
+++ maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java Thu Sep 27 01:24:57 2007
@@ -47,11 +47,14 @@
         throws Exception
     {
         Project project = makeStubProject( "Test Project" );
+        project.setGroupId( "foo.bar" );
 
         BuildResult build = makeBuild( ContinuumProjectState.OK );
 
         MailMessage mailMessage = sendNotificationAndGetMessage( project, build, "lots out build output" );
 
+        assertEquals( "[continuum] BUILD SUCCESSFUL: foo.bar Test Project", mailMessage.getSubject() );
+        
         dumpContent( mailMessage );
     }
 
@@ -59,11 +62,14 @@
         throws Exception
     {
         Project project = makeStubProject( "Test Project" );
+        project.setGroupId( "foo.bar" );
 
         BuildResult build = makeBuild( ContinuumProjectState.FAILED );
 
         MailMessage mailMessage = sendNotificationAndGetMessage( project, build, "output" );
 
+        assertEquals( "[continuum] BUILD FAILURE: foo.bar Test Project", mailMessage.getSubject() );
+
         dumpContent( mailMessage );
     }
 
@@ -71,12 +77,15 @@
         throws Exception
     {
         Project project = makeStubProject( "Test Project" );
+        project.setGroupId( "foo.bar" );
 
         BuildResult build = makeBuild( ContinuumProjectState.ERROR );
 
         build.setError( "Big long error message" );
 
         MailMessage mailMessage = sendNotificationAndGetMessage( project, build, "lots of stack traces" );
+
+        assertEquals( "[continuum] BUILD ERROR: foo.bar Test Project", mailMessage.getSubject() );
 
         dumpContent( mailMessage );
     }

Modified: maven/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml?rev=579940&r1=579939&r2=579940&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ maven/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml Thu Sep 27 01:24:57 2007
@@ -119,6 +119,24 @@
         <from-mailbox></from-mailbox>
         <from-name></from-name>
         <timestamp-format>EEE d MMM yyyy HH:mm:ss Z</timestamp-format>
+        <!-- Customizable mail subject.  Use any combination of literal text, or state, project, or build attributes.
+          Examples: 
+            "[continuum] BUILD ${state}: ${project.groupId} ${project.name}"
+              results in "[continuum] BUILD SUCCESSFUL: foo.bar Hello World"
+            
+            "[continuum] BUILD ${state}: ${project.name} ${project.scmTag}" 
+              results in "[continuum] BUILD SUCCESSFULL: Hello World Branch001"
+            
+            "[continuum] BUILD ${state}: ${project.name} ${project.version}" 
+              results in "[continuum] BUILD SUCCESSFUL: Hello World 2.1-SNAPSHOT"
+            
+            "[continuum] BUILD ${state}: ${project.name} ${build.durationTime}" 
+              results in "[continuum] BUILD SUCCESSFUL: Hello World 2 sec"
+            
+            "[continuum] BUILD ${state}: ${project.name}, Build Def - ${build.buildDefinition.description}" 
+              results in "[continuum] BUILD SUCCESSFUL: Hello World, Build Def - Nightly Test Build"
+         -->
+        <subject-format>[continuum] BUILD ${state}: ${project.projectGroup.name} - ${project.name} - Build Def: ${build.buildDefinition.description}</subject-format>
         <includeBuildResult>true</includeBuildResult>
         <includeBuildSummary>true</includeBuildSummary>
         <alwaysSend>false</alwaysSend>