001 package log.stdforms; 002 003 import sale.FormSheet; 004 import sale.FormSheetContentCreator; 005 import util.swing.AbstractTableModel; 006 import util.swing.TableEntryDescriptor; 007 import log.LogEntry; 008 import log.LogInputStream; 009 import log.swing.DefaultLogEntryTED; 010 import log.swing.JLogTable; 011 import log.LogFileContent; 012 013 import java.util.Comparator; 014 import javax.swing.JComponent; 015 import javax.swing.JScrollPane; 016 import javax.swing.*; 017 import javax.swing.table.*; 018 import util.swing.*; 019 020 /** 021 * FormSheet displaying the contents of a log file. 022 * 023 * <p>The FormSheet will contain a {@link JLogTable} containing one line per log entry.</p> 024 * 025 * @author Steffen Zschaler 026 * @version 2.0 27/08/1999 027 * @since v2.0 028 */ 029 public class LogTableForm extends FormSheet { 030 031 /** 032 * ID for serialization. 033 */ 034 private static final long serialVersionUID = -3464265240556952223L; 035 036 /** 037 * Selection observer storing the index of the selected record. 038 * 039 * @serial 040 */ 041 private int[] m_anSelection = { 042 -1}; 043 044 /** 045 * The model of underlying the table that is being displayed. 046 */ 047 private transient AbstractTableModel m_atmModel; 048 049 private LogFileContent m_lfcContent; 050 051 /** 052 * The displayed {@link JTable}. 053 */ 054 private transient JTable m_jtTable; 055 056 /** 057 * Create a new LogTableForm. LogEntries are ordered by their log dates and displayed using the 058 * {@link DefaultLogEntryTED}. 059 * 060 * @param sCaption the FormSheet's caption. 061 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 062 */ 063 public LogTableForm(String sCaption, LogInputStream lis) { 064 this(sCaption, lis, null, new DefaultLogEntryTED()); 065 } 066 067 /** 068 * Create a new LogTableForm. LogEntries are ordered by their log dates. 069 * 070 * @param sCaption the FormSheet's caption. 071 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 072 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 073 * columns in a table. 074 */ 075 public LogTableForm(String sCaption, LogInputStream lis, TableEntryDescriptor ted) { 076 this(sCaption, lis, null, ted); 077 } 078 079 /** 080 * Create a new LogTableForm. LogEntries are displayed using the {@link DefaultLogEntryTED}. 081 * 082 * @param sCaption the FormSheet's caption. 083 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 084 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 085 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 086 */ 087 public LogTableForm(String sCaption, LogInputStream lis, Comparator<LogEntry> cmp) { 088 this(sCaption, lis, cmp, new DefaultLogEntryTED()); 089 } 090 091 /** 092 * Create a new LogTableForm. 093 * 094 * @param sCaption the FormSheet's caption. 095 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 096 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 097 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 098 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 099 * columns in a table. 100 */ 101 public LogTableForm(String sCaption, LogInputStream lis, Comparator<LogEntry> cmp, TableEntryDescriptor ted) { 102 this(sCaption, lis, cmp, ted, true); 103 } 104 105 /** 106 * Create a new LogTableForm. 107 * 108 * @param sCaption the FormSheet's caption. 109 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 110 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 111 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 112 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 113 * columns in a table. 114 * @param fWaitResponse the initial value of the waitResponse property. If true, 115 * {@link sale.Display#setFormSheet} will block until the FormSheet is closed. 116 */ 117 public LogTableForm(String sCaption, final LogInputStream lis, final Comparator<LogEntry> cmp, 118 final TableEntryDescriptor ted, boolean fWaitResponse) { 119 this(sCaption, new LogFileContent(lis), cmp, ted, fWaitResponse); 120 } 121 122 123 public LogTableForm(String sCaption, final LogFileContent lfc, final Comparator<LogEntry> cmp, 124 final TableEntryDescriptor ted, boolean fWaitResponse) { 125 super(sCaption, (JComponent)null, fWaitResponse); 126 m_lfcContent = lfc; 127 addContentCreator(new FormSheetContentCreator() { 128 private static final long serialVersionUID = -6240009092780870600L; 129 130 protected void createFormSheetContent(FormSheet fs) { 131 JLogTable jlt = new JLogTable(m_lfcContent, cmp, ted); 132 m_jtTable = jlt; 133 fs.setComponent(new JScrollPane(jlt)); 134 135 jlt.setSelectionObserver(m_anSelection); 136 m_atmModel = (AbstractTableModel)jlt.getModel(); 137 } 138 }); 139 } 140 141 142 /** 143 * Get the currently selected log entry. 144 */ 145 public LogEntry getSelectedEntry() { 146 return (LogEntry)m_atmModel.getRecord(m_anSelection[0]); 147 } 148 149 /** 150 * Same as {@link #getSelectedEntry}, but return type is Object. 151 * Added for naming consistency within the framework. 152 * @return the currently selected record. 153 */ 154 public Object getSelectedRecord() { 155 return m_atmModel.getRecord(m_anSelection[0]); 156 } 157 158 /** 159 * Gets the table. 160 * 161 * @override Never 162 */ 163 public JTable getTable() { 164 return m_jtTable; 165 } 166 167 /** 168 * Changes the {@link TableModel} of a table. 169 * @param tm the new TableModel 170 */ 171 public void setTableModel(AbstractTableModel tm) { 172 m_atmModel.fireTableDataChanged(); //unselect a possibly selected record 173 if (tm instanceof TableSorter) { 174 m_atmModel = tm; 175 } else { 176 m_atmModel = new TableSorter(tm); 177 } 178 m_jtTable.setModel(m_atmModel); 179 ((JAbstractTable)m_jtTable).initialize(); 180 } 181 }