continuum-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marica Tan" <c...@exist.com>
Subject Re: svn commit: r694630 - in /continuum/branches/continuum-transient-state: continuum-api/src/main/java/org/apache/maven/continuum/notification/ continuum-core/src/main/java/org/apache/maven/continuum/ continuum-core/src/main/java/org/apache/maven/co
Date Mon, 15 Sep 2008 05:50:53 GMT
When we have the discussion regarding the transient state, I think this came
out that when scm failed, we can have a configurable notification, so I
included it here.

Thanks,
--
Marica

On Fri, Sep 12, 2008 at 4:07 PM, Emmanuel Venisse <
emmanuel.venisse@gmail.com> wrote:

> Is it really related to "transient" feature?
> Emmanuel
>
> On Fri, Sep 12, 2008 at 9:37 AM, <ctan@apache.org> wrote:
>
> > Author: ctan
> > Date: Fri Sep 12 00:37:53 2008
> > New Revision: 694630
> >
> > URL: http://svn.apache.org/viewvc?rev=694630&view=rev
> > Log:
> > added configurable notification when scm failed
> >
> > Added:
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm
> > Modified:
> >
> >
>  continuum/branches/continuum-transient-state/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-model/src/main/mdo/continuum.xml
> >
> >
>  continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp
> >
> >
>  continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,6 +19,7 @@
> >  * under the License.
> >  */
> >
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> > @@ -47,6 +48,8 @@
> >     String MESSAGE_ID_GOALS_COMPLETED = "GoalsCompleted";
> >
> >     String MESSAGE_ID_BUILD_COMPLETE = "BuildComplete";
> > +
> > +    String MESSAGE_ID_PREPARE_BUILD_COMPLETE = "PrepareBuildComplete";
> >
> >     String CONTEXT_BUILD = "build";
> >
> > @@ -77,4 +80,6 @@
> >     void goalsCompleted( Project project, BuildDefinition
> buildDefinition,
> > BuildResult buildResult );
> >
> >     void buildComplete( Project project, BuildDefinition buildDefinition,
> > BuildResult buildResult );
> > +
> > +    void prepareBuildComplete( ProjectScmRoot projectScmRoot );
> >  }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
> > Fri Sep 12 00:37:53 2008
> > @@ -2313,6 +2313,8 @@
> >
> >         notif.setSendOnWarning( notifier.isSendOnWarning() );
> >
> > +        notif.setSendOnScmFailure( notifier.isSendOnScmFailure() );
> > +
> >         notif.setConfiguration( notifier.getConfiguration() );
> >
> >         notif.setType( notifier.getType() );
> > @@ -2341,6 +2343,8 @@
> >
> >         notif.setSendOnWarning( notifier.isSendOnWarning() );
> >
> > +        notif.setSendOnScmFailure( notifier.isSendOnScmFailure() );
> > +
> >         notif.setConfiguration( notifier.getConfiguration() );
> >
> >         notif.setType( notifier.getType() );
> > @@ -3551,11 +3555,6 @@
> >         for ( Project project : projects )
> >         {
> >             int projectId = project.getId();
> > -
> > -            if ( projectsAndBuildDefinitionsMap.containsKey( projectId )
> )
> > -            {
> > -                continue;
> > -            }
> >
> >             try
> >             {
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java
> > Fri Sep 12 00:37:53 2008
> > @@ -343,6 +343,8 @@
> >
> >                     userNotifier.setSendOnWarning(
> > notifier.isSendOnWarning() );
> >
> > +                    userNotifier.setSendOnScmFailure(
> > notifier.isSendOnScmFailure() );
> > +
> >                     userNotifiers.add( userNotifier );
> >                 }
> >             }
> > @@ -545,6 +547,8 @@
> >
> >                 notifier.setSendOnWarning(
> > projectNotifier.isSendOnWarning() );
> >
> > +                notifier.setSendOnScmFailure( false );
> > +
> >                 notifiers.add( notifier );
> >             }
> >         }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
> > Fri Sep 12 00:37:53 2008
> > @@ -21,6 +21,7 @@
> >
> >  import org.apache.continuum.dao.ProjectDao;
> >  import org.apache.continuum.dao.ProjectGroupDao;
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> > @@ -96,6 +97,11 @@
> >         sendNotification( MESSAGE_ID_BUILD_COMPLETE, project,
> > buildDefinition, buildResult );
> >     }
> >
> > +    public void prepareBuildComplete( ProjectScmRoot projectScmRoot )
> > +    {
> > +        sendNotification( MESSAGE_ID_PREPARE_BUILD_COMPLETE,
> > projectScmRoot );
> > +    }
> > +
> >     //
> > ----------------------------------------------------------------------
> >     //
> >     //
> > ----------------------------------------------------------------------
> > @@ -117,56 +123,17 @@
> >             // Here we need to get all the project details
> >             //  - builds are used to detect if the state has changed
> (TODO:
> > maybe previousState field is better)
> >             //  - notifiers are used to send the notification
> > +            //  - scm results are used to detect if scm failed
> >             project = projectDao.getProjectWithAllDetails(
> project.getId()
> > );
> >
> >             ProjectGroup projectGroup =
> >
> > projectGroupDao.getProjectGroupWithBuildDetailsByProjectGroupId(
> > project.getProjectGroup().getId() );
> >
> >             Map<String, List<ProjectNotifier>> notifiersMap = new
> > HashMap<String, List<ProjectNotifier>>();
> > -            // perform the project level notifications
> > -            for ( ProjectNotifier notifier : (List<ProjectNotifier>)
> > project.getNotifiers() )
> > -            {
> > -                List<ProjectNotifier> notifiers = notifiersMap.get(
> > notifier.getType() );
> > -                if ( notifiers == null )
> > -                {
> > -                    notifiers = new ArrayList<ProjectNotifier>();
> > -                }
> > -
> > -                if ( !notifier.isEnabled() )
> > -                {
> > -                    log.info( notifier.getType() + " notifier (id=" +
> > notifier.getId() + ") is disabled." );
> > -
> > -                    continue;
> > -                }
> > -
> > -                notifiers.add( notifier );
> > -                notifiersMap.put( notifier.getType(), notifiers );
> > -            }
> > -
> > -            // perform the project group level notifications
> > -            if ( projectGroup.getNotifiers() != null )
> > -            {
> > -                for ( ProjectNotifier projectNotifier :
> > (List<ProjectNotifier>) projectGroup.getNotifiers() )
> > -                {
> > -                    List<ProjectNotifier> projectNotifiers =
> > notifiersMap.get( projectNotifier.getType() );
> > -                    if ( projectNotifiers == null )
> > -                    {
> > -                        projectNotifiers = new
> > ArrayList<ProjectNotifier>();
> > -                    }
> > -
> > -                    if ( !projectNotifier.isEnabled() )
> > -                    {
> > -                        log.info( projectNotifier.getType() + "
> > projectNotifier (id=" + projectNotifier.getId() +
> > -                            ") is disabled." );
> > -
> > -                        continue;
> > -                    }
> > -
> > -                    projectNotifiers.add( projectNotifier );
> > -                    notifiersMap.put( projectNotifier.getType(),
> > projectNotifiers );
> > -                }
> > -            }
> > -
> > +
> > +            getProjectNotifiers( project, notifiersMap );
> > +            getProjectGroupNotifiers( projectGroup, notifiersMap );
> > +
> >             for ( String notifierType : notifiersMap.keySet() )
> >             {
> >                 MessageContext context = new MessageContext();
> > @@ -190,6 +157,34 @@
> >         }
> >     }
> >
> > +    private void sendNotification( String messageId, ProjectScmRoot
> > projectScmRoot )
> > +    {
> > +        try
> > +        {
> > +            ProjectGroup group =
> > +
> >  projectGroupDao.getProjectGroupWithBuildDetailsByProjectGroupId(
> > projectScmRoot.getProjectGroup().getId() );
> > +
> > +            Map<String, List<ProjectNotifier>> notifiersMap = new
> > HashMap<String, List<ProjectNotifier>>();
> > +            getProjectGroupNotifiers( group, notifiersMap );
> > +
> > +            for ( String notifierType : notifiersMap.keySet() )
> > +            {
> > +                MessageContext context = new MessageContext();
> > +                context.setProjectScmRoot( projectScmRoot );
> > +
> > +                List<ProjectNotifier> projectNotifiers =
> notifiersMap.get(
> > notifierType );
> > +                context.setNotifier( projectNotifiers );
> > +
> > +                sendNotification( messageId, context );
> > +            }
> > +
> > +        }
> > +        catch ( ContinuumStoreException e )
> > +        {
> > +            log.error( "Error while population the notification
> context.",
> > e );
> > +        }
> > +    }
> > +
> >     private void sendNotification( String messageId, MessageContext
> context
> > )
> >     {
> >         String notifierType = context.getNotifiers().get( 0 ).getType();
> > @@ -205,4 +200,57 @@
> >             log.error( "Error while trying to use the " + notifierType +
> "
> > notifier.", e );
> >         }
> >     }
> > +
> > +    private void getProjectNotifiers( Project project, Map<String,
> > List<ProjectNotifier>> notifiersMap )
> > +    {
> > +        if ( project.getNotifiers() != null )
> > +        {
> > +            // perform the project level notifications
> > +            for ( ProjectNotifier notifier : (List<ProjectNotifier>)
> > project.getNotifiers() )
> > +            {
> > +                List<ProjectNotifier> notifiers = notifiersMap.get(
> > notifier.getType() );
> > +                if ( notifiers == null )
> > +                {
> > +                    notifiers = new ArrayList<ProjectNotifier>();
> > +                }
> > +
> > +                if ( !notifier.isEnabled() )
> > +                {
> > +                    log.info( notifier.getType() + " notifier (id=" +
> > notifier.getId() + ") is disabled." );
> > +
> > +                    continue;
> > +                }
> > +
> > +                notifiers.add( notifier );
> > +                notifiersMap.put( notifier.getType(), notifiers );
> > +            }
> > +        }
> > +    }
> > +
> > +    private void getProjectGroupNotifiers( ProjectGroup projectGroup,
> > Map<String, List<ProjectNotifier>>  notifiersMap )
> > +    {
> > +        // perform the project group level notifications
> > +        if ( projectGroup.getNotifiers() != null )
> > +        {
> > +            for ( ProjectNotifier projectNotifier :
> > (List<ProjectNotifier>) projectGroup.getNotifiers() )
> > +            {
> > +                List<ProjectNotifier> projectNotifiers =
> notifiersMap.get(
> > projectNotifier.getType() );
> > +                if ( projectNotifiers == null )
> > +                {
> > +                    projectNotifiers = new ArrayList<ProjectNotifier>();
> > +                }
> > +
> > +                if ( !projectNotifier.isEnabled() )
> > +                {
> > +                    log.info( projectNotifier.getType() + "
> > projectNotifier (id=" + projectNotifier.getId() +
> > +                        ") is disabled." );
> > +
> > +                    continue;
> > +                }
> > +
> > +                projectNotifiers.add( projectNotifier );
> > +                notifiersMap.put( projectNotifier.getType(),
> > projectNotifiers );
> > +            }
> > +        }
> > +    }
> >  }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,12 +19,14 @@
> >  * under the License.
> >  */
> >
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> >  import
> org.apache.maven.continuum.notification.AbstractContinuumNotifier;
> >  import
> > org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
> >  import org.apache.maven.continuum.notification.MessageContext;
> >  import org.apache.maven.continuum.notification.NotificationException;
> > +import org.apache.maven.continuum.project.ContinuumProjectState;
> >  import org.codehaus.plexus.util.StringUtils;
> >  import org.slf4j.Logger;
> >  import org.slf4j.LoggerFactory;
> > @@ -55,6 +57,8 @@
> >         Project project = context.getProject();
> >
> >         BuildResult build = context.getBuildResult();
> > +
> > +        ProjectScmRoot projectScmRoot = context.getProjectScmRoot();
> >
> >         if ( messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_STARTED ) )
> >         {
> > @@ -80,6 +84,10 @@
> >         {
> >             buildComplete( project, build );
> >         }
> > +        else if ( messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_PREPARE_BUILD_COMPLETE ) )
> > +        {
> > +            prepareBuildComplete( projectScmRoot );
> > +        }
> >         else
> >         {
> >             log.warn( "Unknown messageId: '" + messageId + "'." );
> > @@ -133,6 +141,23 @@
> >             out( project, build, "Build complete." );
> >         }
> >     }
> > +
> > +    private void prepareBuildStarted( ProjectScmRoot projectScmRoot )
> > +    {
> > +        out( projectScmRoot, "Prepare build started." );
> > +    }
> > +
> > +    private void prepareBuildComplete( ProjectScmRoot projectScmRoot )
> > +    {
> > +        if ( StringUtils.isEmpty( projectScmRoot.getError() ) )
> > +        {
> > +            out( projectScmRoot, "Prepare build complete. state: " +
> > projectScmRoot.getState() );
> > +        }
> > +        else
> > +        {
> > +            out( projectScmRoot, "Prepare build complete." );
> > +        }
> > +    }
> >
> >     private void out( Project project, BuildResult build, String msg )
> >     {
> > @@ -143,4 +168,17 @@
> >             System.out.println( build.getError() );
> >         }
> >     }
> > +
> > +    private void out( ProjectScmRoot projectScmRoot, String msg )
> > +    {
> > +        if ( projectScmRoot != null )
> > +        {
> > +            System.out.println( "Prepare build event for '" +
> > projectScmRoot.getScmRootAddress() + "':" + msg );
> > +
> > +            if ( !StringUtils.isEmpty( projectScmRoot.getError() ) )
> > +            {
> > +                System.out.println( projectScmRoot.getError() );
> > +            }
> > +        }
> > +    }
> >  }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,6 +19,7 @@
> >  * under the License.
> >  */
> >
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.Continuum;
> >  import org.apache.maven.continuum.configuration.ConfigurationService;
> >  import org.apache.maven.continuum.execution.ExecutorConfigurator;
> > @@ -31,6 +32,7 @@
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> >  import org.apache.maven.continuum.model.project.ProjectDeveloper;
> > +import org.apache.maven.continuum.model.project.ProjectGroup;
> >  import org.apache.maven.continuum.model.project.ProjectNotifier;
> >  import org.apache.maven.continuum.model.scm.ChangeSet;
> >  import org.apache.maven.continuum.model.scm.ScmResult;
> > @@ -241,12 +243,21 @@
> >         BuildResult build = context.getBuildResult();
> >         String buildOutput = getBuildOutput( project, build );
> >         BuildDefinition buildDefinition = context.getBuildDefinition();
> > -
> > +        ProjectScmRoot projectScmRoot = context.getProjectScmRoot();
> > +
> > +        boolean isPrepareBuildComplete =
> > +            messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_PREPARE_BUILD_COMPLETE );
> > +
> > +        if ( projectScmRoot == null && isPrepareBuildComplete )
> > +        {
> > +            return;
> > +        }
> > +
> >         //
> > ----------------------------------------------------------------------
> >         // If there wasn't any building done, don't notify
> >         //
> > ----------------------------------------------------------------------
> >
> > -        if ( build == null )
> > +        if ( build == null && !isPrepareBuildComplete )
> >         {
> >             return;
> >         }
> > @@ -259,6 +270,10 @@
> >         {
> >             buildComplete( project, notifiers, build, buildOutput,
> > messageId, context, buildDefinition );
> >         }
> > +        else if ( isPrepareBuildComplete )
> > +        {
> > +            prepareBuildComplete( projectScmRoot, notifiers, messageId,
> > context );
> > +        }
> >     }
> >
> >     private void buildComplete( Project project, List<ProjectNotifier>
> > notifiers, BuildResult build, String buildOutput,
> > @@ -401,6 +416,75 @@
> >         sendMessage( project, notifiers, subject, content, messageContext
> > );
> >     }
> >
> > +    private void prepareBuildComplete( ProjectScmRoot projectScmRoot,
> > List<ProjectNotifier> notifiers,
> > +                                       String messageId, MessageContext
> > messageContext )
> > +        throws NotificationException
> > +    {
> > +        //
> > ----------------------------------------------------------------------
> > +        // Generate the mail contents
> > +        //
> > ----------------------------------------------------------------------
> > +
> > +        String packageName = getClass().getPackage().getName().replace(
> > '.', '/' );
> > +
> > +        String templateName = packageName + "/templates/"  + messageId +
> > ".vm";
> > +
> > +        StringWriter writer = new StringWriter();
> > +
> > +        String content;
> > +
> > +        try
> > +        {
> > +            VelocityContext context = new VelocityContext();
> > +
> > +            //
> > ----------------------------------------------------------------------
> > +            // Data objects
> > +            //
> > ----------------------------------------------------------------------
> > +
> > +            context.put( "reportUrl", getReportUrl(
> > projectScmRoot.getProjectGroup(),
> > +                                                    projectScmRoot,
> > configurationService ) );
> > +
> > +            context.put( "projectGroup",
> projectScmRoot.getProjectGroup()
> > );
> > +
> > +            context.put( "projectScmRoot", projectScmRoot );
> > +
> > +            // TODO put other profile env var could be a security if
> they
> > provide passwords ?
> > +
> > +            //
> > ----------------------------------------------------------------------
> > +            // Generate
> > +            //
> > ----------------------------------------------------------------------
> > +
> > +            velocity.getEngine().mergeTemplate( templateName, context,
> > writer );
> > +
> > +            content = writer.getBuffer().toString();
> > +        }
> > +        catch ( ResourceNotFoundException e )
> > +        {
> > +            log.info( "No such template: '" + templateName + "'." );
> > +
> > +            return;
> > +        }
> > +        catch ( Exception e )
> > +        {
> > +            throw new NotificationException( "Error while generating
> mail
> > contents.", e );
> > +        }
> > +
> > +        //
> > ----------------------------------------------------------------------
> > +        // Send the mail
> > +        //
> > ----------------------------------------------------------------------
> > +
> > +        String subject;
> > +        try
> > +        {
> > +            subject = generateSubject( projectScmRoot );
> > +        }
> > +        catch ( Exception e )
> > +        {
> > +            throw new NotificationException( "Error while generating
> mail
> > subject.", e );
> > +        }
> > +
> > +        sendMessage( projectScmRoot, notifiers, subject, content,
> > messageContext );
> > +    }
> > +
> >     //
> > ----------------------------------------------------------------------
> >     //
> >     //
> > ----------------------------------------------------------------------
> > @@ -482,6 +566,23 @@
> >
> >         return writer.toString();
> >     }
> > +
> > +    private String generateSubject( ProjectScmRoot projectScmRoot )
> > +        throws Exception
> > +    {
> > +        String state = getState( projectScmRoot );
> > +        subjectFormat = "[continuum] PREPARE BUILD ${state}:
> > ${projectScmRoot.scmRootAddress}";
> > +
> > +        VelocityContext context = new VelocityContext();
> > +        context.put( "projectScmRoot", projectScmRoot );
> > +        context.put( "state", state );
> > +
> > +        StringWriter writer = new StringWriter();
> > +
> > +        boolean velocityResults = velocity.getEngine().evaluate(
> context,
> > writer, "subjectPattern", subjectFormat );
> > +
> > +        return writer.toString();
> > +    }
> >
> >     private String getState( Project project, BuildResult build )
> >     {
> > @@ -511,7 +612,28 @@
> >             return "ERROR: Unknown build state " + state;
> >         }
> >     }
> > +
> > +    private String getState( ProjectScmRoot projectScmRoot )
> > +    {
> > +        int state = projectScmRoot.getState();
> > +
> > +        if ( state == ContinuumProjectState.UPDATED )
> > +        {
> > +            return "SUCCESSFUL";
> > +        }
> > +        else if ( state == ContinuumProjectState.ERROR )
> > +        {
> > +            return "ERROR";
> > +        }
> > +        else
> > +        {
> > +            log.warn( "Unknown prepare build state " + state + " for SCM
> > Root URL " + projectScmRoot.getScmRootAddress() +
> > +                      " in projectGroup " +
> > projectScmRoot.getProjectGroup().getId() );
> >
> > +            return "ERROR: Unknown build state " + state;
> > +        }
> > +    }
> > +
> >     private void sendMessage( Project project, List<ProjectNotifier>
> > notifiers, String subject, String content,
> >                               MessageContext context )
> >         throws NotificationException
> > @@ -588,7 +710,8 @@
> >                         {
> >                             if ( Boolean.parseBoolean( committerField ) )
> >                             {
> > -                                ScmResult scmResult =
> > context.getBuildResult().getScmResult();
> > +                                //ScmResult scmResult =
> > context.getBuildResult().getScmResult();
> > +                                ScmResult scmResult =
> > context.getProject().getScmResult();
> >                                 if ( scmResult != null &&
> > scmResult.getChanges() != null &&
> >                                     !scmResult.getChanges().isEmpty() )
> >                                 {
> > @@ -651,6 +774,99 @@
> >             throw new NotificationException( "Exception while sending
> > message.", ex );
> >         }
> >     }
> > +
> > +    private void sendMessage( ProjectScmRoot projectScmRoot,
> > List<ProjectNotifier> notifiers,
> > +                              String subject, String content,
> > MessageContext context )
> > +        throws NotificationException
> > +    {
> > +        ProjectGroup projectGroup = projectScmRoot.getProjectGroup();
> > +
> > +        if ( notifiers.size() == 0 )
> > +        {
> > +            // This is a useful message for the users when debugging why
> > they don't
> > +            // receive any mails
> > +
> > +            log.info( "No mail notifier for '" + projectGroup.getName()
> +
> > "'." );
> > +
> > +            return;
> > +        }
> > +
> > +        String fromMailbox = getFromMailbox( notifiers );
> > +
> > +        if ( fromMailbox == null )
> > +        {
> > +            log
> > +                .warn( projectGroup.getName() +
> > +                    ": ProjectGroup is missing nag email and global from
> > mailbox is missing, not sending mail." );
> > +
> > +            return;
> > +        }
> > +
> > +        MailMessage message = new MailMessage();
> > +
> > +        try
> > +        {
> > +            message.setSubject( subject );
> > +
> > +            log.info( "Message Subject: '" + subject + "'." );
> > +
> > +            message.setContent( content );
> > +
> > +            MailMessage.Address from = new MailMessage.Address(
> > fromMailbox, fromName );
> > +
> > +            message.setFrom( from );
> > +
> > +            log.info( "Sending message: From '" + from + "'." );
> > +
> > +            if ( StringUtils.isEmpty( toOverride ) )
> > +            {
> > +                for ( ProjectNotifier notifier : notifiers )
> > +                {
> > +                    if ( !shouldNotify( projectScmRoot, notifier ) )
> > +                    {
> > +                        continue;
> > +                    }
> > +
> > +                    Map<String, String> conf =
> > notifier.getConfiguration();
> > +                    if ( conf != null )
> > +                    {
> > +                        String addressField = conf.get( ADDRESS_FIELD );
> > +
> > +                        if ( StringUtils.isNotEmpty( addressField ) )
> > +                        {
> > +                            String[] addresses = StringUtils.split(
> > addressField, "," );
> > +
> > +                            for ( String address : addresses )
> > +                            {
> > +                                // TODO: set a proper name
> > +                                MailMessage.Address to = new
> > MailMessage.Address( address.trim() );
> > +
> > +                                log.info( "Recipient: To '" + to + "'."
> > );
> > +
> > +                                message.addTo( to );
> > +                            }
> > +                        }
> > +                    }
> > +                }
> > +            }
> > +            else
> > +            {
> > +                // TODO: use configuration file instead of to load it
> fron
> > component configuration
> > +                // TODO: set a proper name
> > +                MailMessage.Address to = new MailMessage.Address(
> > toOverride.trim() );
> > +
> > +                log.info( "Recipient: To '" + to + "'." );
> > +
> > +                message.addTo( to );
> > +            }
> > +
> > +            mailSender.send( message );
> > +        }
> > +        catch ( MailSenderException ex )
> > +        {
> > +            throw new NotificationException( "Exception while sending
> > message.", ex );
> > +        }
> > +    }
> >
> >     private Map<String, String> mapDevelopersToRecipients(
> > List<ProjectDeveloper> developers )
> >     {
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
> > Fri Sep 12 00:37:53 2008
> > @@ -14,6 +14,7 @@
> >  import org.apache.maven.continuum.model.project.ProjectGroup;
> >  import org.apache.maven.continuum.model.scm.ChangeSet;
> >  import org.apache.maven.continuum.model.scm.ScmResult;
> > +import
> > org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
> >  import org.apache.maven.continuum.project.ContinuumProjectState;
> >  import org.apache.maven.continuum.store.ContinuumStoreException;
> >  import org.apache.maven.continuum.utils.ContinuumUtils;
> > @@ -59,7 +60,12 @@
> >      * @plexus.requirement
> >      */
> >     private WorkingDirectoryService workingDirectoryService;
> > -
> > +
> > +    /**
> > +     * @plexus.requirement
> > +     */
> > +    private ContinuumNotificationDispatcher notifierDispatcher;
> > +
> >     public void executeTask( Task task )
> >         throws TaskExecutionException
> >     {
> > @@ -239,6 +245,7 @@
> >         if ( projectScmRoot.getState() != ContinuumProjectState.ERROR )
> >         {
> >             projectScmRoot.setState( ContinuumProjectState.UPDATED );
> > +            projectScmRoot.setError( null );
> >
> >             try
> >             {
> > @@ -249,6 +256,8 @@
> >                 throw new TaskExecutionException( "Error persisting
> > projectScmRoot", e );
> >             }
> >         }
> > +
> > +        notifierDispatcher.prepareBuildComplete( projectScmRoot );
> >     }
> >
> >     /**
> >
> > Added:
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm?rev=694630&view=auto
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm
> > (added)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm
> > Fri Sep 12 00:37:53 2008
> > @@ -0,0 +1,26 @@
> > +#*
> > + * 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.
> > + *#
> > +Online report : $reportUrl
> > +
> > +  Project Group: $projectGroup.name
> > +  SCM Root URL: $projectScmRoot.scmRootAddress
> > +
> > +#if ($projectScmRoot.state == 4)
> >
> >
> +****************************************************************************
> > +Prepare Build Error:
> >
> >
> +****************************************************************************
> > +$projectScmRoot.error
> > +#end
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-model/src/main/mdo/continuum.xml
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-model/src/main/mdo/continuum.xml?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-model/src/main/mdo/continuum.xml
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-model/src/main/mdo/continuum.xml
> > Fri Sep 12 00:37:53 2008
> > @@ -433,6 +433,12 @@
> >             <multiplicity>*</multiplicity>
> >           </association>
> >         </field>
> > +        <field>
> > +          <name>sendOnScmFailure</name>
> > +          <version>1.1.2+</version>
> > +          <type>boolean</type>
> > +          <defaultValue>false</defaultValue>
> > +        </field>
> >       </fields>
> >       <codeSegments>
> >         <codeSegment>
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -22,6 +22,8 @@
> >  import
> org.apache.continuum.configuration.ContinuumConfigurationException;
> >  import org.apache.continuum.dao.BuildResultDao;
> >  import org.apache.continuum.dao.ProjectDao;
> > +import org.apache.continuum.dao.ProjectScmRootDao;
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.ContinuumException;
> >  import org.apache.maven.continuum.configuration.ConfigurationException;
> >  import
> > org.apache.maven.continuum.configuration.ConfigurationLoadingException;
> > @@ -29,6 +31,7 @@
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> > +import org.apache.maven.continuum.model.project.ProjectGroup;
> >  import org.apache.maven.continuum.model.project.ProjectNotifier;
> >  import org.apache.maven.continuum.project.ContinuumProjectState;
> >  import org.apache.maven.continuum.store.ContinuumStoreException;
> > @@ -62,6 +65,11 @@
> >     private ProjectDao projectDao;
> >
> >     /**
> > +     * @plexus.requirement
> > +     */
> > +    private ProjectScmRootDao projectScmRootDao;
> > +
> > +    /**
> >      * @plexus.configuration
> >      */
> >     private boolean alwaysSend = false;
> > @@ -135,6 +143,42 @@
> >         }
> >     }
> >
> > +    public String getReportUrl( ProjectGroup projectGroup,
> ProjectScmRoot
> > projectScmRoot,
> > +                                ConfigurationService
> configurationService
> > )
> > +        throws ContinuumException
> > +    {
> > +        try
> > +        {
> > +            if ( !configurationService.isLoaded() )
> > +            {
> > +                configurationService.reload();
> > +            }
> > +
> > +            StringBuffer buf = new StringBuffer(
> > configurationService.getUrl() );
> > +
> > +            if ( projectGroup != null && projectScmRoot != null )
> > +            {
> > +                if ( !buf.toString().endsWith( "/" ) )
> > +                {
> > +                    buf.append( "/" );
> > +                }
> > +
> > +                buf.append( "scmResult.action?projectScmRootId="
> ).append(
> > projectScmRoot.getId() )
> > +                   .append( "&projectGroupId=" ).append(
> > projectGroup.getId() );
> > +            }
> > +
> > +            return buf.toString();
> > +        }
> > +        catch ( ConfigurationLoadingException e )
> > +        {
> > +            throw new ContinuumException( "Can't obtain the base url
> from
> > configuration.", e );
> > +        }
> > +        catch ( ContinuumConfigurationException e )
> > +        {
> > +            throw new ContinuumException( "Can't obtain the base url
> from
> > configuration.", e );
> > +        }
> > +    }
> > +
> >     /**
> >      * Determine if message must be sent
> >      *
> > @@ -233,6 +277,31 @@
> >         return false;
> >     }
> >
> > +    public boolean shouldNotify( ProjectScmRoot projectScmRoot,
> > ProjectNotifier projectNotifier )
> > +    {
> > +        if ( projectNotifier == null )
> > +        {
> > +            projectNotifier = new ProjectNotifier();
> > +        }
> > +
> > +        if ( projectScmRoot == null )
> > +        {
> > +            return false;
> > +        }
> > +
> > +        if ( alwaysSend )
> > +        {
> > +            return true;
> > +        }
> > +
> > +        if ( projectScmRoot.getState() == ContinuumProjectState.ERROR &&
> > projectNotifier.isSendOnScmFailure() )
> > +        {
> > +            return true;
> > +        }
> > +
> > +        return false;
> > +    }
> > +
> >     protected BuildResult getPreviousBuild( Project project,
> > BuildDefinition buildDef, BuildResult currentBuild )
> >         throws NotificationException
> >     {
> > @@ -291,4 +360,78 @@
> >             throw new NotificationException( "Unable to obtain project
> > builds", e );
> >         }
> >     }
> > +
> > +    protected String generateMessage( Project project, BuildResult
> build,
> > ConfigurationService configurationService )
> > +        throws NotificationException
> > +    {
> > +        int state = project.getState();
> > +
> > +        if ( build != null )
> > +        {
> > +            state = build.getState();
> > +        }
> > +
> > +        String message;
> > +
> > +        if ( state == ContinuumProjectState.OK )
> > +        {
> > +            message = "BUILD SUCCESSFUL: " + project.getName();
> > +        }
> > +        else if ( state == ContinuumProjectState.FAILED )
> > +        {
> > +            message = "BUILD FAILURE: " + project.getName();
> > +        }
> > +        else if ( state == ContinuumProjectState.ERROR )
> > +        {
> > +            message = "BUILD ERROR: " + project.getName();
> > +        }
> > +        else
> > +        {
> > +            log.warn( "Unknown build state " + state + " for project " +
> > project.getId() );
> > +
> > +            message = "ERROR: Unknown build state " + state + " for " +
> > project.getName() + " project";
> > +        }
> > +
> > +        try
> > +        {
> > +            return message + " " + getReportUrl( project, build,
> > configurationService );
> > +        }
> > +        catch ( ContinuumException e )
> > +        {
> > +            throw new NotificationException( "Cannot generate message",
> e
> > );
> > +        }
> > +    }
> > +
> > +    protected String generateMessage( ProjectScmRoot projectScmRoot,
> > ConfigurationService configurationService )
> > +        throws NotificationException
> > +    {
> > +        int state = projectScmRoot.getState();
> > +        String scmRootAddress = projectScmRoot.getScmRootAddress();
> > +
> > +        String message;
> > +
> > +        if ( state == ContinuumProjectState.UPDATED )
> > +        {
> > +            message = "PREPARE BUILD SUCCESSFUL: " + scmRootAddress;
> > +        }
> > +        else if ( state == ContinuumProjectState.ERROR )
> > +        {
> > +            message = "PREPARE BUILD ERROR: " + scmRootAddress;
> > +        }
> > +        else
> > +        {
> > +            log.warn( "Unknown prepare build state " + state + " for SCM
> > root URL " + scmRootAddress );
> > +
> > +            message = "ERROR: Unknown prepare build state " + state + "
> > for SCM root URL" + scmRootAddress;
> > +        }
> > +
> > +        try
> > +        {
> > +            return message + " " + getReportUrl(
> > projectScmRoot.getProjectGroup(), projectScmRoot, configurationService );
> > +        }
> > +        catch ( ContinuumException e )
> > +        {
> > +            throw new NotificationException( "Cannot generate message",
> e
> > );
> > +        }
> > +    }
> >  }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,9 +19,11 @@
> >  * under the License.
> >  */
> >
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> >  import org.apache.maven.continuum.model.project.Project;
> > +import org.apache.maven.continuum.model.project.ProjectGroup;
> >  import org.apache.maven.continuum.model.project.ProjectNotifier;
> >
> >  import java.util.List;
> > @@ -40,6 +42,8 @@
> >
> >     private BuildResult buildResult;
> >
> > +    private ProjectScmRoot projectScmRoot;
> > +
> >     public Project getProject()
> >     {
> >         return project;
> > @@ -79,4 +83,14 @@
> >     {
> >         this.buildResult = buildResult;
> >     }
> > +
> > +    public ProjectScmRoot getProjectScmRoot()
> > +    {
> > +        return projectScmRoot;
> > +    }
> > +
> > +    public void setProjectScmRoot( ProjectScmRoot projectScmRoot )
> > +    {
> > +        this.projectScmRoot = projectScmRoot;
> > +    }
> >  }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,7 +19,7 @@
> >  * under the License.
> >  */
> >
> > -import org.apache.maven.continuum.ContinuumException;
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.configuration.ConfigurationService;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> > @@ -29,7 +29,6 @@
> >  import
> > org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
> >  import org.apache.maven.continuum.notification.MessageContext;
> >  import org.apache.maven.continuum.notification.NotificationException;
> > -import org.apache.maven.continuum.project.ContinuumProjectState;
> >  import
> org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
> >  import org.codehaus.plexus.util.StringUtils;
> >  import org.schwering.irc.lib.IRCConnection;
> > @@ -232,11 +231,21 @@
> >
> >         BuildResult build = context.getBuildResult();
> >
> > +        ProjectScmRoot projectScmRoot = context.getProjectScmRoot();
> > +
> > +        boolean isPrepareBuildComplete =
> > +            messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_PREPARE_BUILD_COMPLETE );
> > +
> > +        if ( projectScmRoot == null && isPrepareBuildComplete )
> > +        {
> > +            return;
> > +        }
> > +
> >         //
> > ----------------------------------------------------------------------
> >         // If there wasn't any building done, don't notify
> >         //
> > ----------------------------------------------------------------------
> >
> > -        if ( build == null )
> > +        if ( build == null && !isPrepareBuildComplete )
> >         {
> >             return;
> >         }
> > @@ -245,38 +254,58 @@
> >         // Generate and send message
> >         //
> > ----------------------------------------------------------------------
> >
> > -        try
> > +        if ( messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_COMPLETE ) )
> >         {
> > -            if ( messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_COMPLETE ) )
> > +            for ( ProjectNotifier notifier : notifiers )
> >             {
> > -                for ( ProjectNotifier notifier : notifiers )
> > -                {
> > -                    buildComplete( project, notifier, build,
> > buildDefinition );
> > -                }
> > +                buildComplete( project, notifier, build, buildDefinition
> > );
> >             }
> >         }
> > -        catch ( ContinuumException e )
> > +        else if ( isPrepareBuildComplete )
> >         {
> > -            throw new NotificationException( "Error while notifiying.",
> e
> > );
> > +            for ( ProjectNotifier notifier : notifiers )
> > +            {
> > +                prepareBuildComplete( projectScmRoot, notifier );
> > +            }
> >         }
> >     }
> >
> >     private void buildComplete( Project project, ProjectNotifier
> > projectNotifier, BuildResult build,
> >                                 BuildDefinition buildDef )
> > -        throws ContinuumException, NotificationException
> > +        throws NotificationException
> >     {
> >         //
> > ----------------------------------------------------------------------
> >         // Check if the message should be sent at all
> >         //
> > ----------------------------------------------------------------------
> >
> >         BuildResult previousBuild = getPreviousBuild( project, buildDef,
> > build );
> > -        Map<String, String> configuration =
> > projectNotifier.getConfiguration();
> >
> >         if ( !shouldNotify( build, previousBuild, projectNotifier ) )
> >         {
> >             return;
> >         }
> >
> > +        sendMessage( projectNotifier.getConfiguration(),
> generateMessage(
> > project, build, configurationService ) );
> > +    }
> > +
> > +    private void prepareBuildComplete( ProjectScmRoot projectScmRoot,
> > ProjectNotifier projectNotifier )
> > +        throws NotificationException
> > +    {
> > +        //
> > ----------------------------------------------------------------------
> > +        // Check if the message should be sent at all
> > +        //
> > ----------------------------------------------------------------------
> > +
> > +        if ( !shouldNotify( projectScmRoot, projectNotifier ) )
> > +        {
> > +            return;
> > +        }
> > +
> > +        sendMessage( projectNotifier.getConfiguration(),
> generateMessage(
> > projectScmRoot, configurationService ) );
> > +    }
> > +
> > +    private void sendMessage( Map<String, String> configuration, String
> > message )
> > +        throws NotificationException
> > +    {
> >         //
> > ----------------------------------------------------------------------
> >         // Gather configuration values
> >         //
> > ----------------------------------------------------------------------
> > @@ -327,48 +356,14 @@
> >         {
> >             IRCConnection ircConnection = getIRConnection( host, port,
> > password, nickName, alternateNickName, userName,
> >                                                            fullName,
> > channel, isSsl );
> > -            ircConnection.doPrivmsg( channel, generateMessage( project,
> > build ) );
> > +            ircConnection.doPrivmsg( channel, message );
> >         }
> >         catch ( IOException e )
> >         {
> >             throw new NotificationException( "Exception while
> > checkConnection to irc ." + host, e );
> >         }
> >     }
> > -
> > -    private String generateMessage( Project project, BuildResult build )
> > -        throws ContinuumException
> > -    {
> > -        int state = project.getState();
> > -
> > -        if ( build != null )
> > -        {
> > -            state = build.getState();
> > -        }
> > -
> > -        String message;
> > -
> > -        if ( state == ContinuumProjectState.OK )
> > -        {
> > -            message = "BUILD SUCCESSFUL: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.FAILED )
> > -        {
> > -            message = "BUILD FAILURE: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.ERROR )
> > -        {
> > -            message = "BUILD ERROR: " + project.getName();
> > -        }
> > -        else
> > -        {
> > -            log.warn( "Unknown build state " + state + " for project " +
> > project.getId() );
> > -
> > -            message = "ERROR: Unknown build state " + state + " for " +
> > project.getName() + " project";
> > -        }
> > -
> > -        return message + " " + getReportUrl( project, build,
> > configurationService );
> > -    }
> > -
> > +
> >     /**
> >      * Treats IRC events. The most of them are just printed.
> >      */
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,7 +19,7 @@
> >  * under the License.
> >  */
> >
> > -import org.apache.maven.continuum.ContinuumException;
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.configuration.ConfigurationService;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> >  import org.apache.maven.continuum.model.project.BuildResult;
> > @@ -29,7 +29,6 @@
> >  import
> > org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
> >  import org.apache.maven.continuum.notification.MessageContext;
> >  import org.apache.maven.continuum.notification.NotificationException;
> > -import org.apache.maven.continuum.project.ContinuumProjectState;
> >  import org.codehaus.plexus.jabber.JabberClient;
> >  import org.codehaus.plexus.jabber.JabberClientException;
> >  import org.codehaus.plexus.util.StringUtils;
> > @@ -114,11 +113,21 @@
> >         List<ProjectNotifier> notifiers = context.getNotifiers();
> >         BuildDefinition buildDefinition = context.getBuildDefinition();
> >         BuildResult build = context.getBuildResult();
> > +        ProjectScmRoot projectScmRoot = context.getProjectScmRoot();
> > +
> > +        boolean isPrepareBuildComplete =
> > +            messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_PREPARE_BUILD_COMPLETE );
> > +
> > +        if ( projectScmRoot == null && isPrepareBuildComplete )
> > +        {
> > +            return;
> > +        }
> > +
> >         //
> > ----------------------------------------------------------------------
> >         // If there wasn't any building done, don't notify
> >         //
> > ----------------------------------------------------------------------
> >
> > -        if ( build == null )
> > +        if ( build == null && !isPrepareBuildComplete )
> >         {
> >             return;
> >         }
> > @@ -152,7 +161,14 @@
> >         {
> >             for ( ProjectNotifier notifier : notifiers )
> >             {
> > -                sendMessage( project, notifier, build, buildDefinition
> );
> > +                buildComplete( project, notifier, build, buildDefinition
> > );
> > +            }
> > +        }
> > +        else if ( isPrepareBuildComplete )
> > +        {
> > +            for ( ProjectNotifier notifier : notifiers )
> > +            {
> > +                prepareBuildComplete( projectScmRoot, notifier );
> >             }
> >         }
> >     }
> > @@ -161,45 +177,9 @@
> >     //
> >     //
> > ----------------------------------------------------------------------
> >
> > -    private String generateMessage( Project project, BuildResult build )
> > -        throws ContinuumException
> > -    {
> > -        int state = project.getState();
> > -
> > -        if ( build != null )
> > -        {
> > -            state = build.getState();
> > -        }
> > -
> > -        String message;
> > -
> > -        if ( state == ContinuumProjectState.OK )
> > -        {
> > -            message = "BUILD SUCCESSFUL: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.FAILED )
> > -        {
> > -            message = "BUILD FAILURE: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.ERROR )
> > -        {
> > -            message = "BUILD ERROR: " + project.getName();
> > -        }
> > -        else
> > -        {
> > -            log.warn( "Unknown build state " + state + " for project " +
> > project.getId() );
> > -
> > -            message = "ERROR: Unknown build state " + state + " for " +
> > project.getName() + " project";
> > -        }
> > -
> > -        return message + " " + getReportUrl( project, build,
> > configurationService );
> > -    }
> > -
> > -    private void sendMessage( Project project, ProjectNotifier notifier,
> > BuildResult build, BuildDefinition buildDef )
> > +    private void buildComplete( Project project, ProjectNotifier
> notifier,
> > BuildResult build, BuildDefinition buildDef )
> >         throws NotificationException
> >     {
> > -        String message;
> > -
> >         //
> > ----------------------------------------------------------------------
> >         // Check if the mail should be sent at all
> >         //
> > ----------------------------------------------------------------------
> > @@ -211,26 +191,34 @@
> >             return;
> >         }
> >
> > -        try
> > -        {
> > -            message = generateMessage( project, build );
> > -        }
> > -        catch ( ContinuumException e )
> > +        sendMessage( notifier.getConfiguration(), generateMessage(
> > project, build, configurationService ) );
> > +    }
> > +
> > +    private void prepareBuildComplete( ProjectScmRoot projectScmRoot,
> > ProjectNotifier notifier )
> > +        throws NotificationException
> > +    {
> > +        if ( !shouldNotify( projectScmRoot, notifier ) )
> >         {
> > -            throw new NotificationException( "Can't generate the
> > message.", e );
> > +            return;
> >         }
> > +
> > +        sendMessage( notifier.getConfiguration(), generateMessage(
> > projectScmRoot, configurationService ) );
> > +    }
> > +
> > +    private void sendMessage( Map<String, String> configuration, String
> > message )
> > +        throws NotificationException
> > +    {
> > +        jabberClient.setHost( getHost( configuration ) );
> >
> > -        jabberClient.setHost( getHost( notifier.getConfiguration() ) );
> > -
> > -        jabberClient.setPort( getPort( notifier.getConfiguration() ) );
> > +        jabberClient.setPort( getPort( configuration ) );
> >
> > -        jabberClient.setUser( getUsername( notifier.getConfiguration() )
> > );
> > +        jabberClient.setUser( getUsername( configuration ) );
> >
> > -        jabberClient.setPassword( getPassword(
> notifier.getConfiguration()
> > ) );
> > +        jabberClient.setPassword( getPassword( configuration ) );
> >
> > -        jabberClient.setImDomainName( getImDomainName(
> > notifier.getConfiguration() ) );
> > +        jabberClient.setImDomainName( getImDomainName( configuration )
> );
> >
> > -        jabberClient.setSslConnection( isSslConnection(
> > notifier.getConfiguration() ) );
> > +        jabberClient.setSslConnection( isSslConnection( configuration )
> );
> >
> >         try
> >         {
> > @@ -238,14 +226,13 @@
> >
> >             jabberClient.logon();
> >
> > -            if ( notifier.getConfiguration() != null &&
> > -                StringUtils.isNotEmpty( (String)
> > notifier.getConfiguration().get( ADDRESS_FIELD ) ) )
> > +            if ( configuration != null && StringUtils.isNotEmpty(
> (String)
> > configuration.get( ADDRESS_FIELD ) ) )
> >             {
> > -                String address = (String)
> notifier.getConfiguration().get(
> > ADDRESS_FIELD );
> > +                String address = (String) configuration.get(
> ADDRESS_FIELD
> > );
> >                 String[] recipients = StringUtils.split( address, "," );
> >                 for ( String recipient : recipients )
> >                 {
> > -                    if ( isGroup( notifier.getConfiguration() ) )
> > +                    if ( isGroup( configuration ) )
> >                     {
> >                         jabberClient.sendMessageToGroup( recipient,
> message
> > );
> >                     }
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java
> > Fri Sep 12 00:37:53 2008
> > @@ -19,6 +19,7 @@
> >  * under the License.
> >  */
> >
> > +import org.apache.continuum.model.project.ProjectScmRoot;
> >  import org.apache.maven.continuum.ContinuumException;
> >  import org.apache.maven.continuum.configuration.ConfigurationService;
> >  import org.apache.maven.continuum.model.project.BuildDefinition;
> > @@ -103,11 +104,21 @@
> >
> >         BuildResult build = context.getBuildResult();
> >
> > +        ProjectScmRoot projectScmRoot = context.getProjectScmRoot();
> > +
> > +        boolean isPrepareBuildComplete =
> > +            messageId.equals(
> > ContinuumNotificationDispatcher.MESSAGE_ID_PREPARE_BUILD_COMPLETE );
> > +
> > +        if ( projectScmRoot == null && isPrepareBuildComplete )
> > +        {
> > +            return;
> > +        }
> > +
> >         //
> > ----------------------------------------------------------------------
> >         // If there wasn't any building done, don't notify
> >         //
> > ----------------------------------------------------------------------
> >
> > -        if ( build == null )
> > +        if ( build == null && !isPrepareBuildComplete )
> >         {
> >             return;
> >         }
> > @@ -143,51 +154,22 @@
> >                 buildComplete( project, notifier, build, buildDefinition
> );
> >             }
> >         }
> > +        else if ( isPrepareBuildComplete )
> > +        {
> > +            for ( ProjectNotifier notifier : notifiers )
> > +            {
> > +                prepareBuildComplete( projectScmRoot, notifier );
> > +            }
> > +        }
> >     }
> >
> >     //
> > ----------------------------------------------------------------------
> >     //
> >     //
> > ----------------------------------------------------------------------
> >
> > -    private String generateMessage( Project project, BuildResult build )
> > -        throws ContinuumException
> > -    {
> > -        int state = project.getState();
> > -
> > -        if ( build != null )
> > -        {
> > -            state = build.getState();
> > -        }
> > -
> > -        String message;
> > -
> > -        if ( state == ContinuumProjectState.OK )
> > -        {
> > -            message = "BUILD SUCCESSFUL: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.FAILED )
> > -        {
> > -            message = "BUILD FAILURE: " + project.getName();
> > -        }
> > -        else if ( state == ContinuumProjectState.ERROR )
> > -        {
> > -            message = "BUILD ERROR: " + project.getName();
> > -        }
> > -        else
> > -        {
> > -            log.warn( "Unknown build state " + state + " for project " +
> > project.getId() );
> > -
> > -            message = "ERROR: Unknown build state " + state + " for " +
> > project.getName() + " project";
> > -        }
> > -
> > -        return message + " " + getReportUrl( project, build,
> > configurationService );
> > -    }
> > -
> >     private void buildComplete( Project project, ProjectNotifier
> notifier,
> > BuildResult build, BuildDefinition buildDef )
> >         throws NotificationException
> >     {
> > -        String message;
> > -
> >         //
> > ----------------------------------------------------------------------
> >         // Check if the message should be sent at all
> >         //
> > ----------------------------------------------------------------------
> > @@ -199,27 +181,34 @@
> >             return;
> >         }
> >
> > -        try
> > -        {
> > -            message = generateMessage( project, build );
> > -        }
> > -        catch ( ContinuumException e )
> > +        sendMessage( notifier.getConfiguration(), generateMessage(
> > project, build, configurationService ) );
> > +    }
> > +
> > +    private void prepareBuildComplete( ProjectScmRoot projectScmRoot,
> > ProjectNotifier notifier )
> > +        throws NotificationException
> > +    {
> > +        if ( !shouldNotify( projectScmRoot, notifier ) )
> >         {
> > -            throw new NotificationException( "Can't generate the
> > message.", e );
> > +            return;
> >         }
> > +
> > +        sendMessage( notifier.getConfiguration(), generateMessage(
> > projectScmRoot, configurationService ) );
> > +    }
> > +
> > +    private void sendMessage( Map<String, String> configuration, String
> > message )
> > +        throws NotificationException
> > +    {
> > +        msnClient.setLogin( getUsername( configuration ) );
> >
> > -        msnClient.setLogin( getUsername( notifier.getConfiguration() )
> );
> > -
> > -        msnClient.setPassword( getPassword( notifier.getConfiguration()
> )
> > );
> > +        msnClient.setPassword( getPassword( configuration ) );
> >
> >         try
> >         {
> >             msnClient.login();
> >
> > -            if ( notifier.getConfiguration() != null &&
> > -                StringUtils.isNotEmpty( (String)
> > notifier.getConfiguration().get( ADDRESS_FIELD ) ) )
> > +            if ( configuration != null && StringUtils.isNotEmpty(
> (String)
> > configuration.get( ADDRESS_FIELD ) ) )
> >             {
> > -                String address = (String)
> notifier.getConfiguration().get(
> > ADDRESS_FIELD );
> > +                String address = (String) configuration.get(
> ADDRESS_FIELD
> > );
> >                 String[] recipients = StringUtils.split( address, "," );
> >                 for ( String recipient : recipients )
> >                 {
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java
> > Fri Sep 12 00:37:53 2008
> > @@ -58,8 +58,6 @@
> >     protected static final String BUILD_TEMPLATE_BUILD_DEFINITIONS =
> > "build-template-build-definitions";
> >
> >     protected static final String PROJECT_WITH_SCM_RESULT_FETCH_GROUP =
> > "project-with-scm-result";
> > -
> > -    protected static final String PROJECTGROUP_SCM_FETCH_GROUP =
> > "projectgroup-scm";
> >
> >     /**
> >      * @plexus.requirement
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java
> > Fri Sep 12 00:37:53 2008
> > @@ -320,6 +320,14 @@
> >             }
> >             sb.append( "Warning" );
> >         }
> > +        if ( notifier.isSendOnScmFailure() )
> > +        {
> > +            if ( sb.length() > 0 )
> > +            {
> > +                sb.append( '/' );
> > +            }
> > +            sb.append( "SCM Failure" );
> > +        }
> >         ns.setEvents( sb.toString() );
> >
> >         ns.setEnabled( notifier.isEnabled() );
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java
> > Fri Sep 12 00:37:53 2008
> > @@ -75,6 +75,13 @@
> >     private boolean sendOnWarning;
> >
> >     /**
> > +     * Detemines if the notifier should fire when prepare build resulted
> > in any error(s).<p>
> > +     * <code>true</code> implies notifier executes when any error(s)
> > is/are detected
> > +     * for the build.
> > +     */
> > +    private boolean sendOnScmFailure;
> > +
> > +    /**
> >      * Detemines if the save operation returns to the project group
> > notifier page or not.<p>
> >      * <code>true</code> implies return to the project group notifier
> page.
> >      */
> > @@ -137,6 +144,8 @@
> >
> >         notifier.setSendOnWarning( isSendOnWarning() );
> >
> > +        notifier.setSendOnScmFailure( isSendOnScmFailure() );
> > +
> >         setNotifierConfiguration( notifier );
> >
> >         saveNotifier( notifier );
> > @@ -186,6 +195,8 @@
> >
> >         setSendOnWarning( notifier.isSendOnWarning() );
> >
> > +        setSendOnScmFailure( notifier.isSendOnScmFailure() );
> > +
> >         initConfiguration( notifier.getConfiguration() );
> >
> >         return SUCCESS;
> > @@ -276,6 +287,16 @@
> >         this.sendOnWarning = sendOnWarning;
> >     }
> >
> > +    public boolean isSendOnScmFailure()
> > +    {
> > +        return sendOnScmFailure;
> > +    }
> > +
> > +    public void setSendOnScmFailure( boolean sendOnScmFailure )
> > +    {
> > +        this.sendOnScmFailure = sendOnScmFailure;
> > +    }
> > +
> >     /**
> >      * @param notifierId the notifierId to set
> >      */
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties
> > Fri Sep 12 00:37:53 2008
> > @@ -480,6 +480,7 @@
> >  notifier.event.sendOnFailure = Send on Failure
> >  notifier.event.sendOnError = Send on Error
> >  notifier.event.sendOnWarning = Send on Warning
> > +notifier.event.sendOnScmFailure = Send On SCM Failure
> >
> >  # ----------------------------------------------------------------------
> >  # Page: BuildResults
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp
> > Fri Sep 12 00:37:53 2008
> > @@ -64,6 +64,7 @@
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnFailure')}" name="sendOnFailure"
> > value="sendOnFailure" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnError')}" name="sendOnError"
> > value="sendOnError" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnWarning')}" name="sendOnWarning"
> > value="sendOnWarning" fieldValue="true"/>
> > +                <ww:checkbox
> > label="%{getText('notifier.event.sendOnScmFailure')}"
> > name="sendOnScmFailure" value="sendOnScmFailure" fieldValue="true"/>
> >               </tbody>
> >             </table>
> >             <div class="functnbar3">
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp
> > Fri Sep 12 00:37:53 2008
> > @@ -63,6 +63,7 @@
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnFailure')}" name="sendOnFailure"
> > value="sendOnFailure" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnError')}" name="sendOnError"
> > value="sendOnError" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnWarning')}" name="sendOnWarning"
> > value="sendOnWarning" fieldValue="true"/>
> > +                <ww:checkbox
> > label="%{getText('notifier.event.sendOnScmFailure')}"
> > name="sendOnScmFailure" value="sendOnScmFailure" fieldValue="true"/>
> >               </tbody>
> >             </table>
> >             <div class="functnbar3">
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp
> > Fri Sep 12 00:37:53 2008
> > @@ -58,6 +58,7 @@
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnFailure')}" name="sendOnFailure"
> > value="sendOnFailure" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnError')}" name="sendOnError"
> > value="sendOnError" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnWarning')}" name="sendOnWarning"
> > value="sendOnWarning" fieldValue="true"/>
> > +                <ww:checkbox
> > label="%{getText('notifier.event.sendOnScmFailure')}"
> > name="sendOnScmFailure" value="sendOnScmFailure" fieldValue="true"/>
> >               </tbody>
> >             </table>
> >             <div class="functnbar3">
> >
> > Modified:
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp
> > URL:
> >
> http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp?rev=694630&r1=694629&r2=694630&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp
> > (original)
> > +++
> >
> continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp
> > Fri Sep 12 00:37:53 2008
> > @@ -58,6 +58,7 @@
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnFailure')}" name="sendOnFailure"
> > value="sendOnFailure" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnError')}" name="sendOnError"
> > value="sendOnError" fieldValue="true"/>
> >                 <ww:checkbox
> > label="%{getText('notifier.event.sendOnWarning')}" name="sendOnWarning"
> > value="sendOnWarning" fieldValue="true"/>
> > +                <ww:checkbox
> > label="%{getText('notifier.event.sendOnScmFailure')}"
> > name="sendOnScmFailure" value="sendOnScmFailure" fieldValue="true"/>
> >               </tbody>
> >             </table>
> >             <div class="functnbar3">
> >
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message