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 2005/06/18 03:05:57 UTC
svn commit: r191242 - /maven/continuum/trunk/continuum-notifiers
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification
/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc
/maven/continuum/trunk/continuum-plexus-application
/maven/continuum/trunk/continuum-plexus-application/src/conf
Author: evenisse
Date: Fri Jun 17 18:05:56 2005
New Revision: 191242
URL: http://svn.apache.org/viewcvs?rev=191242&view=rev
Log:
Add a basic IRC notifier
Added:
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/ (with props)
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/pom.xml
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/
maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
Modified:
maven/continuum/trunk/continuum-notifiers/pom.xml
maven/continuum/trunk/continuum-plexus-application/pom.xml
maven/continuum/trunk/continuum-plexus-application/src/conf/application.xml
Propchange: maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Jun 17 18:05:56 2005
@@ -0,0 +1,3 @@
+.project
+target
+.classpath
Added: maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/pom.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/pom.xml?rev=191242&view=auto
==============================================================================
--- maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/pom.xml (added)
+++ maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/pom.xml Fri Jun 17 18:05:56 2005
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven.continuum</groupId>
+ <artifactId>continuum-parent-notifiers</artifactId>
+ <version>1.0-alpha-3-SNAPSHOT</version>
+ </parent>
+ <artifactId>continuum-irc-notifier</artifactId>
+ <name>Continuum IRC Notifier</name>
+ <version>1.0-alpha-3-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-ircbot</artifactId>
+ <version>1.1-alpha-4-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
Added: maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java?rev=191242&view=auto
==============================================================================
--- maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java (added)
+++ maven/continuum/trunk/continuum-notifiers/continuum-irc-notifier/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java Fri Jun 17 18:05:56 2005
@@ -0,0 +1,230 @@
+package org.apache.maven.continuum.notification.irc;
+
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
+import org.apache.maven.continuum.project.ContinuumBuild;
+import org.apache.maven.continuum.project.ContinuumProject;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+import org.codehaus.plexus.ircbot.IrcBot;
+import org.codehaus.plexus.notification.NotificationException;
+import org.codehaus.plexus.notification.notifier.AbstractNotifier;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id: $
+ */
+public class IrcContinuumNotifier
+ extends AbstractNotifier
+{
+ // ----------------------------------------------------------------------
+ // Requirements
+ // ----------------------------------------------------------------------
+
+ /** @plexus.configuration */
+ private ContinuumStore store;
+
+ /** @plexus.configuration */
+ private IrcBot ircClient;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private Map configuration;
+
+ // ----------------------------------------------------------------------
+ // Notifier Implementation
+ // ----------------------------------------------------------------------
+
+ public void sendNotification( String source, Set recipients, Map configuration, Map context )
+ throws NotificationException
+ {
+ this.configuration = configuration;
+
+ ContinuumProject project = (ContinuumProject) context.get( ContinuumNotificationDispatcher.CONTEXT_PROJECT );
+
+ ContinuumBuild build = (ContinuumBuild) context.get( ContinuumNotificationDispatcher.CONTEXT_BUILD );
+
+ // ----------------------------------------------------------------------
+ // If there wasn't any building done, don't notify
+ // ----------------------------------------------------------------------
+
+ if ( build == null )
+ {
+ return;
+ }
+
+ // ----------------------------------------------------------------------
+ // Generate and send message
+ // ----------------------------------------------------------------------
+
+ try
+ {
+ if ( source.equals( ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_COMPLETE ) )
+ {
+ buildComplete( project, build, source, recipients );
+ }
+ }
+ catch ( ContinuumException e )
+ {
+ throw new NotificationException( "Error while notifiying.", e );
+ }
+ }
+
+ private void buildComplete( ContinuumProject project, ContinuumBuild build, String source, Set recipients )
+ throws ContinuumException
+ {
+ // ----------------------------------------------------------------------
+ // Check if the message should be sent at all
+ // ----------------------------------------------------------------------
+
+ ContinuumBuild previousBuild = getPreviousBuild( project, build );
+
+ if ( !shouldNotify( build, previousBuild ) )
+ {
+ return;
+ }
+
+ // ----------------------------------------------------------------------
+ // Send the message
+ // ----------------------------------------------------------------------
+
+ ircClient.connect( (String) configuration.get( "host" ), ( (Integer) configuration.get( "host" ) ).intValue() );
+
+ ircClient.logon();
+
+ ircClient.sendNotice( (String) configuration.get( "channel" ), generateMessage( project ) );
+
+ ircClient.logoff();
+
+ ircClient.disconnect();
+ }
+
+ private String generateMessage( ContinuumProject project )
+ {
+ int state = project.getState();
+
+ if ( state == ContinuumProjectState.OK )
+ {
+ return "BUILD SUCCESSFUL: " + project.getName();
+ }
+ else if ( state == ContinuumProjectState.FAILED )
+ {
+ return "BUILD FAILURE: " + project.getName();
+ }
+ else if ( state == ContinuumProjectState.ERROR )
+ {
+ return "BUILD ERROR: " + project.getName();
+ }
+ else
+ {
+ getLogger().warn( "Unknown build state " + project.getState() );
+
+ return "ERROR: Unknown build state " + project.getState();
+ }
+ }
+
+ private boolean shouldNotify( ContinuumBuild build, ContinuumBuild previousBuild )
+ {
+ if ( build == null )
+ {
+ return true;
+ }
+
+ // Always send if the project failed
+ if ( build.getState() == ContinuumProjectState.FAILED || build.getState() == ContinuumProjectState.ERROR )
+ {
+ return true;
+ }
+
+ // Send if this is the first build
+ if ( previousBuild == null )
+ {
+ return true;
+ }
+
+ // Send if the state has changed
+ getLogger().info(
+ "Current build state: " + build.getState() + ", previous build state: "
+ + previousBuild.getState() );
+
+ if ( build.getState() != previousBuild.getState() )
+ {
+ return true;
+ }
+
+ getLogger().info( "Same state, not sending mail." );
+
+ return false;
+ }
+
+ private ContinuumBuild getPreviousBuild( ContinuumProject project, ContinuumBuild currentBuild )
+ throws ContinuumException
+ {
+ Collection builds;
+
+ try
+ {
+ builds = store.getBuildsForProject( project.getId(), 0, 0 );
+ }
+ catch ( ContinuumStoreException ex )
+ {
+ throw new ContinuumException( "Error while finding the last project build.", ex );
+ }
+
+ if ( builds.size() == 0 )
+ {
+ return null;
+ }
+
+ Iterator itr = builds.iterator();
+ ContinuumBuild build = (ContinuumBuild) itr.next();
+
+ if ( currentBuild != null && !build.getId().equals( currentBuild.getId() ) )
+ {
+ throw new ContinuumException( "INTERNAL ERROR: The current build wasn't the first in the build list. "
+ + "Current build: '" + currentBuild.getId() + "', " + "first build: '"
+ + build.getId() + "'." );
+ }
+
+ if ( !itr.hasNext() )
+ {
+ return null;
+ }
+
+ return (ContinuumBuild) itr.next();
+ }
+
+ /**
+ * @see org.codehaus.plexus.notification.notifier.Notifier#sendNotification(java.lang.String, java.util.Set, java.util.Properties)
+ */
+ public void sendNotification( String arg0, Set arg1, Properties arg2 )
+ throws NotificationException
+ {
+ throw new NotificationException( "Not implemented." );
+ }
+}
Modified: maven/continuum/trunk/continuum-notifiers/pom.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-notifiers/pom.xml?rev=191242&r1=191241&r2=191242&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-notifiers/pom.xml (original)
+++ maven/continuum/trunk/continuum-notifiers/pom.xml Fri Jun 17 18:05:56 2005
@@ -22,6 +22,7 @@
</dependency>
</dependencies>
<modules>
+ <module>continuum-irc-notifier</module>
<module>continuum-jabber-notifier</module>
<module>continuum-msn-notifier</module>
</modules>
Modified: maven/continuum/trunk/continuum-plexus-application/pom.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-plexus-application/pom.xml?rev=191242&r1=191241&r2=191242&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-plexus-application/pom.xml (original)
+++ maven/continuum/trunk/continuum-plexus-application/pom.xml Fri Jun 17 18:05:56 2005
@@ -38,6 +38,11 @@
|-->
<dependency>
<groupId>org.apache.maven.continuum</groupId>
+ <artifactId>continuum-irc-notifier</artifactId>
+ <version>1.0-alpha-3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.continuum</groupId>
<artifactId>continuum-jabber-notifier</artifactId>
<version>1.0-alpha-3-SNAPSHOT</version>
</dependency>
Modified: maven/continuum/trunk/continuum-plexus-application/src/conf/application.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-plexus-application/src/conf/application.xml?rev=191242&r1=191241&r2=191242&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-plexus-application/src/conf/application.xml (original)
+++ maven/continuum/trunk/continuum-plexus-application/src/conf/application.xml Fri Jun 17 18:05:56 2005
@@ -112,6 +112,21 @@
</component>
<!--
+ | The irc notifier
+ |-->
+ <component>
+ <role>org.codehaus.plexus.notification.notifier.Notifier</role>
+ <role-hint>irc</role-hint>
+ <implementation>org.apache.maven.continuum.notification.irc.IrcContinuumNotifier</implementation>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.ircbot.IrcBot</role>
+ <role-hint>client</role-hint>
+ </requirement>
+ </requirements>
+ </component>
+
+ <!--
| The jabber notifier
|-->
<component>
@@ -122,6 +137,7 @@
<requirement>
<role>org.codehaus.plexus.jabber.JabberClient</role>
</requirement>
+ </requirements>
<!-- configuration>
<from-address/>
<from-password/>
@@ -141,6 +157,7 @@
<requirement>
<role>org.codehaus.plexus.msn.MsnClient</role>
</requirement>
+ </requirements>
<!-- configuration>
<from-address/>
<from-password/>