+++ /dev/null
-/*
- * Copyright (c) 2014 Brocade Communications Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.mdsal.common.api;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.util.concurrent.AbstractCheckedFuture;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.function.Function;
-import javax.annotation.Nonnull;
-
-/**
- * An implementation of CheckedFuture that provides similar behavior for the <code>get</code> methods
- * that the <code>checkedGet</code> methods provide.
- *
- * <p>For {@link CancellationException} and {@link InterruptedException}, the specified exception mapper
- * is invoked to translate them to the checked exception type.
- *
- * <p>For {@link ExecutionException}, the mapper is invoked to translate the cause to the checked exception
- * and a new ExecutionException is thrown with the translated cause.
- *
- * @author Thomas Pantelis
- *
- * @param <V> The result type returned by this Future's get method
- * @param <X> The checked exception type
- * @deprecated Use {@code org.opendaylight.controller.md.sal.common.api.MappingCheckedFuture} instead.
- */
-@Deprecated
-public final class MappingCheckedFuture<V, X extends Exception> extends AbstractCheckedFuture<V, X> {
-
- private final Function<Exception, X> mapper;
-
- private MappingCheckedFuture(final ListenableFuture<V> delegate, final Function<Exception, X> mapper) {
- super(delegate);
- this.mapper = requireNonNull(mapper);
- }
-
- /**
- * Creates a new <code>MappingCheckedFuture</code> that wraps the given {@link ListenableFuture}
- * delegate.
- *
- * @param delegate the {@link ListenableFuture} to wrap
- * @param mapper the mapping {@link Function} used to translate exceptions from the delegate
- * @return a new <code>MappingCheckedFuture</code>
- */
- public static <V, X extends Exception> MappingCheckedFuture<V, X> create(
- final ListenableFuture<V> delegate, final Function<Exception, X> mapper) {
- return new MappingCheckedFuture<>(delegate, mapper);
- }
-
- @Override
- @SuppressWarnings("checkstyle:parameterName")
- protected X mapException(@Nonnull final Exception e) {
- return mapper.apply(e);
- }
-
- private ExecutionException wrapInExecutionException(final String message, final Exception ex) {
- return new ExecutionException(message, mapException(ex));
- }
-
- @Override
- public V get() throws InterruptedException, ExecutionException {
- try {
- return super.get();
- } catch (final InterruptedException e) {
- Thread.currentThread().interrupt();
- throw wrapInExecutionException("Operation was interrupted", e);
- } catch (final CancellationException e) {
- throw wrapInExecutionException("Operation was cancelled", e);
- } catch (final ExecutionException e) {
- throw wrapInExecutionException(e.getMessage(), e);
- }
- }
-
- @Override
- public V get(final long timeout, @Nonnull final TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- try {
- return super.get(timeout, unit);
- } catch (final InterruptedException e) {
- Thread.currentThread().interrupt();
- throw wrapInExecutionException("Operation was interrupted", e);
- } catch (final CancellationException e) {
- throw wrapInExecutionException("Operation was cancelled", e);
- } catch (final ExecutionException e) {
- throw wrapInExecutionException(e.getMessage(), e);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Brocade Communications Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.mdsal.common.api;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.SettableFuture;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-import org.junit.Test;
-import org.opendaylight.yangtools.util.concurrent.ExceptionMapper;
-
-/**
- * Unit tests for MappingCheckedFuture.
- *
- * @author Thomas Pantelis
- *
- */
-@Deprecated
-public class MappingCheckedFutureTest {
-
- interface FutureInvoker {
- void invokeGet(CheckedFuture<?,?> future) throws Exception;
-
- Throwable extractWrappedTestEx(Exception from);
- }
-
- static class TestException extends Exception {
- private static final long serialVersionUID = 1L;
-
- TestException(final String message, final Throwable cause) {
- super(message, cause);
- }
- }
-
- static final ExceptionMapper<TestException> MAPPER = new ExceptionMapper<TestException>(
- "Test", TestException.class) {
-
- @Override
- protected TestException newWithCause(final String message, final Throwable cause) {
- return new TestException(message, cause);
- }
- };
-
- static final FutureInvoker GET = new FutureInvoker() {
- @Override
- public void invokeGet(final CheckedFuture<?, ?> future) throws Exception {
- future.get();
- }
-
- @Override
- public Throwable extractWrappedTestEx(final Exception from) {
- if (from instanceof ExecutionException) {
- return from.getCause();
- }
-
- return from;
- }
- };
-
- static final FutureInvoker TIMED_GET = new FutureInvoker() {
- @Override
- public void invokeGet(final CheckedFuture<?, ?> future) throws Exception {
- future.get(1, TimeUnit.HOURS);
- }
-
- @Override
- public Throwable extractWrappedTestEx(final Exception from) {
- if (from instanceof ExecutionException) {
- return from.getCause();
- }
-
- return from;
- }
- };
-
- static final FutureInvoker CHECKED_GET = new FutureInvoker() {
- @Override
- public void invokeGet(final CheckedFuture<?,?> future) throws Exception {
- future.checkedGet();
- }
-
- @Override
- public Throwable extractWrappedTestEx(final Exception from) {
- return from;
- }
- };
-
- static final FutureInvoker TIMED_CHECKED_GET = new FutureInvoker() {
- @Override
- public void invokeGet(final CheckedFuture<?,?> future) throws Exception {
- future.checkedGet(50, TimeUnit.MILLISECONDS);
- }
-
- @Override
- public Throwable extractWrappedTestEx(final Exception from) {
- return from;
- }
- };
-
- @Test
- public void testGet() throws Exception {
- SettableFuture<String> delegate = SettableFuture.create();
- MappingCheckedFuture<String,TestException> future = MappingCheckedFuture.create(delegate, MAPPER);
- delegate.set("test");
- assertEquals("get", "test", future.get());
- }
-
- @Test
- public void testGetWithExceptions() throws Exception {
- testExecutionException(GET, new RuntimeException());
- testExecutionException(GET, new TestException("mock", null));
- testCancellationException(GET);
- testInterruptedException(GET);
- }
-
- @Test
- public void testTimedGet() throws Exception {
- SettableFuture<String> delegate = SettableFuture.create();
- MappingCheckedFuture<String,TestException> future = MappingCheckedFuture.create(delegate, MAPPER);
- delegate.set("test");
- assertEquals("get", "test", future.get(50, TimeUnit.MILLISECONDS));
- }
-
- @Test
- public void testTimedGetWithExceptions() throws Exception {
- testExecutionException(TIMED_GET, new RuntimeException());
- testCancellationException(TIMED_GET);
- testInterruptedException(TIMED_GET);
- }
-
- @Test
- public void testCheckedGetWithExceptions() throws Exception {
- testExecutionException(CHECKED_GET, new RuntimeException());
- testCancellationException(CHECKED_GET);
- testInterruptedException(CHECKED_GET);
- }
-
- @Test
- public void testTimedCheckedWithExceptions() throws Exception {
- testExecutionException(TIMED_CHECKED_GET, new RuntimeException());
- testCancellationException(TIMED_CHECKED_GET);
- testInterruptedException(TIMED_CHECKED_GET);
- }
-
- @SuppressWarnings("checkstyle:illegalCatch")
- private static void testExecutionException(final FutureInvoker invoker, final Throwable cause) {
- SettableFuture<String> delegate = SettableFuture.create();
- MappingCheckedFuture<String, TestException> mappingFuture = MappingCheckedFuture.create(delegate, MAPPER);
-
- delegate.setException(cause);
-
- try {
- invoker.invokeGet(mappingFuture);
- fail("Expected exception thrown");
- } catch (Exception e) {
- Throwable expectedTestEx = invoker.extractWrappedTestEx(e);
- assertNotNull("Expected returned exception is null", expectedTestEx);
- assertEquals("Exception type", TestException.class, expectedTestEx.getClass());
-
- if (cause instanceof TestException) {
- assertNull("Expected null cause", expectedTestEx.getCause());
- } else {
- assertSame("TestException cause", cause, expectedTestEx.getCause());
- }
- }
- }
-
- @SuppressWarnings("checkstyle:illegalCatch")
- private static void testCancellationException(final FutureInvoker invoker) {
- SettableFuture<String> delegate = SettableFuture.create();
- MappingCheckedFuture<String, TestException> mappingFuture = MappingCheckedFuture.create(delegate, MAPPER);
-
- mappingFuture.cancel(false);
-
- try {
- invoker.invokeGet(mappingFuture);
- fail("Expected exception thrown");
- } catch (Exception e) {
- Throwable expectedTestEx = invoker.extractWrappedTestEx(e);
- assertNotNull("Expected returned exception is null", expectedTestEx);
- assertEquals("Exception type", TestException.class, expectedTestEx.getClass());
- assertEquals("TestException cause type", CancellationException.class, expectedTestEx.getCause().getClass());
- }
- }
-
- @SuppressWarnings("checkstyle:illegalCatch")
- private static void testInterruptedException(final FutureInvoker invoker) throws Exception {
- SettableFuture<String> delegate = SettableFuture.create();
- final MappingCheckedFuture<String, TestException> mappingFuture = MappingCheckedFuture.create(delegate, MAPPER);
-
- final AtomicReference<AssertionError> assertError = new AtomicReference<>();
- final CountDownLatch doneLatch = new CountDownLatch(1);
- Thread thread = new Thread() {
- @Override
- public void run() {
- try {
- doInvoke();
- } catch (AssertionError e) {
- assertError.set(e);
- } finally {
- doneLatch.countDown();
- }
- }
-
- void doInvoke() {
- try {
- invoker.invokeGet(mappingFuture);
- fail("Expected exception thrown");
- } catch (Exception e) {
- Throwable expectedTestEx = invoker.extractWrappedTestEx(e);
- assertNotNull("Expected returned exception is null", expectedTestEx);
- assertEquals("Exception type", TestException.class, expectedTestEx.getClass());
- assertEquals("TestException cause type", InterruptedException.class,
- expectedTestEx.getCause().getClass());
- }
- }
- };
- thread.start();
-
- thread.interrupt();
- assertTrue("get call completed", doneLatch.await(5, TimeUnit.SECONDS));
-
- if (assertError.get() != null) {
- throw assertError.get();
- }
- }
-}