001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.spi;
018    
019    import java.util.EventObject;
020    
021    import org.apache.camel.CamelContext;
022    import org.apache.camel.Endpoint;
023    import org.apache.camel.Exchange;
024    import org.apache.camel.Processor;
025    import org.apache.camel.Route;
026    
027    /**
028     * Factory to create {@link java.util.EventObject events} that are emitted when such an event occur.
029     * <p/>
030     * For example when an {@link Exchange} is being created and then later when its done.
031     *
032     * @version 
033     */
034    public interface EventFactory {
035    
036        /**
037         * Creates an {@link EventObject} for Camel is starting.
038         *
039         * @param context camel context
040         * @return the created event
041         */
042        EventObject createCamelContextStartingEvent(CamelContext context);
043    
044        /**
045         * Creates an {@link EventObject} for Camel has been started successfully.
046         *
047         * @param context camel context
048         * @return the created event
049         */
050        EventObject createCamelContextStartedEvent(CamelContext context);
051    
052        /**
053         * Creates an {@link EventObject} for Camel failing to start
054         *
055         * @param context camel context
056         * @param cause   the cause exception
057         * @return the created event
058         */
059        EventObject createCamelContextStartupFailureEvent(CamelContext context, Throwable cause);
060    
061        /**
062         * Creates an {@link EventObject} for Camel failing to stop cleanly
063         *
064         * @param context camel context
065         * @param cause   the cause exception
066         * @return the created event
067         */
068        EventObject createCamelContextStopFailureEvent(CamelContext context, Throwable cause);
069    
070        /**
071         * Creates an {@link EventObject} for Camel is stopping.
072         *
073         * @param context camel context
074         * @return the created event
075         */
076        EventObject createCamelContextStoppingEvent(CamelContext context);
077    
078        /**
079         * Creates an {@link EventObject} for Camel has been stopped successfully.
080         *
081         * @param context camel context
082         * @return the created event
083         */
084        EventObject createCamelContextStoppedEvent(CamelContext context);
085    
086        /**
087         * Creates an {@link EventObject} for a Service failed to start cleanly
088         *
089         * @param context camel context
090         * @param service the service
091         * @param cause   the cause exception
092         * @return the created event
093         */
094        EventObject createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause);
095    
096        /**
097         * Creates an {@link EventObject} for a Service failed to stop cleanly
098         *
099         * @param context camel context
100         * @param service the service
101         * @param cause   the cause exception
102         * @return the created event
103         */
104        EventObject createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause);
105    
106        /**
107         * Creates an {@link EventObject} for {@link Route} has been started successfully.
108         *
109         * @param route the route
110         * @return the created event
111         */
112        EventObject createRouteStartedEvent(Route route);
113    
114        /**
115         * Creates an {@link EventObject} for {@link Route} has been stopped successfully.
116         *
117         * @param route the route
118         * @return the created event
119         */
120        EventObject createRouteStoppedEvent(Route route);
121    
122        /**
123         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has been created
124         *
125         * @param exchange the exchange
126         * @return the created event
127         */
128        EventObject createExchangeCreatedEvent(Exchange exchange);
129    
130        /**
131         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has been completed successfully
132         *
133         * @param exchange the exchange
134         * @return the created event
135         */
136        EventObject createExchangeCompletedEvent(Exchange exchange);
137    
138        /**
139         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has failed
140         *
141         * @param exchange the exchange
142         * @return the created event
143         */
144        EventObject createExchangeFailedEvent(Exchange exchange);
145    
146        /**
147         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has failed
148         * but was handled by the Camel error handlers such as an dead letter channel.
149         *
150         * @param exchange          the exchange
151         * @param failureHandler    the failure handler such as moving the message to a dead letter queue
152         * @param deadLetterChannel whether it was a dead letter channel or not handling the failure
153         * @return the created event
154         */
155        EventObject createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler, boolean deadLetterChannel);
156    
157        /**
158         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} is about to be redelivered
159         *
160         * @param exchange the exchange
161         * @param attempt  the current redelivery attempt (starts from 1)
162         * @return the created event
163         */
164        EventObject createExchangeRedeliveryEvent(Exchange exchange, int attempt);
165    
166        /**
167         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} is about to be sent to the endpoint (eg before).
168         *
169         * @param exchange  the exchange
170         * @param endpoint  the destination
171         * @return the created event
172         */
173        EventObject createExchangeSendingEvent(Exchange exchange, Endpoint endpoint);
174    
175        /**
176         * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has completely been sent to the endpoint (eg after).
177         *
178         * @param exchange  the exchange
179         * @param endpoint  the destination
180         * @param timeTaken time in millis taken
181         * @return the created event
182         */
183        EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken);
184    
185        /**
186         * Creates an {@link EventObject} for Camel is suspending.
187         *
188         * @param context camel context
189         * @return the created event
190         */
191        EventObject createCamelContextSuspendingEvent(CamelContext context);
192    
193        /**
194         * Creates an {@link EventObject} for Camel has been suspended successfully.
195         *
196         * @param context camel context
197         * @return the created event
198         */
199        EventObject createCamelContextSuspendedEvent(CamelContext context);
200    
201        /**
202         * Creates an {@link EventObject} for Camel is resuming.
203         *
204         * @param context camel context
205         * @return the created event
206         */
207        EventObject createCamelContextResumingEvent(CamelContext context);
208    
209        /**
210         * Creates an {@link EventObject} for Camel has been resumed successfully.
211         *
212         * @param context camel context
213         * @return the created event
214         */
215        EventObject createCamelContextResumedEvent(CamelContext context);
216    
217        /**
218         * Creates an {@link EventObject} for Camel failing to resume
219         *
220         * @param context camel context
221         * @param cause   the cause exception
222         * @return the created event
223         */
224        EventObject createCamelContextResumeFailureEvent(CamelContext context, Throwable cause);
225    
226    }