Search in sources :

Example 11 with Reactored

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());
}
Also used : ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Reactored(ru.fix.completable.reactor.api.Reactored) Data(lombok.Data) Test(org.junit.Test)

Example 12 with Reactored

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;
}
Also used : lombok.val(lombok.val) Reactored(ru.fix.completable.reactor.api.Reactored) ReactorGraphModel(ru.fix.completable.reactor.api.ReactorGraphModel)

Example 13 with Reactored

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;
}
Also used : lombok.val(lombok.val) Reactored(ru.fix.completable.reactor.api.Reactored)

Example 14 with Reactored

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;
}
Also used : lombok.val(lombok.val) Reactored(ru.fix.completable.reactor.api.Reactored)

Aggregations

Reactored (ru.fix.completable.reactor.api.Reactored)14 lombok.val (lombok.val)12 Data (lombok.Data)8 Test (org.junit.Test)8 ReactorGraphBuilder (ru.fix.completable.reactor.runtime.ReactorGraphBuilder)8 Processor (ru.fix.completable.reactor.runtime.dsl.Processor)8 ReactorGraph (ru.fix.completable.reactor.runtime.ReactorGraph)7 BigInteger (java.math.BigInteger)6 CompletableFuture (java.util.concurrent.CompletableFuture)6 TimeUnit (java.util.concurrent.TimeUnit)6 Assert.assertEquals (org.junit.Assert.assertEquals)6 Before (org.junit.Before)6 SimpleProfiler (ru.fix.commons.profiler.impl.SimpleProfiler)6 CompletableReactor (ru.fix.completable.reactor.runtime.CompletableReactor)6 Field (java.lang.reflect.Field)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Slf4j (lombok.extern.slf4j.Slf4j)1