package se.l4.vibe.internal; import se.l4.vibe.probes.Probe; import se.l4.vibe.probes.Sampler; import se.l4.vibe.trigger.TimedTrigger; import se.l4.vibe.trigger.Trigger; /** * Implementation of {@link Trigger} that combines two other triggers. * * @author Andreas Holstenson * * @param <Input> * @param <Output> */ public class MergedTrigger<Input, Output> implements TimedTrigger<Input, Output> { private final Trigger<Input, ?> first; private final Trigger<?, Output> second; public <T> MergedTrigger( Trigger<Input, T> first, Trigger<T, Output> second) { this.first = first; this.second = second; } @Override public Probe<Output> forSampler(Sampler<Input> series) { Probe<?> probe = first.forSampler(series); SamplerForMergedTrigger fakeSeries = new SamplerForMergedTrigger(series, probe); return second.forSampler(fakeSeries); } @Override public long getDefaultRepeatTime() { if(second instanceof TimedTrigger) { // Get the time of the second trigger if set long time = ((TimedTrigger) second).getDefaultRepeatTime(); if(time > 0) return time; } if(first instanceof TimedTrigger) { // Get the time of the first trigger if set long time = ((TimedTrigger) first).getDefaultRepeatTime(); if(time > 0) return time; } // Set to sample time by default return 0; } @Override public String toString() { return second + " on " + first; } }