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}