1 8 package org.jahia.sqlprofiler.gui; 9 10 import javax.swing.JPanel ; 11 import javax.swing.event.ListSelectionListener ; 12 import org.apache.log4j.Category; 13 import java.text.MessageFormat ; 14 import javax.swing.JEditorPane ; 15 import javax.swing.JTable ; 16 import java.awt.BorderLayout ; 17 import javax.swing.BorderFactory ; 18 import javax.swing.JScrollPane ; 19 import javax.swing.ListSelectionModel ; 20 import javax.swing.event.ListSelectionEvent ; 21 import org.jahia.sqlprofiler.QueryEntry; 22 import java.util.Date ; 23 24 33 34 class ProfileDetailsPanel extends JPanel 35 implements ListSelectionListener { 36 37 private static final Category LOG = 38 Category.getInstance(ProfileDetailsPanel.class); 39 40 41 private static final MessageFormat FORMATTER = new MessageFormat ( 42 "<b>Time:</b> <code>{0,time,medium}</code>" + 43 " <b>Elapsed time:</b> <code>{1,time,medium}</code>" + 44 " <b>Category:</b> <code>{2}</code>" + 45 " <b>Connection ID:</b> <code>{3}</code>" + 46 "<br><b>Prepared SQL:</b><br>" + 47 "{4}<br>" + 48 "<b>SQL Statement:</b><br>" + 49 "{5}"); 50 51 52 private final ProfileStatementTableModel mModel; 53 54 private final JEditorPane mDetails; 55 56 62 ProfileDetailsPanel(JTable aTable, final ProfileStatementTableModel aModel) { 63 mModel = aModel; 64 setLayout(new BorderLayout ()); 65 setBorder(BorderFactory.createTitledBorder("Details: ")); 66 67 mDetails = new JEditorPane (); 68 mDetails.setEditable(false); 69 mDetails.setContentType("text/html"); 70 add(new JScrollPane (mDetails), BorderLayout.CENTER); 71 72 final ListSelectionModel rowSM = aTable.getSelectionModel(); 73 rowSM.addListSelectionListener(this); 74 } 75 76 77 public void valueChanged(ListSelectionEvent aEvent) { 78 if (aEvent.getValueIsAdjusting()) { 80 return; 81 } 82 83 final ListSelectionModel lsm = (ListSelectionModel ) aEvent.getSource(); 84 if (lsm.isSelectionEmpty()) { 85 mDetails.setText("Nothing selected"); 86 } else { 87 final int selectedRow = lsm.getMinSelectionIndex(); 88 final QueryEntry queryEntry = mModel.getStatementDetails(selectedRow); 89 final Object [] args = { 90 new Date (queryEntry.getTime()), 91 new Long (queryEntry.getElapsedTime()), 92 escape(queryEntry.getCategory()), 93 escape(queryEntry.getConnectionID()), 94 escape(queryEntry.getPreparedSQL()), 95 escape(queryEntry.getSqlStatement()) 96 }; 97 mDetails.setText(FORMATTER.format(args)); 98 mDetails.setCaretPosition(0); 99 } 100 } 101 102 106 112 private String escape(String aStr) { 113 if (aStr == null) { 114 return null; 115 } 116 117 final StringBuffer buf = new StringBuffer (); 118 for (int i = 0; i < aStr.length(); i++) { 119 char c = aStr.charAt(i); 120 switch (c) { 121 case '<': 122 buf.append("<"); 123 break; 124 case '>': 125 buf.append(">"); 126 break; 127 case '\"': 128 buf.append("""); 129 break; 130 case '&': 131 buf.append("&"); 132 break; 133 default: 134 buf.append(c); 135 break; 136 } 137 } 138 return buf.toString(); 139 } 140 } 141 | Popular Tags |