01: /* ====================================================================
02: The Jicarilla Software License
03:
04: Copyright (c) 2003 Leo Simons.
05: All rights reserved.
06:
07: Permission is hereby granted, free of charge, to any person obtaining
08: a copy of this software and associated documentation files (the
09: "Software"), to deal in the Software without restriction, including
10: without limitation the rights to use, copy, modify, merge, publish,
11: distribute, sublicense, and/or sell copies of the Software, and to
12: permit persons to whom the Software is furnished to do so, subject to
13: the following conditions:
14:
15: The above copyright notice and this permission notice shall be
16: included in all copies or substantial portions of the Software.
17:
18: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19: EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20: MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21: IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22: CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24: SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25: ==================================================================== */
26: package org.jicarilla.plumbing;
27:
28: import EDU.oswego.cs.dl.util.concurrent.Channel;
29: import org.jicarilla.plumbing.Sink;
30:
31: /**
32: * A basic {@link org.jicarilla.plumbing.Stage} implementation which allows for the redirection of
33: * exceptions to a special handler. In a diagram:
34: *
35: * <pre>
36: *
37: * <<flow in case of exception>>
38: * ^
39: * | ErrorHandler
40: * | ^
41: * | /-------------|-------------\
42: * | | | |
43: * | Stage1 -----> Stage2 -----> Stage3 -->
44: * |
45: * ---------------------------------------->
46: * <<normal program flow>>
47: * </pre>
48: *
49: * this is a common pattern which allows you to keep your regular pipelining
50: * free of constant checks for a consistent state.
51: *
52: * @author <a href="lsimons at jicarilla dot org">Leo Simons</a>
53: * @version $Id: DefaultStage.java,v 1.1 2004/03/22 21:20:13 lsimons Exp $
54: */
55: public class DefaultStage extends SimpleStage {
56: /** The errorhandler to send errors to. */
57: protected final Sink m_errorHandler;
58:
59: /**
60: * Create a new instance.
61: *
62: * @param channel the channel to pass on to {@link SimpleStage}
63: * @param errorHandler the recipient of all errors
64: */
65: public DefaultStage(final Channel channel, final Sink errorHandler) {
66: super (channel);
67:
68: m_errorHandler = errorHandler;
69: }
70:
71: /**
72: * Sends an error to the error handler, if it exists. If no handler exists,
73: * nothing happens.
74: *
75: * @param o the error to redirect
76: * @throws InterruptedException if the current thread has been
77: * {@link java.lang.Thread#interrupt()}ed
78: */
79: protected void handleError(final Object o)
80: throws InterruptedException {
81: if (m_errorHandler != null) {
82: m_errorHandler.put(o);
83: }
84: }
85: }
|