View Javadoc

1   /*
2    *  Copyright 2006 Simon Raess
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   *  Unless required by applicable law or agreed to in writing, software
11   *  distributed under the License is distributed on an "AS IS" BASIS,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  package net.sf.beep4j;
17  
18  /**
19   * A ChannelFilter is meant to be used to implement cross-cutting concerns, such
20   * as logging, message transformations, and security. Each channel can have
21   * 0 or more such filters that are arranged in a chain.
22   * 
23   * @author Simon Raess
24   */
25  public interface ChannelFilter {
26  	
27  	/**
28  	 * Filters {@link Channel#sendMessage(Message, ReplyHandler)}.
29  	 * 
30  	 * @param next the next filter in the chain
31  	 * @param message the message that is to be sent
32  	 * @param listener the listener that processes the reply for this message
33  	 */
34  	void filterSendMessage(NextFilter next, Object message, ReplyHandler listener);
35  	
36  	/**
37  	 * Filters {@link Channel#close(CloseChannelCallback)}.
38  	 * 
39  	 * @param next the next filter in the chain
40  	 */
41  	void filterClose(NextFilter next);
42  	
43  	/**
44  	 * Filters {@link ChannelHandler#channelOpened(Channel)}.
45  	 * 
46  	 * @param next the next filter in the chain
47  	 * @param channel the channel that was opened
48  	 */
49  	void filterChannelOpened(NextFilter next, Channel channel);
50  	
51  	/**
52  	 * Filters {@link ChannelHandler#messageReceived(Message, Reply)}.
53  	 * 
54  	 * @param next the next filter in the chain
55  	 * @param message the message that is received
56  	 * @param responseHandler to be used to create the response for the received message
57  	 */
58  	void filterMessageReceived(NextFilter next, Message message, Reply responseHandler);
59  	
60  	/**
61  	 * Filters {@link ChannelHandler#channelCloseRequested(CloseChannelRequest)}.
62  	 * 
63  	 * @param next the next filter in the chain
64  	 * @param request the close channel request
65  	 */
66  	void filterChannelCloseRequested(NextFilter next, CloseChannelRequest request);
67  	
68  	/**
69  	 * Filters {@link ChannelHandler#channelClosed()}.
70  	 * 
71  	 * @param next the next filter in the chain
72  	 */
73  	void filterChannelClosed(NextFilter next);
74  	
75  	/**
76  	 * Interface of the next filter in the chain.
77  	 */
78  	interface NextFilter { 
79  		
80  		void filterSendMessage(Message message, ReplyHandler listener);
81  		
82  		void filterClose(CloseChannelCallback callback);
83  		
84  		void filterChannelOpened(Channel channel);
85  		
86  		void filterMessageReceived(Message message, Reply reply);
87  		
88  		void filterChannelCloseReqested(CloseChannelRequest request);
89  		
90  		void filterChannelClosed();
91  		
92  	}
93  	
94  }