All Downloads are FREE. Search and download functionalities are using the official Maven repository.

se.l4.vibe.internal.builder.SamplerTriggerBuilder Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
package se.l4.vibe.internal.builder;

import java.util.concurrent.TimeUnit;

import se.l4.vibe.builder.SamplerBuilder;
import se.l4.vibe.builder.TriggerBuilder;
import se.l4.vibe.event.EventSeverity;
import se.l4.vibe.event.Events;
import se.l4.vibe.trigger.Condition;
import se.l4.vibe.trigger.TimedTrigger;
import se.l4.vibe.trigger.Trigger;
import se.l4.vibe.trigger.TriggerEvent;
import se.l4.vibe.trigger.TriggerListener;

/**
 * Actual builder for triggers, stores data in {@link TriggerHolder}.
 * 
 * @author Andreas Holstenson
 *
 * @param 
 * @param 
 * @param 
 */
public class SamplerTriggerBuilder
	implements TriggerBuilder>
{
	private final SamplerBuilderImpl builder;
	private final Trigger trigger;
	private final Condition condition;
	
	private final Events events;
	
	private long maxTime;
	private boolean whenNoLongerMet;

	public SamplerTriggerBuilder(
			SamplerBuilderImpl builder,
			Trigger trigger,
			Condition condition,
			Events events)
	{
		this.builder = builder;
		this.trigger = trigger;
		this.condition = condition;
		this.events = events;
		
		maxTime = trigger instanceof TimedTrigger
			? ((TimedTrigger) trigger).getDefaultRepeatTime()
			: 0;
	}

	@Override
	public TriggerBuilder> andWhenNoLongerMet()
	{
		whenNoLongerMet = true;
		
		return this;
	}
	
	@Override
	public TriggerBuilder> onlyOnce()
	{
		maxTime = Long.MAX_VALUE;
		
		return this;
	}
	
	@Override
	public TriggerBuilder> atMostEvery(long duration, TimeUnit unit)
	{
		maxTime = unit.toMillis(duration);
		
		return this;
	}
	
	@Override
	public SamplerBuilder sendEvent(EventSeverity severity)
	{
		return handleWith(new EventTriggerListener(events, severity));
	}
	
	@Override
	public SamplerBuilder handleWith(TriggerListener listener)
	{
		builder.triggers.add(new TriggerHolder(
			trigger, 
			condition, 
			maxTime,
			whenNoLongerMet,
			listener
		));
			
		return builder;
	}
	
	private static class EventTriggerListener
		implements TriggerListener
	{
		private final Events events;
		private final EventSeverity severity;
	
		public EventTriggerListener(Events events, EventSeverity severity)
		{
			this.events = events;
			this.severity = severity;
		}
		
		@Override
		public void onEvent(TriggerEvent event)
		{
			events.register(severity, event);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy