package org.squirrelframework.foundation.fsm.impl; import com.google.common.collect.Lists; import org.squirrelframework.foundation.fsm.Action; import org.squirrelframework.foundation.fsm.Actions; import org.squirrelframework.foundation.fsm.StateMachine; import java.util.Collections; import java.util.Comparator; import java.util.List; public class ActionsImpl<T extends StateMachine<T, S, E, C>, S, E, C> implements Actions<T, S, E, C> { private final List<Action<T, S, E, C>> actions = Lists.newArrayList(); private List<Action<T, S, E, C>> sortedActions; @Override public void add(Action<T, S, E, C> newAction) { if(newAction!=null && !actions.contains(newAction)) { actions.add(newAction); } } @Override public void addAll(List<? extends Action<T, S, E, C>> newActions) { if(newActions!=null && !newActions.isEmpty()) { for(Action<T, S, E, C> action : newActions) { if(action!=null) add(action); } } } @Override public List<Action<T, S, E, C>> getAll() { return getSortedAction(); } private List<Action<T, S, E, C>> getSortedAction() { if(actions.isEmpty()) return Collections.emptyList(); if(sortedActions==null) { sortedActions = Lists.newArrayList(actions); Collections.sort(sortedActions, new Comparator<Action<T, S, E, C>>() { @Override public int compare(Action<T, S, E, C> o1, Action<T, S, E, C> o2) { return o2.weight() - o1.weight(); } }); sortedActions = Collections.unmodifiableList(sortedActions); } return sortedActions; } @Override public void clear() { actions.clear(); sortedActions=null; } }