/* * Created on Mar 27, 2006 */ package org.seqcode.projects.seqview; import java.util.*; import org.seqcode.gsebricks.verbs.*; /** * @author tdanford */ public interface ValueReceiver<X, Y> extends Startable<X> { public void finish(); public void addValue(Y value); public static class MappedWrapper<Base,Input,Output> implements ValueReceiver<Base,Input> { private ValueReceiver<Base,Output> inner; private Mapper<Input,Output> mapper; public MappedWrapper(ValueReceiver<Base,Output> in, Mapper<Input,Output> m) { inner = in; mapper = m; } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.ValueReceiver#finish() */ public void finish() { inner.finish(); } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.ValueReceiver#addValue(java.lang.Object) */ public void addValue(Input value) { inner.addValue(mapper.execute(value)); } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.Startable#start(java.lang.Object) */ public void start(Base value) { inner.start(value); } } public static class ExpanderWrapper<Base,Input,Output> implements ValueReceiver<Base,Input> { private ValueReceiver<Base,Output> inner; private Expander<Input,Output> expander; public ExpanderWrapper(ValueReceiver<Base,Output> in, Expander<Input,Output> m) { inner = in; expander = m; } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.ValueReceiver#finish() */ public void finish() { inner.finish(); } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.ValueReceiver#addValue(java.lang.Object) */ public void addValue(Input value) { Iterator<Output> itr = expander.execute(value); while(itr.hasNext()) { inner.addValue(itr.next()); } } /* (non-Javadoc) * @see org.seqcode.gse.hyperdriveson.models.Startable#start(java.lang.Object) */ public void start(Base value) { inner.start(value); } } }