001package org.apache.maven.lifecycle.internal;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import org.apache.maven.execution.ExecutionEvent;
023import org.apache.maven.execution.ExecutionListener;
024import org.apache.maven.execution.MavenSession;
025import org.apache.maven.plugin.MojoExecution;
026import org.codehaus.plexus.component.annotations.Component;
027
028/**
029 * Assists in firing execution events. <strong>Warning:</strong> This is an internal utility class that is only public
030 * for technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without
031 * prior notice.
032 * 
033 * @author Benjamin Bentmann
034 */
035@Component( role = ExecutionEventCatapult.class )
036public class DefaultExecutionEventCatapult
037    implements ExecutionEventCatapult
038{
039
040    public void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution )
041    {
042        fire( eventType, session, mojoExecution, null );
043    }
044
045    public void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution,
046                      Exception exception )
047    {
048        ExecutionListener listener = session.getRequest().getExecutionListener();
049
050        if ( listener != null )
051        {
052            ExecutionEvent event = new DefaultExecutionEvent( eventType, session, mojoExecution, exception );
053
054            switch ( eventType )
055            {
056                case ProjectDiscoveryStarted:
057                    listener.projectDiscoveryStarted( event );
058                    break;
059
060                case SessionStarted:
061                    listener.sessionStarted( event );
062                    break;
063                case SessionEnded:
064                    listener.sessionEnded( event );
065                    break;
066
067                case ProjectSkipped:
068                    listener.projectSkipped( event );
069                    break;
070                case ProjectStarted:
071                    listener.projectStarted( event );
072                    break;
073                case ProjectSucceeded:
074                    listener.projectSucceeded( event );
075                    break;
076                case ProjectFailed:
077                    listener.projectFailed( event );
078                    break;
079
080                case MojoSkipped:
081                    listener.mojoSkipped( event );
082                    break;
083                case MojoStarted:
084                    listener.mojoStarted( event );
085                    break;
086                case MojoSucceeded:
087                    listener.mojoSucceeded( event );
088                    break;
089                case MojoFailed:
090                    listener.mojoFailed( event );
091                    break;
092
093                case ForkStarted:
094                    listener.forkStarted( event );
095                    break;
096                case ForkSucceeded:
097                    listener.forkSucceeded( event );
098                    break;
099                case ForkFailed:
100                    listener.forkFailed( event );
101                    break;
102
103                case ForkedProjectStarted:
104                    listener.forkedProjectStarted( event );
105                    break;
106                case ForkedProjectSucceeded:
107                    listener.forkedProjectSucceeded( event );
108                    break;
109                case ForkedProjectFailed:
110                    listener.forkedProjectFailed( event );
111                    break;
112
113                default:
114                    throw new IllegalStateException( "Unknown execution event type " + eventType );
115            }
116        }
117    }
118
119}