package brainslug.flow.execution.token; import brainslug.flow.definition.Identifier; import brainslug.flow.execution.instance.FlowInstanceToken; import brainslug.flow.execution.instance.FlowInstanceTokenList; import java.util.*; public class TokenList implements FlowInstanceTokenList { List<FlowInstanceToken> tokenList = new ArrayList<FlowInstanceToken>(); public TokenList() { } public TokenList(List<? extends FlowInstanceToken> tokenList) { this.tokenList = (List<FlowInstanceToken>) tokenList; } @Override public List<FlowInstanceToken> getActiveTokens() { return notDead(tokenList); } @Override public List<FlowInstanceToken> getNodeTokens(Identifier nodeId) { List<FlowInstanceToken> nodeTokens = new ArrayList<FlowInstanceToken>(); for (FlowInstanceToken token : getActiveTokens()) { if (token.getNodeId().equals(nodeId)) { nodeTokens.add(token); } } return Collections.unmodifiableList(nodeTokens); } @Override public Iterator<FlowInstanceToken> iterator() { return getActiveTokens().iterator(); } @Override public void add(FlowInstanceToken token) { tokenList.add(token); } List<FlowInstanceToken> notDead(List<? extends FlowInstanceToken> tokens) { List<FlowInstanceToken> activeTokens = new ArrayList<FlowInstanceToken>(); for (FlowInstanceToken token : tokens) { if (!token.isDead()) { activeTokens.add(token); } } return activeTokens; } }