View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. 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, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.channel;
    17
    18  /**
    19   * The {@link CompleteChannelFuture} which is failed already.  It is
    20   * recommended to use {@link Channels#failedFuture(Channel, Throwable)}
    21   * instead of calling the constructor of this future.
    22   */
    23  public class FailedChannelFuture extends CompleteChannelFuture {
    24
    25      private final Throwable cause;
    26
    27      /**
    28       * Creates a new instance.
    29       *
    30       * @param channel the {@link Channel} associated with this future
    31       * @param cause   the cause of failure
    32       */
    33      public FailedChannelFuture(Channel channel, Throwable cause) {
    34          super(channel);
    35          if (cause == null) {
    36              throw new NullPointerException("cause");
    37          }
    38          this.cause = cause;
    39      }
    40
    41      public Throwable getCause() {
    42          return cause;
    43      }
    44
    45      public boolean isSuccess() {
    46          return false;
    47      }
    48
    49      public ChannelFuture rethrowIfFailed() throws Exception {
    50          if (cause instanceof Exception) {
    51              throw (Exception) cause;
    52          }
    53
    54          if (cause instanceof Error) {
    55              throw (Error) cause;
    56          }
    57
    58          throw new RuntimeException(cause);
    59      }
    60
    61      public ChannelFuture sync() throws InterruptedException {
    62          rethrow();
    63          return this;
    64      }
    65
    66      public ChannelFuture syncUninterruptibly() {
    67          rethrow();
    68          return this;
    69      }
    70
    71      private void rethrow() {
    72          if (cause instanceof RuntimeException) {
    73              throw (RuntimeException) cause;
    74          }
    75
    76          if (cause instanceof Error) {
    77              throw (Error) cause;
    78          }
    79
    80          throw new ChannelException(cause);
    81      }
    82  }