package rescuecore2.standard.kernel.comms; import java.util.List; import java.util.ArrayList; import java.util.Collection; import rescuecore2.standard.messages.AKSpeak; /** A Noise implementation that chains Noise objects together. */ public class ChainedNoise implements Noise { private List<Noise> chain; /** Create a ChainedNoise object with no children. */ public ChainedNoise() { chain = new ArrayList<Noise>(); } /** Create a ChainedNoise object with a set of children. @param chain The child noise objects. */ public ChainedNoise(Collection<Noise> chain) { this(); this.chain.addAll(chain); } @Override public AKSpeak applyNoise(AKSpeak message) { AKSpeak current = message; for (Noise next : chain) { if (current == null) { return null; } current = next.applyNoise(current); } return current; } /** Add a child. @param child The child to add. This may be null. */ public void addChild(Noise child) { if (child != null) { chain.add(child); } } /** Remove a child. @param child The child to remove. */ public void removeChild(Noise child) { chain.remove(child); } }