001package jmri.jmrix.dccpp.swing.messages;
002
003import java.awt.Frame;
004import java.awt.GraphicsEnvironment;
005
006import jmri.jmrix.dccpp.*;
007import jmri.util.ThreadingUtil;
008
009/** Logs DCC-EX MESSAGE() broadcasts and opens the Messages window when one arrives. */
010public class MessagesWatcher implements DCCppListener {
011
012    private final DCCppSystemConnectionMemo _memo;
013
014    public MessagesWatcher(DCCppSystemConnectionMemo memo) {
015        _memo = memo;
016        memo.getDCCppTrafficController().addDCCppListener(DCCppInterface.CS_INFO, this);
017    }
018
019    /** {@inheritDoc} */
020    @Override
021    public void message(DCCppReply msg) {
022        if (!msg.isMessageReply()) {
023            return;
024        }
025        String text = msg.getMessageString();
026        log.info("DCC-EX message: {}", text);
027        if (!GraphicsEnvironment.isHeadless() && MessagesFrame.isAutoOpen(_memo)) {
028            ThreadingUtil.runOnGUI(() -> {
029                MessagesFrame frame = MessagesFrame.findFrame(_memo);
030                if (frame == null) {
031                    MessagesFrame.showFrame(_memo, text);
032                } else if ((frame.getExtendedState() & Frame.ICONIFIED) != 0) {
033                    frame.setExtendedState(Frame.NORMAL);
034                }
035            });
036        }
037    }
038
039    /** {@inheritDoc} */
040    @Override
041    public void message(DCCppMessage msg) {
042    }
043
044    /** {@inheritDoc} */
045    @Override
046    public void notifyTimeout(DCCppMessage msg) {
047    }
048
049    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MessagesWatcher.class);
050
051}