001package jmri.jmrix.nce.ncemon;
002
003import jmri.jmrix.nce.NceListener;
004import jmri.jmrix.nce.NceMessage;
005import jmri.jmrix.nce.NceReply;
006import jmri.jmrix.nce.NceSystemConnectionMemo;
007import jmri.jmrix.nce.swing.NcePanelInterface;
008import jmri.util.swing.JmriJOptionPane;
009
010/**
011 * Swing action to create and register a MonFrame object
012 *
013 * @author Bob Jacobsen Copyright (C) 2001, 2008
014 * @author kcameron Copyright (C) 2011 copied from SerialMonPane.java
015 * @author Daniel Boudreau Copyright (C) 2012 added human readable format
016 */
017public class NceMonPanel extends jmri.jmrix.AbstractMonPane implements NceListener, NcePanelInterface {
018
019    public NceMonPanel() {
020        super();
021    }
022
023    @Override
024    public String getHelpTarget() {
025        return null;
026    }
027
028    @Override
029    public String getTitle() {
030        StringBuilder x = new StringBuilder();
031        if (memo != null) {
032            x.append(memo.getUserName());
033        } else {
034            x.append("NCE_");
035        }
036        x.append(": ");
037        x.append("Command Monitor");
038        return x.toString();
039    }
040
041    @Override
042    public void dispose() {
043        // disconnect from the NceTrafficController
044        try {
045            memo.getNceTrafficController().removeNceListener(this);
046        } catch (java.lang.NullPointerException e) {
047            log.error("Error on dispose {}", e.toString());
048        }
049        // and unwind swing
050        super.dispose();
051    }
052
053    @Override
054    public void init() {
055    }
056
057    NceSystemConnectionMemo memo;
058
059    @Override
060    public void initContext(Object context) {
061        if (context instanceof NceSystemConnectionMemo) {
062            initComponents((NceSystemConnectionMemo) context);
063        }
064    }
065
066    @Override
067    public void initComponents(NceSystemConnectionMemo memo) {
068        this.memo = memo;
069        // connect to the NceTrafficController
070        try {
071            memo.getNceTrafficController().addNceListener(this);
072        } catch (java.lang.NullPointerException e) {
073            log.error("Unable to start the NCE Command monitor"); // NOI18N
074            JmriJOptionPane.showMessageDialog(null,
075                    Bundle.getMessage("DialogMonError"),
076                    Bundle.getMessage("DialogMonErrorTitle"),
077                    JmriJOptionPane.WARNING_MESSAGE);
078        }
079    }
080
081    @Override
082    public synchronized void message(NceMessage m) {  // receive a message and log it
083        if (m.isBinary()) {
084            logMessage(m);
085        } else {
086            logMessage("cmd: ",m);
087        }
088    }
089
090    @Override
091    public synchronized void reply(NceReply r) {  // receive a reply message and log it
092        if (r.isUnsolicited()) {
093            logMessage("msg: ",r);
094        } else {
095            logMessage(r);
096        }
097    }
098
099    /**
100     * Nested class to create one of these using old-style defaults
101     */
102    static public class Default extends jmri.jmrix.nce.swing.NceNamedPaneAction {
103
104        public Default() {
105            super("Nce Command Monitor",
106                    new jmri.util.swing.sdi.JmriJFrameInterface(),
107                    NceMonPanel.class.getName(),
108                    jmri.InstanceManager.getDefault(NceSystemConnectionMemo.class));
109        }
110    }
111
112    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(NceMonPanel.class);
113
114}