/** * Equivalent to {@code map("map", f)}. * @see #map(String, Function2) */ default <R> Task<R> map(final Function2<T1, T2, R> f) { return map("map: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2())); }
/** * Equivalent to {@code flatMap("flatMap", f)}. * @see #flatMap(String, Function2) */ default <R> Task<R> flatMap(final Function2<T1, T2, Task<R>> f) { return flatMap("flatMap: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2())); }
/** * Equivalent to {@code andThen("andThen", consumer)}. * @see #andThen(String, Consumer2) */ default Tuple2Task<T1, T2> andThen(final Consumer2<T1, T2> consumer) { return cast(andThen("andThen: " + _taskDescriptor.getDescription(consumer.getClass().getName()), tuple -> consumer.accept(tuple._1(), tuple._2()))); }
/** * Equivalent to {@code withSideEffect("sideEffect", func)}. * @see #withSideEffect(String, Function2) */ default Tuple2Task<T1, T2> withSideEffect(Function2<T1, T2, Task<?>> func) { return cast(Task.super.withSideEffect("sideEffect: " + _taskDescriptor.getDescription(func.getClass().getName()), tuple -> func.apply(tuple._1(), tuple._2()))); }
return map(desc, tuple -> f.apply(tuple._1(), tuple._2()));
return flatMap(desc, tuple -> f.apply(tuple._1(), tuple._2()));
return cast(andThen(desc, tuple -> consumer.accept(tuple._1(), tuple._2())));
private Task<int[]> mergeSort(final int[] toSort, final Range range) { if (range.size() == 0) { return Task.value("leaf", new int[0]); } else if (range.size() == 1) { return Task.value("leaf", new int[] { toSort[range.start()] }); } else { // Neither base case applied, so recursively split this problem into // smaller problems and then merge the results. return Task.value("ranges", Tuples.tuple(range.firstHalf(), range.secondHalf())) .flatMap("split", ranges -> Task.par(mergeSort(toSort, ranges._1()), mergeSort(toSort, ranges._2())) .map("merge", parts -> merge(ranges._1(), parts._1(), ranges._2(), parts._2()))); } }
return cast(Task.super.withSideEffect(desc, tuple -> func.apply(tuple._1(), tuple._2())));
@Override protected Promise<Tuple2<T1, T2>> run(final Context context) throws Exception { final SettablePromise<Tuple2<T1, T2>> result = Promises.settable(); InternalUtil.fastFailAfter(p -> { if (p.isFailed()) { result.fail(p.getError()); } else { result.done(tuple(_tasks._1().get(), _tasks._2().get())); } }, _tasks._1(), _tasks._2()); _tasks.forEach(t -> context.run((Task<?>)t)); return result; }
@Test public void testGetSubResourceRequests() { Tuple2Task<Response<Message>,Response<Message>> task = Task.par(associationsGet("a", "b", "x"), associationsGet("a", "b", "y")); if (expectBatching()) { runAndWaitException(task, RestLiResponseException.class); assertTrue(((RestLiResponseException)task.getError()).getServiceErrorMessage().contains("associationsSub?ids=List(x,y)")); } else { runAndWait(getTestClassName() + ".testGetSubResourceRequests", task); assertEquals(task.get()._1().getEntity().getMessage(), "b"); assertEquals(task.get()._1().getEntity().getId(), "a"); assertEquals(task.get()._2().getEntity().getMessage(), "b"); assertEquals(task.get()._2().getEntity().getId(), "a"); } }
@Test public void testGetSubResourceRequestsOverrides() { Tuple2Task<Response<Message>,Response<Message>> task = Task.par(associationsGet("a", "b", "x", overrides()), associationsGet("a", "b", "y", overrides())); if (expectBatchingOverrides()) { runAndWaitException(task, RestLiResponseException.class); assertTrue(((RestLiResponseException)task.getError()).getServiceErrorMessage().contains("associationsSub?ids=List(x,y)")); } else { runAndWait(getTestClassName() + ".testGetSubResourceRequestsOverrides", task); assertEquals(task.get()._1().getEntity().getMessage(), "b"); assertEquals(task.get()._1().getEntity().getId(), "a"); assertEquals(task.get()._2().getEntity().getMessage(), "b"); assertEquals(task.get()._2().getEntity().getId(), "a"); } }
/** * Equivalent to {@code map("map", f)}. * @see #map(String, Function2) */ default <R> Task<R> map(final Function2<T1, T2, R> f) { return map("map: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2())); }
/** * Equivalent to {@code flatMap("flatMap", f)}. * @see #flatMap(String, Function2) */ default <R> Task<R> flatMap(final Function2<T1, T2, Task<R>> f) { return flatMap("flatMap: " + _taskDescriptor.getDescription(f.getClass().getName()), tuple -> f.apply(tuple._1(), tuple._2())); }
/** * Equivalent to {@code andThen("andThen", consumer)}. * @see #andThen(String, Consumer2) */ default Tuple2Task<T1, T2> andThen(final Consumer2<T1, T2> consumer) { return cast(andThen("andThen: " + _taskDescriptor.getDescription(consumer.getClass().getName()), tuple -> consumer.accept(tuple._1(), tuple._2()))); }
/** * Equivalent to {@code withSideEffect("sideEffect", func)}. * @see #withSideEffect(String, Function2) */ default Tuple2Task<T1, T2> withSideEffect(Function2<T1, T2, Task<?>> func) { return cast(Task.super.withSideEffect("sideEffect: " + _taskDescriptor.getDescription(func.getClass().getName()), tuple -> func.apply(tuple._1(), tuple._2()))); }
return map(desc, tuple -> f.apply(tuple._1(), tuple._2()));
return flatMap(desc, tuple -> f.apply(tuple._1(), tuple._2()));
return cast(andThen(desc, tuple -> consumer.accept(tuple._1(), tuple._2())));
@Override protected Promise<Tuple2<T1, T2>> run(final Context context) throws Exception { final SettablePromise<Tuple2<T1, T2>> result = Promises.settable(); InternalUtil.fastFailAfter(p -> { if (p.isFailed()) { result.fail(p.getError()); } else { result.done(tuple(_tasks._1().get(), _tasks._2().get())); } }, _tasks._1(), _tasks._2()); _tasks.forEach(t -> context.run((Task<?>)t)); return result; }