From 3993377c611f4ecdc31186d6a8cc601ee5456550 Mon Sep 17 00:00:00 2001 From: yunnysunny Date: Sun, 16 Sep 2012 10:42:50 +0800 Subject: [PATCH] =?UTF-8?q?DruidSqlDetailFrame=E7=B1=BB=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E6=A0=87=E9=A2=98=E6=A0=8F=E6=8F=90=E7=A4=BA=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86DruidSqlDetailFrame=E7=B1=BB?= =?UTF-8?q?=E7=9A=84javadoc=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/jconsole/DruidSqlDetailFrame.java | 261 +++++++++++------- 1 file changed, 167 insertions(+), 94 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/jconsole/DruidSqlDetailFrame.java b/src/main/java/com/alibaba/druid/support/jconsole/DruidSqlDetailFrame.java index 0b236749be..37f4ad4f82 100644 --- a/src/main/java/com/alibaba/druid/support/jconsole/DruidSqlDetailFrame.java +++ b/src/main/java/com/alibaba/druid/support/jconsole/DruidSqlDetailFrame.java @@ -27,6 +27,7 @@ import com.alibaba.druid.support.jconsole.util.TableDataProcessor.ColumnData; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; +// TODO: Auto-generated Javadoc /** * sql语句的详细信息 * @@ -117,82 +118,134 @@ import com.alibaba.druid.support.logging.LogFactory; } } * + * @author yunnysunny * */ public class DruidSqlDetailFrame extends JFrame { - private static final long serialVersionUID = 1L; - private static final String BASE_URL = "/sql"; - private String id; - private MBeanServerConnection conn; - private static final ArrayList PARESE_TITLE_LIST = new ArrayList(){ + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; - private static final long serialVersionUID = 1L; + /** service的地址的根路径. */ + private static final String BASE_URL = "/sql"; - { - add("parsedTable"); - add("parsedFields"); - add("parsedConditions"); - add("parsedRelationships"); - add("parsedOrderbycolumns"); + /** json中格式化sql的键名. */ + private static final String KEY_FORMAT_SQL = "formattedSql"; - } - }; - private static final ArrayList LAST_SLOW_TITLE_LIST= new ArrayList(){ + /** json中sql的键名. */ + private static final String KEY_SQL = "SQL"; - private static final long serialVersionUID = 1L; + /** sql语句的索引. */ + private String id; - { - add("MaxTimespan"); - add("MaxTimespanOccurTime"); - add("LastSlowParameters"); - } - }; - private static final ArrayList LAST_ERROR_TITLE_LIST= new ArrayList(){ + /** MBeanServerConnection对象. */ + private MBeanServerConnection conn; - private static final long serialVersionUID = 1L; + /** 解析信息内容表格的标题列. */ + private static final ArrayList PARESE_TITLE_LIST = new ArrayList() { - { - add("LastErrorMessage"); - add("LastErrorClass"); - add("LastErrorTime"); - add("LastErrorStackTrace"); - } - }; - private static final ArrayList OTHER_ERROR_TITLE_LIST= new ArrayList(){ + private static final long serialVersionUID = 1L; - private static final long serialVersionUID = 1L; + { + add("parsedTable"); + add("parsedFields"); + add("parsedConditions"); + add("parsedRelationships"); + add("parsedOrderbycolumns"); - { - add("BatchSizeMax"); - add("BatchSizeTotal"); - add("BlobOpenCount"); - add("ClobOpenCount"); - add("ReaderOpenCount"); - add("InputStreamOpenCount"); - add("ReadStringLength"); - add("ReadBytesLength"); - } - }; + } + }; + + /** 慢查询信息表格的标题列. */ + private static final ArrayList LAST_SLOW_TITLE_LIST = new ArrayList() { + + private static final long serialVersionUID = 1L; + + { + add("MaxTimespan"); + add("MaxTimespanOccurTime"); + add("LastSlowParameters"); + } + }; + + /** 错误信息表格的标题列. */ + private static final ArrayList LAST_ERROR_TITLE_LIST = new ArrayList() { + + private static final long serialVersionUID = 1L; + + { + add("LastErrorMessage"); + add("LastErrorClass"); + add("LastErrorTime"); + add("LastErrorStackTrace"); + } + }; + + /** 其他信息表格的标题列. */ + private static final ArrayList OTHER_ERROR_TITLE_LIST = new ArrayList() { + + private static final long serialVersionUID = 1L; + + { + add("BatchSizeMax"); + add("BatchSizeTotal"); + add("BlobOpenCount"); + add("ClobOpenCount"); + add("ReaderOpenCount"); + add("InputStreamOpenCount"); + add("ReadStringLength"); + add("ReadBytesLength"); + } + }; + + /** 解析信息数据. */ private ArrayList> parseData; + + /** 慢查询信息数据. */ private ArrayList> lastSlowData; + + /** 错误信息数据. */ private ArrayList> lastErrorData; + + /** 其他信息数据. */ private ArrayList> otherData; - private int maxListLen; - private String formatSql; - private String sql; - - private static final int WIDTH = 620; - private static final int HEIGHT = 520; - private final static Log LOG = LogFactory.getLog(DruidSqlDetailFrame.class); - - public DruidSqlDetailFrame(String id, MBeanServerConnection conn) { + + /** 各个数据表格中最大的数据列长度. */ + private int maxListLen; + + /** 格式化好的sql语句内容. */ + private String formatSql; + + /** 未格式化的sql语句内容. */ + private String sql; + + /** 窗体的宽度. */ + private static final int WIDTH = 800; + + /** 窗体的高度. */ + private static final int HEIGHT = 600; + + /** The Constant LOG. */ + private final static Log LOG = LogFactory.getLog(DruidSqlDetailFrame.class); + + /** + * Instantiates a new druid sql detail frame. + * + * @param id sql语句索引 + * @param conn MBeanServerConnection对象 + */ + public DruidSqlDetailFrame(String id, MBeanServerConnection conn){ this.id = id; this.conn = conn; getMaxListLen(); init(); start(); } - + + /** + * 获取各个数据表格中最大的数据列长度 + * + * @return the max list len + */ private void getMaxListLen() { maxListLen = PARESE_TITLE_LIST.size(); int slowLen = LAST_SLOW_TITLE_LIST.size(); @@ -208,15 +261,20 @@ public class DruidSqlDetailFrame extends JFrame { maxListLen = otherLen; } } - + + /** + * 初始化数据,得到四个表格的数据 + */ private void init() { String url = BASE_URL + "-" + id + ".json"; - + try { - ArrayList> data = TableDataProcessor.parseData(TableDataProcessor.getData(url,conn)); + ArrayList> data = TableDataProcessor.parseData(TableDataProcessor.getData(url, + conn)); if (data != null) { LinkedHashMap contentEle = data.get(0); - formatSql = (String)contentEle.remove("formattedSql"); + formatSql = (String) contentEle.remove(KEY_FORMAT_SQL); + sql = (String) contentEle.remove(KEY_SQL); int parseLen = PARESE_TITLE_LIST.size(); int slowLen = LAST_SLOW_TITLE_LIST.size(); int errLen = LAST_ERROR_TITLE_LIST.size(); @@ -233,11 +291,11 @@ public class DruidSqlDetailFrame extends JFrame { Entry entry = it.next(); String key = entry.getKey(); Object value = entry.getValue(); - for(int i=0;i> data) { + + /** + * 将表格添加到contentPanel对象内部。 + * + * @param contentPanel JPanel对象 + * @param 当前表格的标题 + * @param data 当前表格的数据 + */ + private void addTable(JPanel contentPanel, String title, ArrayList> data) { final JPanel content1 = new JPanel(); - content1.setLayout(new BorderLayout()); - content1.setBorder((TitledBorder)BorderFactory.createTitledBorder(title)); + content1.setLayout(new BorderLayout()); + content1.setBorder((TitledBorder) BorderFactory.createTitledBorder(title)); contentPanel.add(content1); - + ColumnData colData = TableDataProcessor.row2col(data); JTable table = new JTable(); DruidTableModel tableModel = new DruidTableModel(colData.getDatas()); table.setModel(tableModel); - + TableColumn col = table.getColumnModel().getColumn(0); col.setCellRenderer(new DruidTableCellRenderer()); - - final JTableHeader header1 = table.getTableHeader(); - content1.add(header1,BorderLayout.NORTH); - content1.add(table); + + final JTableHeader header1 = table.getTableHeader(); + content1.add(header1, BorderLayout.NORTH); + content1.add(table); } - + + /** + * 将各个界面添加到JFrame中 + * + * @param pane JFrame内部的Container对象 + */ private void addComponentsToPane(Container pane) { JScrollPane scrollPane = new JScrollPane(); JPanel contentPanel = new JPanel(); - contentPanel.setLayout(new GridLayout(0,1)); - - final JTextArea sqlField = new JTextArea(formatSql,15,20); - final JScrollPane content1 = new JScrollPane (sqlField); - - content1.setBorder((TitledBorder)BorderFactory.createTitledBorder("SQL语句")); - contentPanel.add(content1); - - addTable(contentPanel,"解析信息",parseData); - addTable(contentPanel,"上次慢查询信息",lastSlowData); - addTable(contentPanel,"上次错误查询信息",lastErrorData); - addTable(contentPanel,"其他信息",otherData); - + contentPanel.setLayout(new GridLayout(0, 1)); + + final JTextArea sqlField = new JTextArea(formatSql, 8, 20); + final JScrollPane content1 = new JScrollPane(sqlField); + + content1.setBorder((TitledBorder) BorderFactory.createTitledBorder("SQL语句")); + contentPanel.add(content1); + + addTable(contentPanel, "解析信息", parseData); + addTable(contentPanel, "上次慢查询信息", lastSlowData); + addTable(contentPanel, "上次错误查询信息", lastErrorData); + addTable(contentPanel, "其他信息", otherData); + scrollPane.setViewportView(contentPanel); - pane.add(scrollPane,BorderLayout.CENTER); + pane.add(scrollPane, BorderLayout.CENTER); } - + + /** + * 显示JFrame + */ private void start() { addComponentsToPane(getContentPane()); + setTitle("SQL:[" + sql + "]详情"); pack(); setSize(WIDTH, HEIGHT); - double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth(); - double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight(); - - setLocation( (int) (width - getWidth()) / 2, - (int) (height - getHeight()) / 2); + double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth(); + double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight(); + + setLocation((int) (width - getWidth()) / 2, (int) (height - getHeight()) / 2); setVisible(true); }