Source code: cor/gui/clp/JspmClassListPanel.java
1 /*-----------------------------------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (C) */
4 /* */
5 /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU */
6 /* General Public License as published by the Free Software Foundation; either version 2 of the */
7 /* License, or (at your option) any later version. */
8 /* */
9 /* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; */
10 /* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
11 /* PURPOSE. See the GNU General Public License for more details. */
12 /* */
13 /* You should have received a copy of the GNU General Public License along with this program; if */
14 /* not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
15 /* 02111-1307 USA */
16 /* */
17 /*-----------------------------------------------------------------------------------------------------*/
18 /* */
19 /* $Author: strand01 $ $Revision: 1.3 $ $Date: 2001/12/20 14:23:02 $ */
20 /* */
21 /*-----------------------------------------------------------------------------------------------------*/
22
23 package cor.gui.clp;
24
25 // Java classes
26 import java.awt.*;
27 import java.awt.event.*;
28 import java.util.*;
29
30 // Swing classes
31 import javax.swing.JTable;
32 import javax.swing.JLabel;
33 import javax.swing.JPanel;
34 import javax.swing.JScrollPane;
35 import javax.swing.tree.DefaultMutableTreeNode;
36 import javax.swing.table.DefaultTableModel;
37 import javax.swing.border.BevelBorder;
38
39 // Jspm classes
40 import com.jdk.*;
41 import cor.gui.*;
42
43 /**
44 * Class level property list panel
45 *
46 * This panel is divided into two parts. The upper part shows the message records from the JSPM event
47 * management database table and the lower part the actions corresponding to a selected message in the
48 * upper table.
49 *
50 * By selecting a row in either lists a dialog box will be displayed in which the user can change the
51 * values for the selected message or action.
52 *
53 * @author Steve Randall (strand012001@yahoo.com)
54 * @version 0.0.11
55 * @date 01/12/2001
56 */
57 public class JspmClassListPanel extends JPanel implements MouseListener
58 {
59 /**
60 * Jspm Core database connection.
61 */
62 private JspmCoreDb jspmCoreDb = null;
63
64 /**
65 * Message table
66 */
67 private JTable clpTable;
68
69 /**
70 * Action table
71 */
72 private JTable ilpTable;
73
74 /**
75 * Message table model
76 */
77 private DefaultTableModel clpTableModel = null;
78
79 /**
80 * Action table model
81 */
82 private DefaultTableModel ilpTableModel = null;
83
84 /**
85 * Jspm Table renderer
86 */
87 private JspmTableCellRenderer tableRenderer = null;
88
89 /**
90 * Table panel
91 */
92 private JspmVSplitPane clpSplitPanel = null;
93
94 /**
95 * ILP panel
96 */
97 private JPanel clpMainPanel = null;
98
99 /**
100 * ILP panel
101 */
102 private JPanel ilpMainPanel = null;
103
104 /**
105 * Table font
106 */
107 private Font font = new Font( "Ariel", Font.PLAIN, 11 );
108
109 /**
110 * Class level property label
111 */
112 private JLabel clpLabel = null;
113
114 /**
115 * Class level property label
116 */
117 private JLabel ilpLabel = null;
118
119 /**
120 * Constructor
121 */
122 public JspmClassListPanel( JspmCore jspmCore )
123 {
124 jspmCoreDb = jspmCore.getDbConnection();
125
126 setLayout(new BorderLayout());
127 setPreferredSize( new Dimension( 700, JspmConstants.JGE.maxY ) );
128
129 JspmVSplitPane splitPane = new JspmVSplitPane( createClpPanel(), createIlpPanel() );
130
131 add( splitPane );
132 }
133
134 /**
135 * Creates the message list
136 */
137 private JPanel createClpPanel()
138 {
139 final String[] names = { "Name", "Group", "Length", "Type", "Key", "Required", "Null", "Default" };
140 final Object[][] data = {};
141
142 // Create a model of the data.
143 clpTableModel = new DefaultTableModel(data, (Object[])names) {
144
145 // All cells are not editable
146 public boolean isCellEditable(int row, int col) {
147 return false;
148 }
149 };
150
151 JspmTableSorter sorter = new JspmTableSorter( clpTableModel );
152 clpTable = new JTable( sorter );
153 clpTable.setFont( font );
154 clpTable.addMouseListener( this );
155 clpTable.getTableHeader().setFont( font );
156 sorter.addMouseListenerToHeaderInTable(clpTable);
157
158 tableRenderer = new JspmTableCellRenderer( names.length, font );
159 tableRenderer.setHorizontalAlignment( JLabel.RIGHT );
160 tableRenderer.setHeader( names );
161 clpTable.setDefaultRenderer( clpTable.getColumnClass(0), tableRenderer );
162
163 // Define the scollpanel for the table
164 JScrollPane clpTablePanel = new JScrollPane( clpTable );
165 clpTablePanel.setMinimumSize( new Dimension( clpTablePanel.getWidth(), 200 ) );
166
167 clpMainPanel = new JPanel();
168 clpMainPanel.setLayout( new BorderLayout() );
169
170 clpLabel = new JLabel( " Class Level Property Definitions" );
171 clpLabel.setFont( font );
172
173 clpMainPanel.add( clpLabel, BorderLayout.NORTH );
174 clpMainPanel.add( clpTablePanel, BorderLayout.CENTER );
175
176 return clpMainPanel;
177 }
178
179 /**
180 * Creates the action list
181 */
182 private JPanel createIlpPanel()
183 {
184 final String[] names = { "Name", "Group", "Length", "Type", "Key", "Required", "Null", "Default" };
185 final Object[][] data = {};
186
187 // Create a model of the data.
188 ilpTableModel = new DefaultTableModel( data, (Object[])names) {
189
190 // All cells are not editable
191 public boolean isCellEditable(int row, int col) {
192 return false;
193 }
194 };
195
196 JspmTableSorter sorter = new JspmTableSorter( ilpTableModel );
197
198 ilpTable = new JTable( sorter );
199 ilpTable.setFont( font );
200 ilpTable.getTableHeader().setFont( font );
201 ilpTable.addMouseListener( this );
202 sorter.addMouseListenerToHeaderInTable(ilpTable);
203
204 tableRenderer.setHeader( names );
205 tableRenderer.setHorizontalAlignment( JLabel.RIGHT );
206 ilpTable.setDefaultRenderer( ilpTable.getColumnClass(0), tableRenderer );
207
208 // Define the scollpanel for the table
209 JScrollPane ilpTablePanel = new JScrollPane( ilpTable );
210 ilpTablePanel.setMinimumSize( new Dimension( ilpTable.getWidth(), 200) );
211
212 ilpMainPanel = new JPanel( new BorderLayout() );
213
214 ilpLabel = new JLabel( " Instance Level Property Definitions" );
215 ilpLabel.setFont( font );
216
217 ilpMainPanel.add( ilpLabel, BorderLayout.NORTH );
218 ilpMainPanel.add( ilpTablePanel, BorderLayout.CENTER );
219
220 return ilpMainPanel;
221 }
222
223 /**
224 * Clears the clp table
225 */
226 private void clearClpTable()
227 {
228 int rows = 0;
229
230 if((rows = clpTableModel.getRowCount()) > 0) {
231 for(int i = 0; i < rows; i++)
232 clpTableModel.removeRow(0);
233 }
234 }
235
236 /**
237 * Clears the ilp table
238 */
239 private void clearIlpTable()
240 {
241 int rows = 0;
242
243 if((rows = ilpTableModel.getRowCount()) > 0) {
244 for(int i = 0; i < rows; i++)
245 ilpTableModel.removeRow(0);
246 }
247 }
248
249 /**
250 * Adds a row to the object info table
251 */
252 public void addClp( Vector clps )
253 {
254 for( int i = 0; i < clps.size(); i++ ) {
255
256 Object row[] = new Object[8];
257 row[0] = ( ( JspmClpDefinition ) clps.elementAt(i) ).clpName;
258 row[1] = ( ( JspmClpDefinition ) clps.elementAt(i) ).clpGroup;
259 row[2] = ""+( ( JspmClpDefinition ) clps.elementAt(i) ).clpLength;
260 row[3] = ""+( ( JspmClpDefinition ) clps.elementAt(i) ).clpType;
261 row[4] = ""+( ( JspmClpDefinition ) clps.elementAt(i) ).isKey;
262 row[5] = ""+( ( JspmClpDefinition ) clps.elementAt(i) ).isRequired;
263 row[6] = ""+( ( JspmClpDefinition ) clps.elementAt(i) ).isNull;
264 row[7] = ( ( JspmClpDefinition ) clps.elementAt(i) ).value;
265 clpTableModel.addRow((Object[]) row);
266 }
267
268 clpMainPanel.remove( clpLabel );
269
270 clpLabel = new JLabel( " Class Level Property Definitions:"+clps.size() );
271 clpLabel.setFont( font );
272 clpMainPanel.add( clpLabel, BorderLayout.NORTH );
273 clpMainPanel.validate();
274 }
275
276 /**
277 * Adds a row to the object info table
278 */
279 public void addIlp( Vector ilps )
280 {
281 for( int i = 0; i < ilps.size(); i++ ) {
282
283 Object row[] = new Object[8];
284 row[0] = ( ( JspmIlpDefinition ) ilps.elementAt(i) ).ilpName;
285 row[1] = ( ( JspmIlpDefinition ) ilps.elementAt(i) ).ilpGroup;
286 row[2] = ""+( ( JspmIlpDefinition ) ilps.elementAt(i) ).ilpLength;
287 row[3] = ""+( ( JspmIlpDefinition ) ilps.elementAt(i) ).ilpType;
288 row[4] = ""+( ( JspmIlpDefinition ) ilps.elementAt(i) ).isKey;
289 row[5] = ""+( ( JspmIlpDefinition ) ilps.elementAt(i) ).isRequired;
290 row[6] = ""+( ( JspmIlpDefinition ) ilps.elementAt(i) ).isNull;
291 row[7] = ( ( JspmIlpDefinition ) ilps.elementAt(i) ).defaultValue;
292 ilpTableModel.addRow((Object[]) row);
293
294 }
295
296 ilpMainPanel.remove( ilpLabel );
297
298 ilpLabel = new JLabel( " Instance Level Property Definitions:"+ilps.size() );
299 ilpLabel.setFont( font );
300 ilpMainPanel.add( ilpLabel, BorderLayout.NORTH );
301 ilpMainPanel.validate();
302 }
303
304 /**
305 * Removes all objects from the table.
306 */
307 public void removeAllObjects() {
308
309 clearClpTable();
310 clearIlpTable();
311
312 }
313
314 /**
315 * Process single/double click mouse events.
316 *
317 * This method will process single and double clicks on one of the rows in either the message
318 * or the action table. The processing is as follows:
319 *
320 * - single click on message table will display the actions belonging to this message
321 * in the action list.
322 * - double click on a message table row will display the message dialog box.
323 * - single click on a action in the action list won't do anything.
324 * - double click on a action in the action list will just select (hilite) the corresponding
325 * action.
326 *
327 * @param event (MouseEvent) mouse event.
328 */
329 public void mouseClicked( MouseEvent event )
330 {
331 if( event.getClickCount() == 1 && event.getComponent() == clpTable ) {
332
333 clearIlpTable();
334 int row = clpTable.getSelectedRow();
335 int msgid = ((Integer)clpTableModel.getValueAt( row, 0 )).intValue();
336 // addIlp( jspmCoreDb.getIlp() );
337
338 } else if( event.getClickCount() == 2 && event.getComponent() == clpTable ) {
339
340 int row = clpTable.getSelectedRow();
341 Integer imsgid = (Integer)clpTableModel.getValueAt( row, 0 );
342 int msgid = imsgid.intValue();
343
344 // JspmEvtMessageDialog msgDialog = new JspmEvtMessageDialog( msgid, jspmCoreDb );
345
346 } else if( event.getClickCount() == 2 && event.getComponent() == ilpTable ) {
347
348 int row = ilpTable.getSelectedRow();
349 int actid = ((Integer)ilpTableModel.getValueAt( row, 0 )).intValue();
350
351 // JspmEvtActionDialog actDialog = new JspmEvtActionDialog( actid, jspmCoreDb );
352
353 }
354 }
355
356 /**
357 * Process mouse pressed events.
358 *
359 * Nothing has to be done here.
360 *
361 * @param event (MouseEvent) mouse event.
362 */
363 public void mousePressed( MouseEvent event ) {}
364
365 /**
366 * Process mouse released events.
367 *
368 * Nothing has to be done here.
369 *
370 * @param event (MouseEvent) mouse event.
371 */
372 public void mouseReleased( MouseEvent event ) {}
373
374 /**
375 * Process mouse entered events.
376 *
377 * Nothing has to be done here.
378 *
379 * @param event (MouseEvent) mouse event.
380 */
381 public void mouseEntered( MouseEvent event ) {}
382
383 /**
384 * Process mouse exited events.
385 *
386 * Nothing has to be done here.
387 *
388 * @param event (MouseEvent) mouse event.
389 */
390 public void mouseExited( MouseEvent event ) {}
391 }