package org.squirrelframework.foundation.component.impl; import java.util.ArrayList; import java.util.List; import java.util.Stack; import org.squirrelframework.foundation.component.Heartbeat; import org.squirrelframework.foundation.component.SquirrelComponent; import com.google.common.base.Preconditions; public class HeartbeatImpl implements Heartbeat, SquirrelComponent { private final Stack<List<Runnable>> stack = new Stack<List<Runnable>>(); @Override public void begin() { List<Runnable> beat = new ArrayList<Runnable>(); stack.push(beat); } @Override public void execute() { List<Runnable> beat = stack.pop(); for (Runnable r : beat) { r.run(); } } @Override public void defer(Runnable command) { Preconditions.checkNotNull(command); stack.peek().add(command); } }