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()); }
public static <T1, T2, T3> Tuple3<T1, T2, T3> tuple(final T1 t1, final T2 t2, final T3 t3) { return new Tuple3<T1, T2, T3>(t1, t2, t3); }
@Override public boolean hasNext() { return _index < arity(); }
private static Tuple3<Set<Object>, Set<PathSpec>, Boolean> reduceContainsBatch(Tuple3<Set<Object>, Set<PathSpec>, Boolean> state, Request<?> request) { if (request instanceof GetRequest) { return state; } else if (request instanceof BatchRequest) { return Tuples.tuple(state._1(), state._2(), true); } else { throw unsupportedGetRequestType(request); } }
@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; }
private static Tuple3<Set<Object>, Set<PathSpec>, Boolean> reduceIds(Tuple3<Set<Object>, Set<PathSpec>, Boolean> state, Request<?> request) { if (request instanceof GetRequest) { GetRequest<?> getRequest = (GetRequest<?>)request; state._1().add(getRequest.getObjectId()); return state; } else if (request instanceof BatchRequest) { BatchRequest<?> batchRequest = (BatchRequest<?>)request; state._1().addAll(batchRequest.getObjectIds()); return state; } else { throw unsupportedGetRequestType(request); } }
@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; }
@Override public boolean hasNext() { return _index < arity(); }
public static <T1, T2, T3> Tuple3<T1, T2, T3> tuple(final T1 t1, final T2 t2, final T3 t3) { return new Tuple3<T1, T2, T3>(t1, t2, t3); }
/** * 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())); }
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); } }
@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()))); }
/** * 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())); }