1 /*
2 * This file is part of Waarp Project (named also Waarp or GG).
3 *
4 * Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5 * tags. See the COPYRIGHT.txt in the distribution for a full listing of
6 * individual contributors.
7 *
8 * All Waarp Project is free software: you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version.
12 *
13 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * Waarp . If not, see <http://www.gnu.org/licenses/>.
19 */
20 package org.waarp.common.future;
21
22 /**
23 * Future in failure
24 */
25 public class WaarpFailedFuture extends WaarpCompletedFuture {
26
27 private final Throwable cause;
28
29 /**
30 * Creates a new instance.
31 *
32 * @param cause the cause of failure
33 */
34 public WaarpFailedFuture(final Throwable cause) {
35 if (cause == null) {
36 throw new NullPointerException("cause");
37 }
38 this.cause = cause;
39 }
40
41 @Override
42 public synchronized Throwable getCause() {
43 return cause;
44 }
45
46 @Override
47 public synchronized boolean isSuccess() {
48 return false;
49 }
50
51 @Override
52 public final boolean isFailed() {
53 return true;
54 }
55
56 @Override
57 public final WaarpFuture rethrowIfFailed() throws Exception {
58 if (cause instanceof Exception) {
59 throw (Exception) cause;
60 }
61
62 if (cause instanceof Error) {
63 throw (Error) cause;
64 }
65
66 throw new RuntimeException(cause);
67 }
68 }