CorWrappedDispatch.java
package eu.javaexperience.patterns.behavioral.cor.link;
import eu.javaexperience.collection.list.RWArrayList;
import eu.javaexperience.dispatch.Dispatcher;
import eu.javaexperience.dispatch.DispatcherTools;
import eu.javaexperience.dispatch.RWListSubdispatchVariator;
import eu.javaexperience.dispatch.SubdispatchVariator;
import eu.javaexperience.dispatch.VariableSubDispatch;
import eu.javaexperience.patterns.behavioral.cor.link.CorChainLink;
public abstract class CorWrappedDispatch<CTX, T> extends CorChainLink<CTX> implements VariableSubDispatch<CTX>
{
protected final RWArrayList<Dispatcher<CTX>> DISPATCH = new RWArrayList<>();
protected final RWListSubdispatchVariator<CTX> vari = new RWListSubdispatchVariator<>(DISPATCH);
protected abstract T doBefore(CTX ctx);
protected abstract void doAfter(CTX ctx, T extraData);
@Override
public boolean dispatch(CTX ctx)
{
T elem = doBefore(ctx);
try
{
return DispatcherTools.subDispatch(ctx, DISPATCH);
}
finally
{
doAfter(ctx, elem);
}
}
@Override
public SubdispatchVariator<CTX> getDispatchVariator()
{
return vari;
}
}