// Path: src/main/java/se/fearless/fettle/Action.java
// public interface Action<S, E, C> {
// 	/**
// 	 * Called when a transition occurs
// 	 * @param from the state the machine was in before the transition
// 	 * @param to the state the machine is in after the transition
// 	 * @param causedBy the event that triggered the transition
// 	 * @param context the context in which the event was fired supplied to the transition
// 	 * @param stateMachine the machine for which the transition occurred
// 	 */
// 	void onTransition(S from, S to, E causedBy, C context, StateMachine<S, E, C> stateMachine);
// }
// 
// Path: src/main/java/se/fearless/fettle/MutableTransitionModel.java
// public interface MutableTransitionModel<S, E, C> extends TransitionModel<S, E, C>, StateMachineTemplate<S, E, C> {
// 
// 	StateMachineTemplate<S, E, C> createImmutableClone();
// 
// 	void addTransition(S from, S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addFromAllTransition(S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addInternalTransition(S from, S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addEntryAction(S entryState, Action<S, E, C> action);
// 
// 	void addExitAction(S exitState, Action<S, E, C> action);
// }
// 
// Path: src/main/java/se/fearless/fettle/util/GuavaReplacement.java
// public class GuavaReplacement {
// 	private GuavaReplacement() {
// 	}
// 
// 	public static <T> List<T> newArrayList() {
// 		return new ArrayList<>();
// 	}
// 
// 	public static <K, V> Map<K, V> newHashMap() {
// 		return new HashMap<>();
// 	}
// }


import se.fearless.fettle.Action;
import se.fearless.fettle.MutableTransitionModel;
import se.fearless.fettle.util.GuavaReplacement;
import java.util.List;
package se.fearless.fettle.builder;



public class EntryExitActionBuilder<S, E, C> implements EntryExit<S, E, C> {
	private final Mode mode;
	private final S state;

	private EntryExitActionBuilder(Mode mode, S state) {
		this.mode = mode;
		this.state = state;
	}

	private enum Mode {
		ENTRY,
		EXIT
	}

// Path: src/main/java/se/fearless/fettle/Action.java
// public interface Action<S, E, C> {
// 	/**
// 	 * Called when a transition occurs
// 	 * @param from the state the machine was in before the transition
// 	 * @param to the state the machine is in after the transition
// 	 * @param causedBy the event that triggered the transition
// 	 * @param context the context in which the event was fired supplied to the transition
// 	 * @param stateMachine the machine for which the transition occurred
// 	 */
// 	void onTransition(S from, S to, E causedBy, C context, StateMachine<S, E, C> stateMachine);
// }
// 
// Path: src/main/java/se/fearless/fettle/MutableTransitionModel.java
// public interface MutableTransitionModel<S, E, C> extends TransitionModel<S, E, C>, StateMachineTemplate<S, E, C> {
// 
// 	StateMachineTemplate<S, E, C> createImmutableClone();
// 
// 	void addTransition(S from, S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addFromAllTransition(S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addInternalTransition(S from, S to, E event, Condition<C> condition, List<Action<S, E, C>> actions);
// 
// 	void addEntryAction(S entryState, Action<S, E, C> action);
// 
// 	void addExitAction(S exitState, Action<S, E, C> action);
// }
// 
// Path: src/main/java/se/fearless/fettle/util/GuavaReplacement.java
// public class GuavaReplacement {
// 	private GuavaReplacement() {
// 	}
// 
// 	public static <T> List<T> newArrayList() {
// 		return new ArrayList<>();
// 	}
// 
// 	public static <K, V> Map<K, V> newHashMap() {
// 		return new HashMap<>();
// 	}
// }


// Path: src/main/java/se/fearless/fettle/builder/EntryExitActionBuilder.java
import se.fearless.fettle.Action;
import se.fearless.fettle.MutableTransitionModel;
import se.fearless.fettle.util.GuavaReplacement;
import java.util.List;

package se.fearless.fettle.builder;



public class EntryExitActionBuilder<S, E, C> implements EntryExit<S, E, C> {
	private final Mode mode;
	private final S state;

	private EntryExitActionBuilder(Mode mode, S state) {
		this.mode = mode;
		this.state = state;
	}

	private enum Mode {
		ENTRY,
		EXIT
	}

	private final List<Action<S, E, C>> actions = GuavaReplacement.newArrayList();