package org.sef4j.core.helpers.senders;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
import org.sef4j.core.api.EventSender;
public abstract class AbstractTransformerEventSender<T,TDest> implements EventSender<T> {
protected EventSender<TDest> target;
// ------------------------------------------------------------------------
protected AbstractTransformerEventSender(EventSender<TDest> target) {
this.target = target;
}
// ------------------------------------------------------------------------
@Override
public void sendEvent(T event) {
TDest transformedEvent = transformEvent(event);
target.sendEvent(transformedEvent);
}
@Override
public void sendEvents(Collection<T> events) {
List<TDest> transformedEvents = new ArrayList<TDest>(events.size());
for(T event : events) {
TDest transformedEvent = transformEvent(event);
transformedEvents.add(transformedEvent);
}
target.sendEvents(transformedEvents);
}
protected abstract TDest transformEvent(T event);
// ------------------------------------------------------------------------
public static class FuncTransformerEventSender<T,TDest> extends AbstractTransformerEventSender<T,TDest> {
private Function<T,TDest> transformFunction;
public FuncTransformerEventSender(EventSender<TDest> target, Function<T,TDest> transformFunction) {
super(target);
this.transformFunction = transformFunction;
}
@Override
protected TDest transformEvent(T event) {
return transformFunction.apply(event);
}
// ------------------------------------------------------------------------
@Override
public String toString() {
return "FuncTransformEventSender [transformFunction=" + transformFunction + ", target=" + target + "]";
}
}
}