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