001 package users.stdforms;
002
003 import sale.*;
004 import util.swing.*;
005 import util.swing.AbstractTableModel;
006 import users.User;
007 import users.UserManager;
008 import users.swing.JUserTable;
009
010 import java.util.Comparator;
011 import javax.swing.*;
012 import javax.swing.table.*;
013
014 /**
015 * A FormSheet displaying the contents of a {@link UserManager}.
016 *
017 * @author Thomas Medack
018 * @author Andreas Bartho
019 * @version 3.0 13/06/2001
020 * @since v3.0
021 */
022 public class UserTableFormSheet extends FormSheet {
023
024 /**
025 * Reference to the currently selected index.
026 *
027 * @serial
028 */
029 private int[] m_anSelection = new int[] {
030 -1};
031
032 /**
033 * The {@link TableModel} of the table displayed.
034 */
035 private transient util.swing.AbstractTableModel m_atmModel;
036
037 /**
038 * The {@link TableColumnModel} of the table displayed.
039 */
040 private transient TableColumnModel m_tcmModel;
041
042 /**
043 * The displayed {@link JTable}.
044 */
045 private transient JTable m_jtTable;
046
047 /**
048 * The {@link ListSelectionModel} of the table displayed.
049 */
050 private transient ListSelectionModel m_lsmModel;
051
052 /**
053 * The UserManager from which the table is created.
054 */
055 private UserManager m_umMan;
056
057 /**
058 * The {@link Gate} at which the FormSheet is being displayed.
059 *
060 * @serial
061 */
062 private UIGate m_uigGate;
063
064 private transient JComponent m_jcComp;
065
066 /**
067 * Create a new UserTableFormSheet. The "{@link FormSheet#waitResponse}" property will default
068 * to true.
069 *
070 * @param sCaption the FormSheet's caption.
071 * @param um the UserManager which will be displayed
072 * @param c a JComponent which can be optionally displayed with the JUserTable. The
073 * JComponent of the FormSheet will be a JPanel. The JPanels contains a JSplitPane.
074 * The first JComponent of the JPanel is the JUserTable and the second is this JComponent.
075 * If it is null, only the JUserTable will be displayed.
076 * @param uigGate the Gate at which the FormSheet is displayed.
077 * @param cmp a comparator defining the order in which to display the individual users. If <code>null</code>
078 * the Userrecords will be ordered by their names.
079 * @param ted a TableEntryDescriptor that can split the UserManager's entries into a table's cells.
080 * Must not be <code>null</code>.
081 */
082 public UserTableFormSheet(String sCaption, UserManager um, JComponent c, UIGate uigGate,
083 final Comparator cmp, final TableEntryDescriptor ted) {
084
085 super(sCaption, (JComponent)null, true);
086 setGate(uigGate);
087
088 m_umMan = um;
089 m_jcComp = c;
090
091 addContentCreator(new FormSheetContentCreator() {
092 protected void createFormSheetContent(FormSheet fs) {
093 JUserTable jut = new JUserTable(m_umMan, cmp, ted);
094
095 if (m_jcComp == null) {
096 fs.setComponent(new JScrollPane(jut));
097 } else {
098 JSplitPane p = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(jut), m_jcComp);
099 p.setDividerSize(4);
100 p.setDividerLocation(200);
101
102 fs.setComponent(p);
103 }
104
105 ((UserTableFormSheet)fs).m_atmModel = (util.swing.AbstractTableModel)jut.getModel(); ((
106 UserTableFormSheet)fs).m_lsmModel = jut.getSelectionModel(); ((UserTableFormSheet)fs).
107 m_tcmModel = jut.getColumnModel();
108
109 jut.setSelectionObserver(((UserTableFormSheet)fs).m_anSelection);
110 m_jtTable = jut;
111 }
112 });
113 }
114
115 /**
116 * Gets the table.
117 *
118 * @override Never
119 */
120 public JTable getTable() {
121 return m_jtTable;
122 }
123
124 /**
125 * Changes the {@link TableModel} of a table.
126 * @param the new TableModel
127 */
128 public void setTableModel(AbstractTableModel tm) {
129 m_atmModel.fireTableDataChanged(); //unselect a possibly selected record
130 if (tm instanceof TableSorter) {
131 m_atmModel = tm;
132 } else {
133 m_atmModel = new TableSorter(tm);
134 }
135 m_jtTable.setModel(m_atmModel);
136
137 ((JAbstractTable)m_jtTable).initialize();
138 }
139
140 /**
141 * Get the table's source.
142 *
143 * @override Never
144 * @return the UserManager from which the table was built. The class of the returned UserManager
145 * is <code>Object</code> to keep consistency with {@link data.stdforms.SingleTableFormSheet}.
146 */
147 public Object getTableSource() {
148 return m_umMan;
149 }
150
151 /**
152 * Set the gate at which to display the FormSheet. This will also move the FormSheet to that gate, i.e. make
153 * the FormSheet the FormSheet of the given gate.
154 *
155 * @param uigGate the new Gate.
156 *
157 * @override Never
158 *
159 * @see UIGate#setFormSheet
160 */
161 public void setGate(UIGate uigGate) {
162 if (m_uigGate != null) {
163 m_uigGate.setFormSheet(null);
164 }
165
166 m_uigGate = uigGate;
167
168 if (m_uigGate != null) {
169 m_uigGate.setFormSheet(this);
170 }
171 }
172
173 /**
174 * Get the Gate this FormSheet is currently being displayed at.
175 *
176 * @override Never
177 */
178 public UIGate getGate() {
179 return m_uigGate;
180 }
181
182 /**
183 * Get the record currently selected.
184 *
185 * <p>The actual class of the record depends on the concrete type of
186 * TableModel used. See the TableModel's <code>getRecord()</code> method for
187 * details.
188 */
189 public User getSelectedRecord() {
190 return (User)m_atmModel.getRecord(m_anSelection[0]);
191 }
192
193 /**
194 * Get the ListSelectionModel of the JUserTable which is displayed.
195 */
196 public ListSelectionModel getSelectionModel() {
197 return m_lsmModel;
198 }
199
200 /**
201 * Get the TableColumnModel of the JUserTable which is displayed.
202 */
203 public TableColumnModel getColumnModel() {
204 return m_tcmModel;
205 }
206 }