/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.common.textstream.receivers; import java.util.LinkedList; import java.util.List; import de.rcenvironment.core.utils.common.textstream.TextOutputReceiver; /** * This implementation of {@link TextOutputReceiver} forwards all received events to multiple other instances of {@link TextOutputReceiver}. * * @author Tobias Rodehutskors * */ public class MultiTextOutputReceiver implements TextOutputReceiver { private List<TextOutputReceiver> forwardTargets; public MultiTextOutputReceiver() { forwardTargets = new LinkedList<TextOutputReceiver>(); } public MultiTextOutputReceiver(TextOutputReceiver firstTextOutputReceiver, TextOutputReceiver secondTextOutputReceiver) { this(); forwardTargets.add(firstTextOutputReceiver); forwardTargets.add(secondTextOutputReceiver); } /** * Adds a new {@link TextOutputReceiver} to the list of receivers. If a {@link TextOutputReceiver} was already added to this * {@link MultiTextOutputReceiver}, it will not be added a second time. * * @param newTextOutputReceiver The receiver to add. */ public void addTextOutputReceiver(TextOutputReceiver newTextOutputReceiver) { if (!forwardTargets.contains(newTextOutputReceiver)) { forwardTargets.add(newTextOutputReceiver); } } /** * Removes a {@link TextOutputReceiver} from the list of receivers. * * @param textOutputReceiverToRemove The receiver to remove; */ public void removeTextOutputReceiver(TextOutputReceiver textOutputReceiverToRemove) { forwardTargets.remove(textOutputReceiverToRemove); } @Override public void onStart() { for (TextOutputReceiver forwardTarget : forwardTargets) { forwardTarget.onStart(); } } @Override public void addOutput(String line) { for (TextOutputReceiver forwardTarget : forwardTargets) { forwardTarget.addOutput(line); } } @Override public void onFinished() { for (TextOutputReceiver forwardTarget : forwardTargets) { forwardTarget.onFinished(); } } @Override public void onFatalError(Exception e) { for (TextOutputReceiver forwardTarget : forwardTargets) { forwardTarget.onFatalError(e); } } }