
com.lumiomedical.flow.Join Maven / Gradle / Ivy
package com.lumiomedical.flow;
import com.lumiomedical.flow.actor.generator.Generator;
import com.lumiomedical.flow.actor.loader.Loader;
import com.lumiomedical.flow.actor.transformer.BiTransformer;
import com.lumiomedical.flow.actor.transformer.Transformer;
import com.lumiomedical.flow.interruption.Interruption;
import com.lumiomedical.flow.io.output.Recipient;
import com.lumiomedical.flow.node.BiNode;
import com.lumiomedical.flow.stream.StreamGenerator;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* Joins are a point of passage joining two upstream branchs of a DAG.
* They accept two inputs from upstream, produce a joined output using a provided BiTransformer implementation, then pass it downstream.
*
* @author Pierre Lecerf ([email protected])
* Created on 2020/03/01
*/
public class Join extends BiNode implements FlowOut
{
private final BiTransformer actor;
/**
*
* @param input1
* @param input2
* @param actor
*/
public Join(FlowOut input1, FlowOut input2, BiTransformer actor)
{
super(input1, input2);
this.actor = actor;
}
/**
*
* @return
*/
public BiTransformer getActor()
{
return this.actor;
}
@Override
public Pipe into(Transformer transformer)
{
var pipe = new Pipe<>(transformer);
this.bind(pipe);
return pipe;
}
@Override
public Sink into(Loader loader)
{
var sink = new Sink<>(loader);
this.bind(sink);
return sink;
}
@Override
public Join join(FlowOut input, BiTransformer transformer)
{
return new Join<>(this, input, transformer);
}
@Override
public StreamGenerator stream(Function> generatorSupplier)
{
var pipe = new StreamGenerator<>(generatorSupplier);
this.bind(pipe);
return pipe;
}
/**
*
* @param loader
* @return
*/
public Join driftSink(Loader loader)
{
this.into(loader);
return this;
}
@Override
public Recipient collect(String name)
{
Recipient recipient = new Recipient<>(name);
this.bind(recipient);
return recipient;
}
/**
*
* @param name
* @return
*/
public Join sample(String name)
{
this.collect(name);
return this;
}
/**
*
* @return
*/
public Pipe interrupt()
{
return this.into(new Interruption<>());
}
/**
*
* @param predicate
* @return
*/
public Pipe interruptIf(Predicate predicate)
{
return this.into(new Interruption<>(predicate));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy