Search in sources :

Example 1 with Reactored

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());
}
Also used : Reactored(ru.fix.completable.reactor.api.Reactored) lombok.val(lombok.val) Test(org.junit.Test) CompletableFuture(java.util.concurrent.CompletableFuture) CompletableReactor(ru.fix.completable.reactor.runtime.CompletableReactor) TimeUnit(java.util.concurrent.TimeUnit) ReactorGraph(ru.fix.completable.reactor.runtime.ReactorGraph) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Data(lombok.Data) BigInteger(java.math.BigInteger) Assert.assertEquals(org.junit.Assert.assertEquals) Before(org.junit.Before) SimpleProfiler(ru.fix.commons.profiler.impl.SimpleProfiler) ReactorGraphBuilder(ru.fix.completable.reactor.runtime.ReactorGraphBuilder) Processor(ru.fix.completable.reactor.runtime.dsl.Processor) Reactored(ru.fix.completable.reactor.api.Reactored) BigInteger(java.math.BigInteger) Data(lombok.Data) Test(org.junit.Test)

Example 2 with Reactored

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());
}
Also used : lombok.val(lombok.val) 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 3 with Reactored

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

Example 4 with Reactored

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

Example 5 with Reactored

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;
    }
}
Also used : Reactored(ru.fix.completable.reactor.api.Reactored) ReactorReflector(ru.fix.completable.reactor.runtime.internal.ReactorReflector) Slf4j(lombok.extern.slf4j.Slf4j) ReactorGraph(ru.fix.completable.reactor.runtime.ReactorGraph) List(java.util.List) CRReactorGraph(ru.fix.completable.reactor.runtime.internal.CRReactorGraph) Map(java.util.Map) GraphValidator(ru.fix.completable.reactor.runtime.validators.GraphValidator) Optional(java.util.Optional) HashMap(java.util.HashMap) Field(java.lang.reflect.Field) Field(java.lang.reflect.Field) Reactored(ru.fix.completable.reactor.api.Reactored) HashMap(java.util.HashMap)

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