From continuum-commits-return-3470-apmail-maven-continuum-commits-archive=maven.apache.org@maven.apache.org Thu Sep 27 08:25:25 2007 Return-Path: Delivered-To: apmail-maven-continuum-commits-archive@www.apache.org Received: (qmail 67044 invoked from network); 27 Sep 2007 08:25:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Sep 2007 08:25:24 -0000 Received: (qmail 24102 invoked by uid 500); 27 Sep 2007 08:25:14 -0000 Delivered-To: apmail-maven-continuum-commits-archive@maven.apache.org Received: (qmail 24083 invoked by uid 500); 27 Sep 2007 08:25:14 -0000 Mailing-List: contact continuum-commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: continuum-dev@maven.apache.org Delivered-To: mailing list continuum-commits@maven.apache.org Received: (qmail 24070 invoked by uid 99); 27 Sep 2007 08:25:14 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Sep 2007 01:25:14 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Sep 2007 08:27:41 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 09DE91A9832; Thu, 27 Sep 2007 01:25:00 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Thu, 27 Sep 2007 08:24:59 -0000 To: continuum-commits@maven.apache.org From: evenisse@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20070927082500.09DE91A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@ EEE d MMM yyyy HH:mm:ss Z + + [continuum] BUILD ${state}: ${project.projectGroup.name} - ${project.name} - Build Def: ${build.buildDefinition.description} true true false