private static Tuple3<Set<Object>, Set<PathSpec>, Boolean> combine(Tuple3<Set<Object>, Set<PathSpec>, Boolean> a, Tuple3<Set<Object>, Set<PathSpec>, Boolean> b) { Set<Object> ids = a._1(); ids.addAll(b._1()); Set<PathSpec> paths = a._2(); paths.addAll(b._2()); return Tuples.tuple(ids, paths, a._3() || b._3()); }
/** * Equivalent to {@code map("map", f)}. * @see #map(String, Function3) */ default <R> Task<R> map(final Function3<T1, T2, T3, R> f) { return map("map: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2(), tuple._3())); }
/** * Equivalent to {@code flatMap("flatMap", f)}. * @see #flatMap(String, Function3) */ default <R> Task<R> flatMap(final Function3<T1, T2, T3, Task<R>> f) { return flatMap("flatMap: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2(), tuple._3())); }
@Override public <RT extends RecordTemplate> void executeBatch(final Client client, final Batch<RestRequestBatchKey, Response<Object>> batch, Function<Request<?>, RequestContext> requestContextProvider) { final Tuple3<Set<Object>, Set<PathSpec>, Boolean> reductionResults = reduceRequests(batch); final Set<Object> ids = reductionResults._1(); final Set<PathSpec> fields = reductionResults._2(); final boolean containsBatchGet = reductionResults._3(); LOGGER.debug("executeBatch, ids: '{}', fields: {}", ids, fields); if (ids.size() == 1 && !containsBatchGet) { doExecuteGet(client, batch, ids, fields, requestContextProvider); } else { doExecuteBatchGet(client, batch, ids, fields, requestContextProvider); } }
/** * Equivalent to {@code andThen("andThen", consumer)}. * @see #andThen(String, Consumer3) */ default Tuple3Task<T1, T2, T3> andThen(final Consumer3<T1, T2, T3> consumer) { return cast(andThen("andThen: " + _taskDescriptor.getDescription(consumer.getClass().getName()), tuple -> consumer.accept(tuple._1(), tuple._2(), tuple._3()))); }
/** * Equivalent to {@code withSideEffect("sideEffect", func)}. * @see #withSideEffect(String, Function3) */ default Tuple3Task<T1, T2, T3> withSideEffect(Function3<T1, T2, T3, Task<?>> func) { return cast(Task.super.withSideEffect("sideEffect: " + _taskDescriptor.getDescription(func.getClass().getName()), tuple -> func.apply(tuple._1(), tuple._2(), tuple._3()))); }
private static Tuple3<Set<Object>, Set<PathSpec>, Boolean> reduceFields(Tuple3<Set<Object>, Set<PathSpec>, Boolean> state, Request<?> request) { if (request instanceof GetRequest || request instanceof BatchRequest) { final Set<PathSpec> requestFields = request.getFields(); if (requestFields != null && !requestFields.isEmpty()) { if (state._2() != null) { state._2().addAll(requestFields); } return state; } else { return Tuples.tuple(state._1(), null, state._3()); } } else { throw unsupportedGetRequestType(request); } }
return map(desc, tuple -> f.apply(tuple._1(), tuple._2(), tuple._3()));
return flatMap(desc, tuple -> f.apply(tuple._1(), tuple._2(), tuple._3()));
return cast(andThen(desc, tuple -> consumer.accept(tuple._1(), tuple._2(), tuple._3())));
return cast(Task.super.withSideEffect(desc, tuple -> func.apply(tuple._1(), tuple._2(), tuple._3())));
@Override protected Promise<Tuple3<T1, T2, T3>> run(final Context context) throws Exception { final SettablePromise<Tuple3<T1, T2, T3>> result = Promises.settable(); InternalUtil.fastFailAfter(p -> { if (p.isFailed()) { result.fail(p.getError()); } else { result.done(tuple(_tasks._1().get(), _tasks._2().get(), _tasks._3().get())); } }, _tasks._1(), _tasks._2(), _tasks._3()); _tasks.forEach(t -> context.run((Task<?>)t)); return result; }
/** * Equivalent to {@code flatMap("flatMap", f)}. * @see #flatMap(String, Function3) */ default <R> Task<R> flatMap(final Function3<T1, T2, T3, Task<R>> f) { return flatMap("flatMap: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2(), tuple._3())); }
/** * Equivalent to {@code map("map", f)}. * @see #map(String, Function3) */ default <R> Task<R> map(final Function3<T1, T2, T3, R> f) { return map("map: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2(), tuple._3())); }
/** * Equivalent to {@code withSideEffect("sideEffect", func)}. * @see #withSideEffect(String, Function3) */ default Tuple3Task<T1, T2, T3> withSideEffect(Function3<T1, T2, T3, Task<?>> func) { return cast(Task.super.withSideEffect("sideEffect: " + _taskDescriptor.getDescription(func.getClass().getName()), tuple -> func.apply(tuple._1(), tuple._2(), tuple._3()))); }
/** * Equivalent to {@code andThen("andThen", consumer)}. * @see #andThen(String, Consumer3) */ default Tuple3Task<T1, T2, T3> andThen(final Consumer3<T1, T2, T3> consumer) { return cast(andThen("andThen: " + _taskDescriptor.getDescription(consumer.getClass().getName()), tuple -> consumer.accept(tuple._1(), tuple._2(), tuple._3()))); }
return map(desc, tuple -> f.apply(tuple._1(), tuple._2(), tuple._3()));
return flatMap(desc, tuple -> f.apply(tuple._1(), tuple._2(), tuple._3()));
return cast(Task.super.withSideEffect(desc, tuple -> func.apply(tuple._1(), tuple._2(), tuple._3())));
@Override protected Promise<Tuple3<T1, T2, T3>> run(final Context context) throws Exception { final SettablePromise<Tuple3<T1, T2, T3>> result = Promises.settable(); InternalUtil.fastFailAfter(p -> { if (p.isFailed()) { result.fail(p.getError()); } else { result.done(tuple(_tasks._1().get(), _tasks._2().get(), _tasks._3().get())); } }, _tasks._1(), _tasks._2(), _tasks._3()); _tasks.forEach(t -> context.run((Task<?>)t)); return result; }