org.esbtools.eventhandler.ImmediateTransformableFuture Maven / Gradle / Ivy
/*
* Copyright 2016 esbtools Contributors and/or its affiliates.
*
* This file is part of esbtools.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package org.esbtools.eventhandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
final class ImmediateTransformableFuture implements TransformableFuture {
private final T result;
private static final Logger log = LoggerFactory.getLogger(ImmediateTransformableFuture.class);
public ImmediateTransformableFuture(T result) {
this.result = result;
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return false;
}
@Override
public boolean isCancelled() {
return false;
}
@Override
public boolean isDone() {
return true;
}
@Override
public T get() throws InterruptedException, ExecutionException {
return result;
}
@Override
public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException,
TimeoutException {
return result;
}
@Override
public TransformableFuture transformSync(FutureTransform futureTransform) {
try {
return new ImmediateTransformableFuture<>(futureTransform.transform(result));
} catch (Exception e) {
return new FailedTransformableFuture<>(e);
}
}
@Override
public TransformableFuture transformAsync(
FutureTransform> futureTransform) {
try {
return futureTransform.transform(result);
} catch (Exception e) {
return new FailedTransformableFuture<>(e);
}
}
@Override
public TransformableFuture transformAsyncIgnoringReturn(
FutureTransform> futureTransform) {
try {
return (TransformableFuture) futureTransform.transform(result);
} catch (Exception e) {
return new FailedTransformableFuture<>(e);
}
}
@Override
public TransformableFuture whenDoneOrCancelled(FutureDoneCallback callback) {
try {
callback.onDoneOrCancelled();
} catch (Exception e) {
log.warn("Exception caught and ignored while running future done callback.", e);
}
return this;
}
}