📄 jremserverview.java
字号:
/* * JRemCntl - Copyright (C) 2007 Filippo Di Vattimo <fildiv@gmail.com> * See COPYING */package fildiv.jremcntl.server.gui.app;import java.awt.Color;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.KeyEvent;import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java.util.Map;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;import javax.swing.JToggleButton;import javax.swing.SwingConstants;import fildiv.jremcntl.common.core.Command;import fildiv.jremcntl.common.core.Logger;import fildiv.jremcntl.common.util.JRemUtils;import fildiv.jremcntl.server.core.AbstractJRemServerListener;import fildiv.jremcntl.server.core.AppConfiguration;import fildiv.jremcntl.server.core.JRemEnv;import fildiv.jremcntl.server.gui.core.CmdUI;import fildiv.jremcntl.server.gui.core.DocModifiedContent;import fildiv.jremcntl.server.gui.core.DocumentAttachedEvent;import fildiv.jremcntl.server.gui.core.DocumentEvent;import fildiv.jremcntl.server.gui.core.DocumentListener;import fildiv.jremcntl.server.gui.core.DocumentModifiedEvent;import fildiv.jremcntl.server.gui.core.JRemUIManager;import fildiv.jremcntl.server.gui.core.StateCmdUI;import fildiv.jremcntl.server.gui.model.JRemServerDoc;import fildiv.jremcntl.server.gui.util.swing.JRemAbstractToggleAction;import fildiv.jremcntl.server.gui.util.swing.SwingUtils;import fildiv.jremcntl.server.utils.JRemServerUtils;public class JRemServerView extends JPanel { private static final long serialVersionUID = 1L; private JRemEnv env; private AppConfiguration conf; private boolean updating; private JRemServerListenerImpl serverListener; private Icon iconStdOut24 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/Stdout24.gif")); // @jve:decl-index=0: private Icon iconStdErr24 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/Stderr24.gif")); private Icon iconStdOut16 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/Stdout16.gif")); // @jve:decl-index=0: private Icon iconStdErr16 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/Stderr16.gif")); // @jve:decl-index=0: private Icon iconShowOut24 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/ServerOut24.gif")); // @jve:decl-index=0: private Icon iconShowOut16 = new ImageIcon(getClass().getResource("/fildiv/jremcntl/server/res/ServerOut16.gif")); private JRemServerGUI serverGUI; private JRemUIManager uiMng; protected class JRemServerListenerImpl extends AbstractJRemServerListener { public JRemServerListenerImpl(Logger logger) { super(logger); } public void onCommandTerminated(Command c, int exitCode) { super.onCommandTerminated(c, exitCode); if (exitCode != 0 && conf.isRestoreGUIOnCmdError()) uiMng.setGUIMinimized(false); } public void onCommandProcessStderr(String data) { if (!JRemServerUtils.isShowServerStdError(env, uiMng)) return; super.onCommandProcessStderr(data); } public void onCommandProcessStdout(String data) { if (!JRemServerUtils.isShowServerStdOutput(env, uiMng)) return; super.onCommandProcessStdout(data); } public void onDeviceConnected(String deviceName) { super.onDeviceConnected(deviceName); if (conf.isMinimizeGUIOnConnect()) uiMng.setGUIMinimized(true); } public void onDeviceDisconnected() { super.onDeviceDisconnected(); if (conf.isMinimizeGUIOnConnect()) uiMng.setGUIMinimized(false); } /* * Override */ public void printServerInfo(String msg) { if (!JRemServerUtils.isShowServerOutput(env, uiMng)) return; appendAndScroll(jTextAreaServerOutput, "[INFO] " + msg); } public void printServerError(String msg) { if (conf.isRestoreGUIOnError()) uiMng.setGUIMinimized(false); appendAndScroll(jTextAreaServerOutput, "[ERROR] " + msg); } public void printServerError(Exception e) { if (conf.isRestoreGUIOnError()) uiMng.setGUIMinimized(false); String msg = null; StringWriter sw = null; PrintWriter pw = null; try { sw = new StringWriter(); pw = new PrintWriter(sw); e.printStackTrace(pw); msg = sw.toString(); printServerError(msg); } finally { try { if (pw != null) pw.close(); if (sw != null) sw.close(); } catch (IOException ignore) { } } } public void printCmdStderr(String data) { appendAndScroll(jTextAreaCmdStdErr, data, false); } public void printCmdStdout(String data) { appendAndScroll(jTextAreaCmdStdOut, data, false); } /* * Implementation */ protected void appendAndScroll(JTextArea ta, String msg, boolean cr) { ta.append(msg); if (cr) ta.append("\n"); ta.setCaretPosition(ta.getText().length()); } protected void appendAndScroll(JTextArea ta, String msg) { appendAndScroll(ta, msg, true); } } /** * This is the default constructor * @param env * @param serverGUI */ public JRemServerView(JRemServerGUI serverGUI) { super(); this.env = JRemEnv.getInstance(); this.conf = env.getAppConfiguration(); this.serverGUI = serverGUI; this.uiMng = serverGUI.getUIManager(); initialize(); serverListener = new JRemServerListenerImpl(env.getLogger()); } /** * This method initializes this * * @return void */ private void initialize() { GridBagConstraints gridBagConstraints51 = new GridBagConstraints(); gridBagConstraints51.gridx = 2; gridBagConstraints51.insets = new Insets(2, 3, 3, 3); gridBagConstraints51.fill = GridBagConstraints.VERTICAL; gridBagConstraints51.weightx = 0.0; gridBagConstraints51.gridy = 0; GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); gridBagConstraints3.gridx = -1; gridBagConstraints3.gridy = -1; GridBagConstraints gridBagConstraints21 = new GridBagConstraints(); gridBagConstraints21.gridx = 1; gridBagConstraints21.gridy = 0; GridBagConstraints gridBagConstraints31 = new GridBagConstraints(); gridBagConstraints31.gridx = -1; gridBagConstraints31.gridy = -1; GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); gridBagConstraints1.fill = GridBagConstraints.BOTH; gridBagConstraints1.gridy = 2; gridBagConstraints1.weightx = 1.0; gridBagConstraints1.weighty = 1.0; gridBagConstraints1.gridwidth = 7; gridBagConstraints1.gridx = 0; GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); gridBagConstraints2.gridx = 1; gridBagConstraints2.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints2.ipadx = 1; gridBagConstraints2.weightx = 1.0; gridBagConstraints2.gridy = 0; jServerStatus1 = new JLabel(); jServerStatus1.setMaximumSize(new Dimension(100, 24)); jServerStatus1.setPreferredSize(new Dimension(100, 24)); jServerStatus1.setHorizontalAlignment(SwingConstants.LEFT); jServerStatus1.setHorizontalTextPosition(SwingConstants.LEFT); jServerStatus1.setText("Server output ..."); jServerStatus1.setMinimumSize(new Dimension(100, 24)); GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.insets = new Insets(2, 2, 0, 0); gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 0.3; gridBagConstraints.gridy = 0; jServerStatus = new JLabel(); jServerStatus.setMaximumSize(new Dimension(100, 24)); jServerStatus.setHorizontalTextPosition(SwingConstants.CENTER); jServerStatus.setText("Server output ..."); jServerStatus.setPreferredSize(new Dimension(100, 24)); jServerStatus.setMinimumSize(new Dimension(100, 24)); jServerStatus.setHorizontalAlignment(SwingConstants.LEFT); this.setSize(420, 222); this.setLayout(new GridBagLayout()); this.setPreferredSize(new Dimension(90, 90)); this.setMaximumSize(new Dimension(32, 32)); this.setMinimumSize(new Dimension(32, 32)); this.add(jServerStatus, gridBagConstraints); this.add(jServerStatus1, gridBagConstraints2); this.add(getJSplitPane(), gridBagConstraints1); this.add(getJtbShowServerOutput(), gridBagConstraints51); } DocumentListener listener = new DocumentListener() { public void actionPerformed(DocumentEvent event) { updateView(event); } }; private JRemServerDoc doc; // @jve:decl-index=0: private JLabel jServerStatus = null; private JScrollPane jScrollPaneServerOutput = null; private JTextArea jTextAreaServerOutput = null; private JLabel jServerStatus1 = null; private JSplitPane jSplitPane = null; private Map cmdActionsMap; private JPanel jPanelCmdOutput = null; private JToggleButton jtbShowServerOutput = null; private JSplitPane jSplitPane1CmdOutput = null; private JPanel jPanelCmdStdOut = null; private JToggleButton jtbShowStdOutput = null; private JLabel jLabel = null; private JScrollPane jScrollPaneCmdStdOut = null; private JTextArea jTextAreaCmdStdOut = null; private JPanel jPanelCmdStdErr = null; private JToggleButton jtbShowStdError = null; private JScrollPane jScrollPaneCmdStdErr = null; private JTextArea jTextAreaCmdStdErr = null; private JLabel jLabel1 = null; public void setDocument(JRemServerDoc doc) { if (this.doc != null) this.doc.removeActionListener(listener); this.doc = doc; if (this.doc != null) this.doc.addActionListener(listener); } private void updateView(DocumentEvent event) { try { updating = true; SwingUtils.showWaitCursor(this, false); if (event instanceof DocumentModifiedEvent) { update(); DocumentModifiedEvent de = (DocumentModifiedEvent) event; DocModifiedContent content = (DocModifiedContent) de.getWhatModified(); int modifyType = content.getModifyType(); switch(modifyType) { case JRemServerDoc.MODIFIED_CONTENT_TYPE_START_EXCEPTION: Exception e = (Exception) content.getModifySupport(); serverListener.printServerError(e); env.getLogger().error(e); SwingUtils.showMessage(this, env, "Server threw an exception! Please check server output log."); } } else { if (event instanceof DocumentAttachedEvent) { doc.addServerEventsListener(serverListener); doc.addCommandEventsListener(serverListener); update(); } else { // DocumentDetachEvent doc.removeServerEventsListener(serverListener); doc.removeCommandEventsListener(serverListener); } } } finally { updating = false; SwingUtils.showWaitCursor(this, false); } } private void update() { StringBuffer s = new StringBuffer("Server : "); Color foreColor = null; if (doc.isRunning()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -