3 The file is used to create, update SystemTable of MSA/MBD file
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 package org
.tianocore
.frameworkwizard
.module
.ui
;
17 import java
.awt
.Dimension
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ComponentEvent
;
20 import java
.awt
.event
.MouseEvent
;
21 import java
.util
.Vector
;
23 import javax
.swing
.JButton
;
24 import javax
.swing
.JPanel
;
25 import javax
.swing
.JScrollPane
;
26 import javax
.swing
.JTable
;
27 import javax
.swing
.ListSelectionModel
;
28 import javax
.swing
.event
.ListSelectionEvent
;
30 import org
.tianocore
.SystemTableUsage
;
31 import org
.tianocore
.SystemTablesDocument
;
32 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
33 import org
.tianocore
.SystemTablesDocument
.SystemTables
;
34 import org
.tianocore
.SystemTablesDocument
.SystemTables
.SystemTableCNames
;
35 import org
.tianocore
.frameworkwizard
.common
.DataType
;
36 import org
.tianocore
.frameworkwizard
.common
.IDefaultTableModel
;
37 import org
.tianocore
.frameworkwizard
.common
.Log
;
38 import org
.tianocore
.frameworkwizard
.common
.Tools
;
39 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
40 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
41 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
42 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SystemTables
.SystemTablesIdentification
;
43 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SystemTables
.SystemTablesVector
;
44 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.SystemTablesDlg
;
47 The class is used to create, update SystemTable of MSA/MBD file
48 It extends IInternalFrame
53 public class ModuleSystemTables
extends IInternalFrame
{
56 /// Define class Serial Version UID
58 private static final long serialVersionUID
= 7488769180379442276L;
61 //Define class members
63 private JPanel jContentPane
= null;
65 private JButton jButtonAdd
= null;
67 private JButton jButtonRemove
= null;
69 private JButton jButtonUpdate
= null;
71 private JScrollPane jScrollPane
= null;
73 private JScrollPane jScrollPaneTable
= null;
75 private JTable jTable
= null;
80 private OpeningModuleType omt
= null;
82 private ModuleSurfaceArea msa
= null;
84 private SystemTablesDocument
.SystemTables systemTables
= null;
86 private SystemTablesIdentification id
= null;
88 private SystemTablesVector vid
= new SystemTablesVector();
90 private IDefaultTableModel model
= null;
92 private int selectedRow
= -1;
94 private IFrame parentFrame
= null;
97 This method initializes jButtonAdd
99 @return javax.swing.JButton jButtonAdd
102 private JButton
getJButtonAdd() {
103 if (jButtonAdd
== null) {
104 jButtonAdd
= new JButton();
105 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 90, 20));
106 jButtonAdd
.setText("Add");
107 jButtonAdd
.addActionListener(this);
108 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(90, 20));
114 This method initializes jButtonRemove
116 @return javax.swing.JButton jButtonRemove
119 private JButton
getJButtonRemove() {
120 if (jButtonRemove
== null) {
121 jButtonRemove
= new JButton();
122 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 90, 20));
123 jButtonRemove
.setText("Remove");
124 jButtonRemove
.addActionListener(this);
125 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(90, 20));
127 return jButtonRemove
;
131 This method initializes jButtonUpdate
133 @return javax.swing.JButton jButtonUpdate
136 private JButton
getJButtonUpdate() {
137 if (jButtonUpdate
== null) {
138 jButtonUpdate
= new JButton();
139 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 90, 20));
140 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(90, 20));
141 jButtonUpdate
.setText("Edit");
142 jButtonUpdate
.addActionListener(this);
144 return jButtonUpdate
;
148 This method initializes jScrollPane
150 @return javax.swing.JScrollPane
152 private JScrollPane
getJScrollPane() {
153 if (jScrollPane
== null) {
154 jScrollPane
= new JScrollPane();
155 jScrollPane
.setViewportView(getJContentPane());
161 This method initializes jScrollPaneTable
163 @return javax.swing.JScrollPane
165 private JScrollPane
getJScrollPaneTable() {
166 if (jScrollPaneTable
== null) {
167 jScrollPaneTable
= new JScrollPane();
168 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
169 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
170 jScrollPaneTable
.setViewportView(getJTable());
172 return jScrollPaneTable
;
176 This method initializes jTable
178 @return javax.swing.JTable
180 private JTable
getJTable() {
181 if (jTable
== null) {
182 jTable
= new JTable();
183 model
= new IDefaultTableModel();
184 jTable
= new JTable(model
);
185 jTable
.setRowHeight(20);
187 model
.addColumn("Guid C_Name");
188 model
.addColumn("Usage");
190 jTable
.setSelectionMode(ListSelectionModel
.MULTIPLE_INTERVAL_SELECTION
);
191 jTable
.getSelectionModel().addListSelectionListener(this);
192 jTable
.getModel().addTableModelListener(this);
193 jTable
.addMouseListener(this);
198 public static void main(String
[] args
) {
203 This method initializes this
206 private void init() {
207 this.setSize(500, 515);
208 this.setContentPane(getJScrollPane());
209 this.setTitle("System Tables");
213 This method initializes this
214 Fill values to all fields if these values are not empty
216 @param inSystemTables
219 private void init(SystemTables inSystemTables
) {
221 this.systemTables
= inSystemTables
;
223 if (this.systemTables
!= null) {
224 if (this.systemTables
.getSystemTableCNamesList().size() > 0) {
225 for (int index
= 0; index
< this.systemTables
.getSystemTableCNamesList().size(); index
++) {
226 String arg0
= systemTables
.getSystemTableCNamesList().get(index
).getSystemTableCName();
228 if (systemTables
.getSystemTableCNamesList().get(index
).getUsage() != null) {
229 arg1
= systemTables
.getSystemTableCNamesList().get(index
).getUsage().toString();
232 String arg2
= systemTables
.getSystemTableCNamesList().get(index
).getFeatureFlag();
233 Vector
<String
> arg3
= Tools
.convertListToVector(systemTables
.getSystemTableCNamesList().get(index
)
235 String arg4
= systemTables
.getSystemTableCNamesList().get(index
).getHelpText();
237 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
238 vid
.addSystemTables(id
);
246 This is the default constructor
249 public ModuleSystemTables() {
252 this.setVisible(true);
256 This is the override edit constructor
258 @param inSystemTables The input data of SystemTablesDocument.SystemTables
261 public ModuleSystemTables(OpeningModuleType inOmt
, IFrame iFrame
) {
264 this.msa
= omt
.getXmlMsa();
265 this.parentFrame
= iFrame
;
266 init(msa
.getSystemTables());
267 this.setVisible(true);
271 This method initializes jContentPane
273 @return javax.swing.JPanel jContentPane
276 private JPanel
getJContentPane() {
277 if (jContentPane
== null) {
279 jContentPane
= new JPanel();
280 jContentPane
.setLayout(null);
281 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
283 jContentPane
.add(getJButtonAdd(), null);
284 jContentPane
.add(getJButtonRemove(), null);
285 jContentPane
.add(getJButtonUpdate(), null);
286 jContentPane
.add(getJScrollPaneTable(), null);
291 private void showEdit(int index
) {
292 SystemTablesDlg dlg
= new SystemTablesDlg(vid
.getSystemTables(index
), this.parentFrame
, omt
.getId());
293 int result
= dlg
.showDialog();
294 if (result
== DataType
.RETURN_TYPE_OK
) {
296 this.vid
.addSystemTables(dlg
.getId());
298 this.vid
.setSystemTables(dlg
.getId(), index
);
304 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
313 private void clearAll() {
315 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
316 model
.removeRow(index
);
322 Read content of vector and put then into table
325 private void showTable() {
328 if (vid
.size() > 0) {
329 for (int index
= 0; index
< vid
.size(); index
++) {
330 model
.addRow(vid
.toStringVector(index
));
333 this.jTable
.repaint();
334 this.jTable
.updateUI();
338 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
340 * Override actionPerformed to listen all actions
343 public void actionPerformed(ActionEvent arg0
) {
344 if (arg0
.getSource() == jButtonAdd
) {
347 if (arg0
.getSource() == jButtonUpdate
) {
348 if (this.selectedRow
< 0) {
349 Log
.wrn("Update System Tables", "Please select one record first.");
352 showEdit(selectedRow
);
355 if (arg0
.getSource() == jButtonRemove
) {
356 if (jTable
.isEditing()) {
357 jTable
.getCellEditor().stopCellEditing();
360 int selectedRows
[] = this.jTable
.getSelectedRows();
362 if (selectedRows
!= null) {
363 for (int index
= selectedRows
.length
- 1; index
> -1; index
--) {
364 this.model
.removeRow(selectedRows
[index
]);
365 this.vid
.removeSystemTables(selectedRows
[index
]);
374 Save all components of SystemTables
375 if exists systemTables, set the value directly
376 if not exists systemTables, new an instance first
381 int count
= this.vid
.size();
383 this.systemTables
= SystemTables
.Factory
.newInstance();
385 for (int index
= 0; index
< count
; index
++) {
386 SystemTableCNames p
= SystemTableCNames
.Factory
.newInstance();
387 if (!isEmpty(vid
.getSystemTables(index
).getName())) {
388 p
.setSystemTableCName(vid
.getSystemTables(index
).getName());
390 if (!isEmpty(vid
.getSystemTables(index
).getUsage())) {
391 p
.setUsage(SystemTableUsage
.Enum
.forString(vid
.getSystemTables(index
).getUsage()));
393 if (!isEmpty(vid
.getSystemTables(index
).getFeatureFlag())) {
394 p
.setFeatureFlag(vid
.getSystemTables(index
).getFeatureFlag());
396 if (vid
.getSystemTables(index
).getSupArchList() != null
397 && vid
.getSystemTables(index
).getSupArchList().size() > 0) {
398 p
.setSupArchList(vid
.getSystemTables(index
).getSupArchList());
400 if (!isEmpty(vid
.getSystemTables(index
).getHelp())) {
401 p
.setHelpText(vid
.getSystemTables(index
).getHelp());
403 this.systemTables
.addNewSystemTableCNames();
404 this.systemTables
.setSystemTableCNamesArray(systemTables
.getSystemTableCNamesList().size() - 1, p
);
408 this.msa
.setSystemTables(systemTables
);
409 this.omt
.setSaved(false);
410 } catch (Exception e
) {
411 Log
.wrn("Update System Tables", e
.getMessage());
412 Log
.err("Update System Tables", e
.getMessage());
417 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
420 public void valueChanged(ListSelectionEvent arg0
) {
421 if (arg0
.getValueIsAdjusting()) {
424 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
425 if (lsm
.isSelectionEmpty()) {
428 selectedRow
= lsm
.getMinSelectionIndex();
433 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
436 public void mouseClicked(MouseEvent arg0
) {
437 if (arg0
.getClickCount() == 2) {
438 if (this.selectedRow
< 0) {
441 showEdit(selectedRow
);
447 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
449 * Override componentResized to resize all components when frame's size is changed
451 public void componentResized(ComponentEvent arg0
) {
452 int intCurrentWidth
= this.getJContentPane().getWidth();
453 int intCurrentHeight
= this.getJContentPane().getHeight();
454 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
455 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
457 Tools
.resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
459 Tools
.relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
460 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
,
461 DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
462 Tools
.relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
463 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
,
464 DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
465 Tools
.relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
466 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
,
467 DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);