View Javadoc

    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  }