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 */
017package org.apache.camel.spi;
018
019import org.apache.camel.CamelContext;
020import org.apache.camel.Endpoint;
021import org.apache.camel.Exchange;
022import org.apache.camel.Processor;
023import org.apache.camel.Route;
024
025/**
026 * This interface is implemented by all events.
027 */
028public interface CamelEvent {
029
030    enum Type {
031        CamelContextResumed,
032        CamelContextResumeFailure,
033        CamelContextResuming,
034        CamelContextStarted,
035        CamelContextStarting,
036        CamelContextStartupFailure,
037        CamelContextStopFailure,
038        CamelContextStopped,
039        CamelContextStopping,
040        CamelContextSuspended,
041        CamelContextSuspending,
042        ExchangeCompleted,
043        ExchangeCreated,
044        ExchangeFailed,
045        ExchangeFailureHandled,
046        ExchangeFailureHandling,
047        ExchangeRedelivery,
048        ExchangeSending,
049        ExchangeSent,
050        RouteAdded,
051        RouteRemoved,
052        RouteStarted,
053        RouteStopped,
054        ServiceStartupFailure,
055        ServiceStopFailure,
056        Custom
057    }
058
059    Type getType();
060
061    Object getSource();
062
063    /**
064     * This interface is implemented by all events that contain an exception and is used to
065     * retrieve the exception in a universal way.
066     */
067    interface FailureEvent extends CamelEvent {
068
069        Throwable getCause();
070
071    }
072
073    interface CamelContextEvent extends CamelEvent {
074
075        CamelContext getContext();
076
077        default Object getSource() {
078            return getContext();
079        }
080
081    }
082
083    interface CamelContextResumedEvent extends CamelContextEvent {
084        default Type getType() {
085            return Type.CamelContextResumed;
086        }
087    }
088
089    interface CamelContextResumeFailureEvent extends CamelContextEvent, FailureEvent {
090        default Type getType() {
091            return Type.CamelContextResumeFailure;
092        }
093    }
094
095    interface CamelContextResumingEvent extends CamelContextEvent {
096        default Type getType() {
097            return Type.CamelContextResuming;
098        }
099    }
100
101    interface CamelContextStartedEvent extends CamelContextEvent {
102        default Type getType() {
103            return Type.CamelContextStarted;
104        }
105    }
106
107    interface CamelContextStartingEvent extends CamelContextEvent {
108        default Type getType() {
109            return Type.CamelContextStarting;
110        }
111    }
112
113    interface CamelContextStartupFailureEvent extends CamelContextEvent, FailureEvent {
114        default Type getType() {
115            return Type.CamelContextStartupFailure;
116        }
117    }
118
119    interface CamelContextStopFailureEvent extends CamelContextEvent, FailureEvent {
120        default Type getType() {
121            return Type.CamelContextStopFailure;
122        }
123    }
124
125    interface CamelContextStoppedEvent extends CamelContextEvent {
126        default Type getType() {
127            return Type.CamelContextStopped;
128        }
129    }
130
131    interface CamelContextStoppingEvent extends CamelContextEvent {
132        default Type getType() {
133            return Type.CamelContextStopping;
134        }
135    }
136
137    interface CamelContextSuspendedEvent extends CamelContextEvent {
138        default Type getType() {
139            return Type.CamelContextSuspended;
140        }
141    }
142
143    interface CamelContextSuspendingEvent extends CamelContextEvent {
144        default Type getType() {
145            return Type.CamelContextSuspending;
146        }
147    }
148
149    interface ExchangeEvent extends CamelEvent {
150
151        Exchange getExchange();
152
153        default Object getSource() {
154            return getExchange();
155        }
156    }
157
158    interface ExchangeCompletedEvent extends ExchangeEvent {
159        default Type getType() {
160            return Type.ExchangeCompleted;
161        }
162    }
163
164    interface ExchangeCreatedEvent extends ExchangeEvent {
165        default Type getType() {
166            return Type.ExchangeCreated;
167        }
168    }
169
170    interface ExchangeFailedEvent extends ExchangeEvent, FailureEvent {
171        default Type getType() {
172            return Type.ExchangeFailed;
173        }
174
175    }
176
177    interface ExchangeFailureEvent extends ExchangeEvent {
178
179        Processor getFailureHandler();
180
181        boolean isDeadLetterChannel();
182
183        String getDeadLetterUri();
184
185    }
186
187    interface ExchangeFailureHandledEvent extends ExchangeFailureEvent {
188        default Type getType() {
189            return Type.ExchangeFailureHandled;
190        }
191    }
192
193    interface ExchangeFailureHandlingEvent extends ExchangeFailureEvent {
194        default Type getType() {
195            return Type.ExchangeFailureHandling;
196        }
197    }
198
199    interface ExchangeRedeliveryEvent extends ExchangeEvent {
200
201        int getAttempt();
202
203        default Type getType() {
204            return Type.ExchangeRedelivery;
205        }
206    }
207
208    interface ExchangeSendingEvent extends ExchangeEvent {
209
210        Endpoint getEndpoint();
211
212        default Type getType() {
213            return Type.ExchangeSending;
214        }
215    }
216
217    interface ExchangeSentEvent extends ExchangeEvent {
218
219        Endpoint getEndpoint();
220
221        long getTimeTaken();
222
223        default Type getType() {
224            return Type.ExchangeSent;
225        }
226    }
227
228    interface RouteEvent extends CamelEvent {
229
230        Route getRoute();
231
232        default Object getSource() {
233            return getRoute();
234        }
235    }
236
237    interface RouteAddedEvent extends RouteEvent {
238        default Type getType() {
239            return Type.RouteAdded;
240        }
241    }
242
243    interface RouteRemovedEvent extends RouteEvent {
244        default Type getType() {
245            return Type.RouteRemoved;
246        }
247    }
248
249    interface RouteStartedEvent extends RouteEvent {
250        default Type getType() {
251            return Type.RouteStarted;
252        }
253    }
254
255    interface RouteStoppedEvent extends RouteEvent {
256        default Type getType() {
257            return Type.RouteStopped;
258        }
259    }
260
261    interface ServiceEvent extends CamelEvent {
262
263        Object getService();
264
265        default Object getSource() {
266            return getService();
267        }
268    }
269
270    interface ServiceStartupFailureEvent extends ServiceEvent, FailureEvent {
271        default Type getType() {
272            return Type.ServiceStartupFailure;
273        }
274    }
275
276    interface ServiceStopFailureEvent extends ServiceEvent, FailureEvent {
277        default Type getType() {
278            return Type.ServiceStopFailure;
279        }
280    }
281
282}