1 /*** 2 * 3 * Copyright 2004 Hiram Chirino 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.activeio; 18 19 import java.io.IOException; 20 import java.net.URI; 21 22 23 /*** 24 * A AsynchChannelFilter can be used as a filter between a {@see org.activeio.AsynchChannel} 25 * and it's {@see org.activeio.ChannelConsumer}. Most {@see org.activeio.AsynchChannel} 26 * that are not directly accessing the network will extends the AsynchChannelFilter since they act as a 27 * filter between the client and the network. O 28 * 29 * @version $Revision$ 30 */ 31 public class FilterAsynchChannelServer implements AsynchChannelServer, AcceptListener { 32 33 final protected AsynchChannelServer next; 34 protected AcceptListener acceptListener; 35 36 public FilterAsynchChannelServer(AsynchChannelServer next) { 37 this.next = next; 38 if( next == null ) 39 throw new IllegalArgumentException("The next AsynchChannelServer cannot be null."); 40 } 41 42 public void setAcceptListener(AcceptListener acceptListener) { 43 this.acceptListener = acceptListener; 44 if (acceptListener == null) 45 next.setAcceptListener(null); 46 else 47 next.setAcceptListener(this); 48 49 } 50 51 /*** 52 * @see org.activeio.Disposable#dispose() 53 */ 54 public void dispose() { 55 next.dispose(); 56 } 57 58 /*** 59 * @see org.activeio.Service#start() 60 * @throws IOException if the next channel has not been set. 61 */ 62 public void start() throws IOException { 63 if( acceptListener ==null ) 64 throw new IOException("The AcceptListener has not been set."); 65 next.start(); 66 } 67 68 /*** 69 * @see org.activeio.Service#stop(long) 70 */ 71 public void stop(long timeout) throws IOException { 72 next.stop(timeout); 73 } 74 75 public void onAccept(Channel channel) { 76 acceptListener.onAccept(channel); 77 } 78 79 public void onAcceptError(IOException error) { 80 acceptListener.onAcceptError(error); 81 } 82 83 public URI getBindURI() { 84 return next.getBindURI(); 85 } 86 87 public URI getConnectURI() { 88 return next.getConnectURI(); 89 } 90 91 public Object narrow(Class target) { 92 if( target.isAssignableFrom(getClass()) ) { 93 return this; 94 } 95 return next.narrow(target); 96 } 97 98 public String toString() { 99 return next.toString(); 100 } 101 }