@Override public <T> void query(Headers headers, ResultChain<T> cb, long timeout, TimeUnit timeUnit, Object... args) { cb.fail(_exn); } }
/** * Conditional completion depending on the stub type. * * The journal uses this to skip its own completion, leaving the processing * for the main stub. */ default <T> boolean ok(ResultChain<T> result, T value) { result.ok(value); return true; }
protected final void sendReplyAsync(ResultChain<T> result) { _state = State.CLOSED; Throwable exn = fail(); if (exn != null) { result.fail(exn); } else { result.completeFuture(this, (T) getReply()); } }
default <U> Result<U> then(BiConsumer<U,RequestWeb> after) { return ResultChain.then(this, after); }
@Override public boolean isFuture() { return _delegate.isFuture(); }
@Override public <V> void completeFuture(ResultChain<V> result, V value) { _delegate.completeFuture(result, value); }
default <R> Result<R> then(BiConsumer<R,PipeSub<T>> consumer) { return ResultChain.then(this, consumer); }
@Override public boolean isFuture() { ResultChain<T> result = _result; return result.isFuture() && method().isDirect(); }
@Override public void completeFuture(R value) { // Object oldContext = beginAsyncContext(); try { T nextValue = _fun.apply(value); delegate().completeFuture(nextValue); } catch (Throwable e) { fail(e); } finally { // endAsyncContext(oldContext); } } }
@Override public void fail(Throwable exn) { _next.fail(exn); }
@Override public void complete(HeadersAmp headers, Object value) { ((ResultChain) _result).ok(value); }
@Override public void query(HeadersAmp headers, ResultChain<?> result, StubAmp stub) { Object bean = stub.bean(); try { Serializable id = (Serializable) _idGetter.invoke(bean); if (stub.state().isDelete()) { ((VaultDriver) _driver).delete(id, bean, Result.ignore()); } else { ((VaultDriver) _driver).save(id, bean, Result.ignore()); } result.ok(null); } catch (Throwable e) { result.fail(e); } } }
/** * Creates a chained result. * * <pre><code> * void myMiddle(Result<String> result) * { * MyLeafService leaf = ...; * * leaf.myLeaf(result.of()); * } * </code></pre> */ default <R extends T> Result<R> then() { return then(this, x->x); }
@Override protected void offerResult(long timeout) { ResultChain<T> result = _result; if (result.isFuture()) { sendReplyAsync(result); } else { super.offerResult(timeout); } }
@Override public void completeFuture(T value) { //Object oldContext = beginAsyncContext(); try { _consumer.accept(value, delegate()); } catch (Throwable e) { fail(e); } finally { // endAsyncContext(oldContext); } } }
@Override public void fail(HeadersAmp headers, Throwable exn) { _result.fail(exn); }