use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CompletableReactorHandlerArgumentsTest method arguments_test_7.
@Test
public void arguments_test_7() throws Exception {
@Reactored("Payload with string")
@Data
class Payload {
String data;
}
class Service {
@Reactored("method with 7 arguments")
public CompletableFuture<String> foo(String arg1, int arg2, short arg3, boolean arg4, Object arg5, BigInteger arg6, long arg7) {
return CompletableFuture.completedFuture(arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7);
}
}
final Service service = new Service();
class Config {
ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);
Processor<Payload> processor = graphBuilder.processor().forPayload(Payload.class).passArg(pld -> "1").passArg(pld -> 2).passArg(pld -> (short) 3).passArg(pld -> true).passArg(pld -> 5).passArg(pld -> BigInteger.valueOf(6L)).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("123true567", 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 CompletableReactorHandlerArgumentsTest method arguments_test_0.
@Test
public void arguments_test_0() throws Exception {
@Reactored("Payload with string")
@Data
class Payload {
String data;
}
class Service {
@Reactored("method with 0 arguments")
public CompletableFuture<String> foo() {
return CompletableFuture.completedFuture("");
}
}
final Service service = new Service();
class Config {
ReactorGraphBuilder graphBuilder = new ReactorGraphBuilder(this);
Processor<Payload> processor = graphBuilder.processor().forPayload(Payload.class).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();
}
}
val graph = new Config().graph();
reactor.registerReactorGraph(graph);
assertEquals("", 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 CRProcessorMergerBuilder method withMerger.
@Override
public ProcessorDescription<PayloadType> withMerger(String title, String[] docs, ProcessorMerger<PayloadType, ProcessorResult> processorMerger) {
val mergerMethod = LambdaReflector.tryReflectAnnotatedMethodReference(processorMerger, Reactored.class).orElse(null);
if (title == null && mergerMethod != null) {
title = mergerMethod.getMethod().getName();
}
if ((docs == null || docs.length == 0) && mergerMethod != null) {
docs = mergerMethod.getAnnotation().map(Reactored::value).orElse(null);
}
this.processorDescription.merger = processorMerger;
this.processorDescription.mergeSource = ReactorReflector.getMethodInvocationPoint().orElse(null);
this.processorDescription.mergerTitle = title;
this.processorDescription.mergerDocs = docs;
return processorDescription;
}
use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class BuilderReflector method initializeProcessorDescription.
static void initializeProcessorDescription(Serializable methodReference, CRProcessorDescription processorDescription) {
ReactorReflector.getMethodInvocationPoint().ifPresent(source -> processorDescription.withHandlerSource = source);
val method = LambdaReflector.reflectAnnotatedMethodReference(methodReference, Reactored.class);
processorDescription.processorType = method.getMethodClass();
Optional.ofNullable(method.getMethodClass().getAnnotation(Reactored.class)).map(annotation -> (Reactored) annotation).map(Reactored::value).ifPresent(processorDescription::setProcessorDoc);
processorDescription.handlerTitle = method.getMethod().getName();
processorDescription.handlerDocs = method.getAnnotation().map(Reactored::value).orElse(null);
}
use of ru.fix.completable.reactor.api.Reactored in project completable-reactor by ru-fix.
the class CRGraphBuilder method lookupTransitionDocumentation.
/**
* @param transition
* @return NULL if no documentation provided
*/
Map<String, String[]> lookupTransitionDocumentation(CRReactorGraph.Transition transition) {
if (transition.getMergeStatuses() != null) {
Map<String, String[]> transitionsDoc = new HashMap<>();
transition.getMergeStatuses().forEach(status -> {
Field mergeStatusEnumField = null;
try {
mergeStatusEnumField = status.getClass().getField(status.name());
} catch (NoSuchFieldException illegalStateExc) {
log.error("Illegal state. Can not get field of enum %s", status, illegalStateExc);
}
transitionsDoc.put(status.name(), Optional.ofNullable(mergeStatusEnumField).map(field -> field.getAnnotation(Reactored.class)).map(Reactored::value).orElse(null));
});
return transitionsDoc;
} else {
return null;
}
}
Aggregations