1 7 package org.jahia.sqlprofiler.gui; 8 9 import java.awt.BorderLayout ; 10 import java.text.MessageFormat ; 11 import java.util.Date ; 12 import javax.swing.BorderFactory ; 13 import javax.swing.JEditorPane ; 14 import javax.swing.JPanel ; 15 import javax.swing.JScrollPane ; 16 import javax.swing.JTable ; 17 import javax.swing.ListSelectionModel ; 18 import javax.swing.event.ListSelectionEvent ; 19 import javax.swing.event.ListSelectionListener ; 20 import org.apache.log4j.Category; 21 22 27 class DetailPanel 28 extends JPanel 29 implements ListSelectionListener 30 { 31 32 private static final Category LOG = 33 Category.getInstance(DetailPanel.class); 34 35 36 private static final MessageFormat FORMATTER = new MessageFormat ( 37 "<b>Time:</b> <code>{0,time,medium}</code>" + 38 " <b>Priority:</b> <code>{1}</code>" + 39 " <b>Thread:</b> <code>{2}</code>" + 40 " <b>NDC:</b> <code>{3}</code>" + 41 "<br><b>Category:</b> <code>{4}</code>" + 42 "<br><b>Location:</b> <code>{5}</code>" + 43 "<br><b>Message:</b>" + 44 "{6}<br>" + 45 "<b>Throwable:</b>" + 46 "<pre>{7}</pre>"); 47 48 49 private final LoggerTableModel mModel; 50 51 private final JEditorPane mDetails; 52 53 59 DetailPanel(JTable aTable, final LoggerTableModel aModel) { 60 mModel = aModel; 61 setLayout(new BorderLayout ()); 62 setBorder(BorderFactory.createTitledBorder("Details: ")); 63 64 mDetails = new JEditorPane (); 65 mDetails.setEditable(false); 66 mDetails.setContentType("text/html"); 67 add(new JScrollPane (mDetails), BorderLayout.CENTER); 68 69 final ListSelectionModel rowSM = aTable.getSelectionModel(); 70 rowSM.addListSelectionListener(this); 71 } 72 73 74 public void valueChanged(ListSelectionEvent aEvent) { 75 if (aEvent.getValueIsAdjusting()) { 77 return; 78 } 79 80 final ListSelectionModel lsm = (ListSelectionModel ) aEvent.getSource(); 81 if (lsm.isSelectionEmpty()) { 82 mDetails.setText("Nothing selected"); 83 } else { 84 final int selectedRow = lsm.getMinSelectionIndex(); 85 final EventDetails e = mModel.getEventDetails(selectedRow); 86 final Object [] args = 87 { 88 new Date (e.getTimeStamp()), 89 e.getPriority(), 90 escape(e.getThreadName()), 91 escape(e.getNDC()), 92 escape(e.getCategoryName()), 93 escape(e.getLocationDetails()), 94 escape(e.getMessage()), 95 escape(getThrowableStrRep(e)) 96 }; 97 mDetails.setText(FORMATTER.format(args)); 98 mDetails.setCaretPosition(0); 99 } 100 } 101 102 106 112 private static String getThrowableStrRep(EventDetails aEvent) { 113 final String [] strs = aEvent.getThrowableStrRep(); 114 if (strs == null) { 115 return null; 116 } 117 118 final StringBuffer sb = new StringBuffer (); 119 for (int i = 0; i < strs.length; i++) { 120 sb.append(strs[i]).append("\n"); 121 } 122 123 return sb.toString(); 124 } 125 126 132 private String escape(String aStr) { 133 if (aStr == null) { 134 return null; 135 } 136 137 final StringBuffer buf = new StringBuffer (); 138 for (int i = 0; i < aStr.length(); i++) { 139 char c = aStr.charAt(i); 140 switch (c) { 141 case '<': 142 buf.append("<"); 143 break; 144 case '>': 145 buf.append(">"); 146 break; 147 case '\"': 148 buf.append("""); 149 break; 150 case '&': 151 buf.append("&"); 152 break; 153 default: 154 buf.append(c); 155 break; 156 } 157 } 158 return buf.toString(); 159 } 160 } 161 | Popular Tags |