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.management.mbean;
018    
019    import org.apache.camel.ErrorHandlerFactory;
020    import org.apache.camel.LoggingLevel;
021    import org.apache.camel.Processor;
022    import org.apache.camel.api.management.ManagedResource;
023    import org.apache.camel.api.management.mbean.ManagedErrorHandlerMBean;
024    import org.apache.camel.processor.ErrorHandlerSupport;
025    import org.apache.camel.processor.RedeliveryErrorHandler;
026    import org.apache.camel.spi.ManagementStrategy;
027    import org.apache.camel.spi.RouteContext;
028    
029    /**
030     * @version 
031     */
032    @ManagedResource(description = "Managed ErrorHandler")
033    public class ManagedErrorHandler implements ManagedErrorHandlerMBean {
034        private final RouteContext routeContext;
035        private final Processor errorHandler;
036        private final ErrorHandlerFactory errorHandlerBuilder;
037    
038        public ManagedErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory builder) {
039            this.routeContext = routeContext;
040            this.errorHandler = errorHandler;
041            this.errorHandlerBuilder = builder;
042        }
043    
044        public void init(ManagementStrategy strategy) {
045            // do nothing
046        }
047    
048        public RouteContext getRouteContext() {
049            return routeContext;
050        }
051    
052        public Processor getErrorHandler() {
053            return errorHandler;
054        }
055    
056        public ErrorHandlerFactory getErrorHandlerBuilder() {
057            return errorHandlerBuilder;
058        }
059    
060        public String getCamelId() {
061            return routeContext.getCamelContext().getName();
062        }
063    
064        public String getCamelManagementName() {
065            return routeContext.getCamelContext().getManagementName();
066        }
067    
068        public boolean isSupportRedelivery() {
069            return errorHandler instanceof RedeliveryErrorHandler;
070        }
071    
072        public boolean isDeadLetterChannel() {
073            if (!isSupportRedelivery()) {
074                return false;
075            }
076    
077            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
078            return redelivery.getDeadLetter() != null;
079        }
080    
081        public boolean isDeadLetterUseOriginalMessage() {
082            if (!isSupportRedelivery()) {
083                return false;
084            }
085    
086            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
087            return redelivery.isUseOriginalMessagePolicy();
088        }
089    
090        public boolean isSupportTransactions() {
091            if (errorHandler instanceof ErrorHandlerSupport) {
092                ErrorHandlerSupport ehs = (ErrorHandlerSupport) errorHandler;
093                return ehs.supportTransacted();
094            } else {
095                return false;
096            }
097        }
098    
099        public String getDeadLetterChannelEndpointUri() {
100            if (!isSupportRedelivery()) {
101                return null;
102            }
103    
104            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
105            return redelivery.getDeadLetterUri();
106        }
107    
108        public Integer getMaximumRedeliveries() {
109            if (!isSupportRedelivery()) {
110                return null;
111            }
112    
113            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
114            return redelivery.getRedeliveryPolicy().getMaximumRedeliveries();
115        }
116    
117        public void setMaximumRedeliveries(Integer maximum) {
118            if (!isSupportRedelivery()) {
119                throw new IllegalArgumentException("This error handler does not support redelivery");
120            }
121    
122            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
123            redelivery.getRedeliveryPolicy().setMaximumRedeliveries(maximum);
124        }
125    
126        public Long getMaximumRedeliveryDelay() {
127            if (!isSupportRedelivery()) {
128                return null;
129            }
130    
131            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
132            return redelivery.getRedeliveryPolicy().getMaximumRedeliveryDelay();
133        }
134    
135        public void setMaximumRedeliveryDelay(Long delay) {
136            if (!isSupportRedelivery()) {
137                throw new IllegalArgumentException("This error handler does not support redelivery");
138            }
139    
140            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
141            redelivery.getRedeliveryPolicy().setMaximumRedeliveryDelay(delay);
142        }
143    
144        public Long getRedeliveryDelay() {
145            if (!isSupportRedelivery()) {
146                return null;
147            }
148    
149            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
150            return redelivery.getRedeliveryPolicy().getRedeliveryDelay();
151        }
152    
153        public void setRedeliveryDelay(Long delay) {
154            if (!isSupportRedelivery()) {
155                throw new IllegalArgumentException("This error handler does not support redelivery");
156            }
157    
158            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
159            redelivery.getRedeliveryPolicy().setRedeliveryDelay(delay);
160        }
161    
162        public Double getBackOffMultiplier() {
163            if (!isSupportRedelivery()) {
164                return null;
165            }
166    
167            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
168            return redelivery.getRedeliveryPolicy().getBackOffMultiplier();
169        }
170    
171        public void setBackOffMultiplier(Double multiplier) {
172            if (!isSupportRedelivery()) {
173                throw new IllegalArgumentException("This error handler does not support redelivery");
174            }
175    
176            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
177            redelivery.getRedeliveryPolicy().setBackOffMultiplier(multiplier);
178        }
179    
180        public Double getCollisionAvoidanceFactor() {
181            if (!isSupportRedelivery()) {
182                return null;
183            }
184    
185            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
186            return redelivery.getRedeliveryPolicy().getCollisionAvoidanceFactor();
187        }
188    
189        public void setCollisionAvoidanceFactor(Double factor) {
190            if (!isSupportRedelivery()) {
191                throw new IllegalArgumentException("This error handler does not support redelivery");
192            }
193    
194            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
195            redelivery.getRedeliveryPolicy().setCollisionAvoidanceFactor(factor);
196        }
197    
198        public Double getCollisionAvoidancePercent() {
199            if (!isSupportRedelivery()) {
200                return null;
201            }
202    
203            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
204            return (double) redelivery.getRedeliveryPolicy().getCollisionAvoidancePercent();  
205        }
206    
207        public void setCollisionAvoidancePercent(Double percent) {
208            if (!isSupportRedelivery()) {
209                throw new IllegalArgumentException("This error handler does not support redelivery");
210            }
211    
212            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
213            redelivery.getRedeliveryPolicy().setCollisionAvoidancePercent(percent);
214        }
215    
216        public String getDelayPattern() {
217            if (!isSupportRedelivery()) {
218                return null;
219            }
220    
221            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
222            return redelivery.getRedeliveryPolicy().getDelayPattern();
223        }
224    
225        public void setDelayPattern(String pattern) {
226            if (!isSupportRedelivery()) {
227                throw new IllegalArgumentException("This error handler does not support redelivery");
228            }
229    
230            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
231            redelivery.getRedeliveryPolicy().setDelayPattern(pattern);
232        }
233    
234        public String getRetriesExhaustedLogLevel() {
235            if (!isSupportRedelivery()) {
236                return null;
237            }
238    
239            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
240            return redelivery.getRedeliveryPolicy().getRetriesExhaustedLogLevel().name();
241        }
242    
243        public void setRetriesExhaustedLogLevel(String level) {
244            if (!isSupportRedelivery()) {
245                throw new IllegalArgumentException("This error handler does not support redelivery");
246            }
247    
248            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
249            redelivery.getRedeliveryPolicy().setRetriesExhaustedLogLevel(LoggingLevel.valueOf(level));
250        }
251    
252        public String getRetryAttemptedLogLevel() {
253            if (!isSupportRedelivery()) {
254                return null;
255            }
256    
257            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
258            return redelivery.getRedeliveryPolicy().getRetryAttemptedLogLevel().name();
259        }
260    
261        public void setRetryAttemptedLogLevel(String level) {
262            if (!isSupportRedelivery()) {
263                throw new IllegalArgumentException("This error handler does not support redelivery");
264            }
265    
266            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
267            redelivery.getRedeliveryPolicy().setRetryAttemptedLogLevel(LoggingLevel.valueOf(level));
268        }
269    
270        public Boolean getLogStackTrace() {
271            if (!isSupportRedelivery()) {
272                return null;
273            }
274    
275            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
276            return redelivery.getRedeliveryPolicy().isLogStackTrace();
277        }
278    
279        public void setLogStackTrace(Boolean log) {
280            if (!isSupportRedelivery()) {
281                throw new IllegalArgumentException("This error handler does not support redelivery");
282            }
283    
284            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
285            redelivery.getRedeliveryPolicy().setLogStackTrace(log);
286        }
287    
288        public Boolean getLogRetryStackTrace() {
289            if (!isSupportRedelivery()) {
290                return null;
291            }
292    
293            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
294            return redelivery.getRedeliveryPolicy().isLogRetryStackTrace();
295        }
296    
297        public void setLogRetryStackTrace(Boolean log) {
298            if (!isSupportRedelivery()) {
299                throw new IllegalArgumentException("This error handler does not support redelivery");
300            }
301    
302            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
303            redelivery.getRedeliveryPolicy().setLogRetryStackTrace(log);
304        }
305    
306        public Boolean getLogHandled() {
307            if (!isSupportRedelivery()) {
308                return null;
309            }
310    
311            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
312            return redelivery.getRedeliveryPolicy().isLogHandled();
313        }
314    
315        public void setLogHandled(Boolean log) {
316            if (!isSupportRedelivery()) {
317                throw new IllegalArgumentException("This error handler does not support redelivery");
318            }
319    
320            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
321            redelivery.getRedeliveryPolicy().setLogHandled(log);
322        }
323    
324        public Boolean getLogContinued() {
325            if (!isSupportRedelivery()) {
326                return null;
327            }
328    
329            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
330            return redelivery.getRedeliveryPolicy().isLogHandled();
331        }
332    
333        public void setLogContinued(Boolean log) {
334            if (!isSupportRedelivery()) {
335                throw new IllegalArgumentException("This error handler does not support redelivery");
336            }
337    
338            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
339            redelivery.getRedeliveryPolicy().setLogContinued(log);
340        }
341    
342        public Boolean getLogExhausted() {
343            if (!isSupportRedelivery()) {
344                return null;
345            }
346    
347            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
348            return redelivery.getRedeliveryPolicy().isLogExhausted();
349        }
350    
351        public void setLogExhausted(Boolean log) {
352            if (!isSupportRedelivery()) {
353                throw new IllegalArgumentException("This error handler does not support redelivery");
354            }
355    
356            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
357            redelivery.getRedeliveryPolicy().setLogExhausted(log);
358        }
359    
360        public Boolean getUseCollisionAvoidance() {
361            if (!isSupportRedelivery()) {
362                return null;
363            }
364    
365            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
366            return redelivery.getRedeliveryPolicy().isUseCollisionAvoidance();
367        }
368    
369        public void setUseCollisionAvoidance(Boolean avoidance) {
370            if (!isSupportRedelivery()) {
371                throw new IllegalArgumentException("This error handler does not support redelivery");
372            }
373    
374            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
375            redelivery.getRedeliveryPolicy().setUseCollisionAvoidance(avoidance);
376        }
377    
378        public Boolean getUseExponentialBackOff() {
379            if (!isSupportRedelivery()) {
380                return null;
381            }
382    
383            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
384            return redelivery.getRedeliveryPolicy().isUseExponentialBackOff();
385        }
386    
387        public void setUseExponentialBackOff(Boolean backoff) {
388            if (!isSupportRedelivery()) {
389                throw new IllegalArgumentException("This error handler does not support redelivery");
390            }
391    
392            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
393            redelivery.getRedeliveryPolicy().setUseExponentialBackOff(backoff);
394        }
395    
396    }