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 * Selection observer storing the index of the selected record. 033 * 034 * @serial 035 */ 036 private int[] m_anSelection = { 037 -1}; 038 039 /** 040 * The model of underlying the table that is being displayed. 041 */ 042 private transient AbstractTableModel m_atmModel; 043 044 private LogFileContent m_lfcContent; 045 046 /** 047 * The displayed {@link JTable}. 048 */ 049 private transient JTable m_jtTable; 050 051 /** 052 * Create a new LogTableForm. LogEntries are ordered by their log dates and displayed using the 053 * {@link DefaultLogEntryTED}. 054 * 055 * @param sCaption the FormSheet's caption. 056 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 057 */ 058 public LogTableForm(String sCaption, LogInputStream lis) { 059 this(sCaption, lis, null, new DefaultLogEntryTED()); 060 } 061 062 /** 063 * Create a new LogTableForm. LogEntries are ordered by their log dates. 064 * 065 * @param sCaption the FormSheet's caption. 066 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 067 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 068 * columns in a table. 069 */ 070 public LogTableForm(String sCaption, LogInputStream lis, TableEntryDescriptor ted) { 071 this(sCaption, lis, null, ted); 072 } 073 074 /** 075 * Create a new LogTableForm. LogEntries are displayed using the {@link DefaultLogEntryTED}. 076 * 077 * @param sCaption the FormSheet's caption. 078 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 079 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 080 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 081 */ 082 public LogTableForm(String sCaption, LogInputStream lis, Comparator cmp) { 083 this(sCaption, lis, cmp, new DefaultLogEntryTED()); 084 } 085 086 /** 087 * Create a new LogTableForm. 088 * 089 * @param sCaption the FormSheet's caption. 090 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 091 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 092 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 093 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 094 * columns in a table. 095 */ 096 public LogTableForm(String sCaption, LogInputStream lis, Comparator cmp, TableEntryDescriptor ted) { 097 this(sCaption, lis, cmp, ted, true); 098 } 099 100 /** 101 * Create a new LogTableForm. 102 * 103 * @param sCaption the FormSheet's caption. 104 * @param lis the LogInputStream that contains the LogEntries to be displayed. May be filtered. 105 * @param cmp a Comparator that defines the order the LogEntries appear in. May be <code>null</code> in 106 * which case LogEntries will be sorted by the {@link LogEntry#getLogDate log date}. 107 * @param ted a TableEntryDescriptor defining how LogEntries are to be displayed with respect to rows and 108 * columns in a table. 109 * @param fWaitResponse the initial value of the waitResponse property. If true, 110 * {@link sale.Display#setFormSheet} will block until the FormSheet is closed. 111 */ 112 public LogTableForm(String sCaption, final LogInputStream lis, final Comparator cmp, 113 final TableEntryDescriptor ted, boolean fWaitResponse) { 114 this(sCaption, new LogFileContent(lis), cmp, ted, fWaitResponse); 115 } 116 117 118 public LogTableForm(String sCaption, final LogFileContent lfc, final Comparator cmp, 119 final TableEntryDescriptor ted, boolean fWaitResponse) { 120 super(sCaption, (JComponent)null, fWaitResponse); 121 m_lfcContent = lfc; 122 addContentCreator(new FormSheetContentCreator() { 123 protected void createFormSheetContent(FormSheet fs) { 124 JLogTable jlt = new JLogTable(m_lfcContent, cmp, ted); 125 m_jtTable = jlt; 126 fs.setComponent(new JScrollPane(jlt)); 127 128 jlt.setSelectionObserver(m_anSelection); 129 m_atmModel = (AbstractTableModel)jlt.getModel(); 130 } 131 }); 132 } 133 134 135 /** 136 * Get the currently selected log entry. 137 */ 138 public LogEntry getSelectedEntry() { 139 return (LogEntry)m_atmModel.getRecord(m_anSelection[0]); 140 } 141 142 /** 143 * Same as {@link #getSelectedEntry}, but return type is Object. 144 * Added for naming consistency within the framework. 145 * @return the currently selected record. 146 */ 147 public Object getSelectedRecord() { 148 return m_atmModel.getRecord(m_anSelection[0]); 149 } 150 151 /** 152 * Gets the table. 153 * 154 * @override Never 155 */ 156 public JTable getTable() { 157 return m_jtTable; 158 } 159 160 /** 161 * Changes the {@link TableModel} of a table. 162 * @param the new TableModel 163 */ 164 public void setTableModel(AbstractTableModel tm) { 165 m_atmModel.fireTableDataChanged(); //unselect a possibly selected record 166 if (tm instanceof TableSorter) { 167 m_atmModel = tm; 168 } else { 169 m_atmModel = new TableSorter(tm); 170 } 171 m_jtTable.setModel(m_atmModel); 172 ((JAbstractTable)m_jtTable).initialize(); 173 } 174 }