use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CompletableReactorHandlerArgumentsTest method arguments_test_1.
@Test
public void arguments_test_1() throws Exception {
@Reactored("Payload with string")
@Data
class Payload {
String data;
}
class Service {
@Reactored("method with 6 arguments")
public CompletableFuture<String> foo(long arg) {
return CompletableFuture.completedFuture("" + arg);
}
}
final Service service = new Service();
class Config {
ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);
Processor<Payload> processor = graphBuilder.processor().forPayload(Payload.class).passArg(pld -> 7L).withHandler(service::foo).withMerger((payload, result) -> {
payload.data = result;
return CompletableReactorTest.Status.OK;
}).buildProcessor();
ReactorGraph<Payload> graph() {
return graphBuilder.payload(Payload.class).handle(processor).mergePoint(processor).onAny().complete().coordinates().buildGraph();
}
}
reactor.registerReactorGraph(new Config().graph());
assertEquals("7", reactor.submit(new Payload()).getResultFuture().get(5, TimeUnit.SECONDS).getData());
}
use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CRReactorGraph method serializePayload.
ReactorGraphModel.Payload serializePayload() {
ReactorGraphModel.Payload payload = new ReactorGraphModel.Payload();
payload.payloadClass = payloadClass.getName();
payload.payloadName = payloadClass.getSimpleName();
val paylaodDocBuilder = new ArrayList<String>();
for (Class<?> clazz = payloadClass; clazz != null; clazz = clazz.getSuperclass()) {
val docs = Optional.ofNullable(clazz.getDeclaredAnnotation(Reactored.class)).map(Reactored::value).orElse(null);
if (docs != null) {
if (clazz != payloadClass) {
// one of super classes
paylaodDocBuilder.add("extends " + clazz.getSimpleName());
}
paylaodDocBuilder.addAll(Arrays.asList(docs));
}
}
payload.payloadDoc = paylaodDocBuilder.toArray(new String[paylaodDocBuilder.size()]);
return payload;
}
use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CRMergePointMergerBuilder method withMerger.
@Override
public MergePointDescription<PayloadType> withMerger(String title, String[] docs, MergePointMerger<PayloadType> mergePointMerger) {
val mergerMethod = LambdaReflector.tryReflectAnnotatedMethodReference(mergePointMerger, Reactored.class).orElse(null);
if (title == null && mergerMethod != null) {
title = mergerMethod.getMethod().getName();
}
if (docs == null && mergerMethod != null) {
docs = mergerMethod.getAnnotation().map(Reactored::value).orElse(null);
}
this.mergePointDescription.merger = mergePointMerger;
this.mergePointDescription.mergerSource = ReactorReflector.getMethodInvocationPoint().orElse(null);
this.mergePointDescription.mergerTitle = title;
this.mergePointDescription.mergerDocs = docs;
return this.mergePointDescription;
}
use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CRSubgraphMergerBuilder method withMerger.
@Override
public SubgraphDescription<PayloadType> withMerger(String title, String[] docs, SubgraphMerger<PayloadType, SubgraphResult> subgraphMerger) {
val annotatedMethod = LambdaReflector.tryReflectAnnotatedMethodReference(subgraphMerger, Reactored.class).orElse(null);
if (title == null && annotatedMethod != null) {
title = annotatedMethod.getMethod().getName();
}
if ((docs == null || docs.length == 0) && annotatedMethod != null) {
docs = annotatedMethod.getAnnotation().map(Reactored::value).orElse(null);
}
this.subgraphDescription.merger = subgraphMerger;
this.subgraphDescription.mergeSource = ReactorReflector.getMethodInvocationPoint().orElse(null);
this.subgraphDescription.mergerTitle = title;
this.subgraphDescription.mergerDocs = docs;
return subgraphDescription;
}
Aggregations