package com.github.aesteve.vertx.nubes.utils.async;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
public class SimpleFuture<T> implements Future<T> {
private T result;
private Throwable cause;
private boolean hasFailed;
private boolean complete;
private Handler<AsyncResult<T>> handler;
@Override
public T result() {
return result;
}
@Override
public Throwable cause() {
return cause;
}
@Override
public boolean succeeded() {
return !hasFailed;
}
@Override
public boolean failed() {
return hasFailed;
}
@Override
public boolean isComplete() {
return complete;
}
@Override
public Future<T> setHandler(Handler<AsyncResult<T>> handler) {
this.handler = handler;
checkCallHandler();
return this;
}
@Override
public void complete(T result) {
complete = true;
this.result = result;
checkCallHandler();
}
@Override
public void complete() {
complete(null);
}
@Override
public void fail(Throwable cause) {
complete = true;
hasFailed = true;
this.cause = cause;
checkCallHandler();
}
@Override
public void fail(String failureMessage) {
fail(new Exception(failureMessage));
}
protected void checkCallHandler() {
if (handler != null && isComplete()) {
handler.handle(this);
}
}
}