View Javadoc
1   /*
2    * #%L
3    * FutureUtils.java - mongodb-async-driver - Allanbank Consulting, Inc.
4    * %%
5    * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package com.allanbank.mongodb.util;
21  
22  import java.util.concurrent.ExecutionException;
23  import java.util.concurrent.Future;
24  
25  import com.allanbank.mongodb.MongoDbException;
26  
27  /**
28   * FutureUtils provides helper methods for dealing with {@link Future}s.
29   * 
30   * @api.no This class is <b>NOT</b> part of the drivers API. This class may be
31   *         mutated in incompatible ways between any two releases of the driver.
32   * @copyright 2012-2013, Allanbank Consulting, Inc., All Rights Reserved
33   */
34  public final class FutureUtils {
35  
36      /**
37       * Unwraps the contents of the Future.
38       * 
39       * @param <T>
40       *            The type of the future and response.
41       * @param future
42       *            The future value to get.
43       * @return The response from the Future.
44       * @throws MongoDbException
45       *             On an error from the Future.
46       */
47      public static <T> T unwrap(final Future<T> future) {
48          try {
49              return future.get();
50          }
51          catch (final InterruptedException e) {
52              e.fillInStackTrace();
53              throw new MongoDbException(e);
54          }
55          catch (final ExecutionException e) {
56              final Throwable cause = e.getCause();
57              cause.fillInStackTrace();
58              if (cause instanceof MongoDbException) {
59                  throw (MongoDbException) cause;
60              }
61              throw new MongoDbException(cause);
62          }
63      }
64  
65      /**
66       * Stop creation of a new FutureUtils.
67       */
68      private FutureUtils() {
69          // Nothing.
70      }
71  }