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
.event
.ActionEvent
;
18 import java
.awt
.event
.ComponentEvent
;
19 import java
.awt
.event
.ItemEvent
;
20 import java
.util
.Vector
;
22 import javax
.swing
.JButton
;
23 import javax
.swing
.JComboBox
;
24 import javax
.swing
.JLabel
;
25 import javax
.swing
.JPanel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTextArea
;
28 import javax
.swing
.JTextField
;
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
.DataValidation
;
37 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
38 import org
.tianocore
.frameworkwizard
.common
.Log
;
39 import org
.tianocore
.frameworkwizard
.common
.Tools
;
40 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
41 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
42 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
44 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SystemTables
.SystemTablesIdentification
;
45 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SystemTables
.SystemTablesVector
;
48 The class is used to create, update SystemTable of MSA/MBD file
49 It extends IInternalFrame
54 public class ModuleSystemTables
extends IInternalFrame
{
57 /// Define class Serial Version UID
59 private static final long serialVersionUID
= 7488769180379442276L;
62 //Define class members
64 private JPanel jContentPane
= null;
66 private JLabel jLabelEntry
= null;
68 private JTextField jTextFieldGuidC_Name
= null;
70 private JLabel jLabelUsage
= null;
72 private JComboBox jComboBoxUsage
= null;
74 private StarLabel jStarLabel1
= null;
76 private StarLabel jStarLabel2
= null;
78 private JLabel jLabelFeatureFlag
= null;
80 private JTextField jTextFieldFeatureFlag
= null;
82 private JLabel jLabelArch
= null;
84 private JTextArea jTextAreaList
= null;
86 private JComboBox jComboBoxList
= null;
88 private JButton jButtonAdd
= null;
90 private JButton jButtonRemove
= null;
92 private JButton jButtonUpdate
= null;
94 private JScrollPane jScrollPane
= null;
96 private JScrollPane jScrollPaneList
= null;
98 private ICheckBoxList iCheckBoxListArch
= null;
100 private JScrollPane jScrollPaneArch
= null;
102 private JLabel jLabelHelpText
= null;
104 private JTextField jTextFieldHelpText
= null;
109 private int intSelectedItemId
= 0;
111 private OpeningModuleType omt
= null;
113 private ModuleSurfaceArea msa
= null;
115 private SystemTablesDocument
.SystemTables systemTables
= null;
117 private SystemTablesIdentification id
= null;
119 private SystemTablesVector vid
= new SystemTablesVector();
121 private EnumerationData ed
= new EnumerationData();
124 This method initializes jTextFieldEntry
126 @return javax.swing.JTextField jTextFieldEntry
129 private JTextField
getJTextFieldEntry() {
130 if (jTextFieldGuidC_Name
== null) {
131 jTextFieldGuidC_Name
= new JTextField();
132 jTextFieldGuidC_Name
.setBounds(new java
.awt
.Rectangle(160, 10, 320, 20));
133 jTextFieldGuidC_Name
.setPreferredSize(new java
.awt
.Dimension(320,20));
134 jTextFieldGuidC_Name
.setToolTipText("Enter the C Name of the System Table");
136 return jTextFieldGuidC_Name
;
140 This method initializes jComboBoxUsage
142 @return javax.swing.JComboBox jComboBoxUsage
145 private JComboBox
getJComboBoxUsage() {
146 if (jComboBoxUsage
== null) {
147 jComboBoxUsage
= new JComboBox();
148 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 35, 320, 20));
149 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320,20));
151 return jComboBoxUsage
;
155 * This method initializes jTextFieldFeatureFlag
157 * @return javax.swing.JTextField
159 private JTextField
getJTextFieldFeatureFlag() {
160 if (jTextFieldFeatureFlag
== null) {
161 jTextFieldFeatureFlag
= new JTextField();
162 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(160, 85, 320, 20));
163 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320,20));
165 return jTextFieldFeatureFlag
;
169 This method initializes jComboBoxFileList
171 @return javax.swing.JComboBox jComboBoxFileList
174 private JComboBox
getJComboBoxList() {
175 if (jComboBoxList
== null) {
176 jComboBoxList
= new JComboBox();
177 jComboBoxList
.setBounds(new java
.awt
.Rectangle(15, 195, 210, 20));
178 jComboBoxList
.addItemListener(this);
179 jComboBoxList
.addActionListener(this);
180 jComboBoxList
.setPreferredSize(new java
.awt
.Dimension(210, 20));
182 return jComboBoxList
;
186 This method initializes jButtonAdd
188 @return javax.swing.JButton jButtonAdd
191 private JButton
getJButtonAdd() {
192 if (jButtonAdd
== null) {
193 jButtonAdd
= new JButton();
194 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 80, 20));
195 jButtonAdd
.setText("Add");
196 jButtonAdd
.addActionListener(this);
197 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
203 This method initializes jButtonRemove
205 @return javax.swing.JButton jButtonRemove
208 private JButton
getJButtonRemove() {
209 if (jButtonRemove
== null) {
210 jButtonRemove
= new JButton();
211 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 80, 20));
212 jButtonRemove
.setText("Remove");
213 jButtonRemove
.addActionListener(this);
214 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
216 return jButtonRemove
;
220 This method initializes jButtonUpdate
222 @return javax.swing.JButton jButtonUpdate
225 private JButton
getJButtonUpdate() {
226 if (jButtonUpdate
== null) {
227 jButtonUpdate
= new JButton();
228 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 80, 20));
229 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
230 jButtonUpdate
.setText("Update");
231 jButtonUpdate
.addActionListener(this);
233 return jButtonUpdate
;
237 * This method initializes jScrollPaneFileList
239 * @return javax.swing.JScrollPane
241 private JScrollPane
getJScrollPaneList() {
242 if (jScrollPaneList
== null) {
243 jScrollPaneList
= new JScrollPane();
244 jScrollPaneList
.setBounds(new java
.awt
.Rectangle(15, 220, 465, 240));
245 jScrollPaneList
.setViewportView(getJTextAreaList());
246 jScrollPaneList
.setPreferredSize(new java
.awt
.Dimension(465, 240));
248 return jScrollPaneList
;
252 This method initializes jScrollPane
254 @return javax.swing.JScrollPane
256 private JScrollPane
getJScrollPane() {
257 if (jScrollPane
== null) {
258 jScrollPane
= new JScrollPane();
259 jScrollPane
.setViewportView(getJContentPane());
265 * This method initializes jTextAreaFileList
267 * @return javax.swing.JTextArea
269 private JTextArea
getJTextAreaList() {
270 if (jTextAreaList
== null) {
271 jTextAreaList
= new JTextArea();
272 jTextAreaList
.setEditable(false);
275 return jTextAreaList
;
279 This method initializes iCheckBoxListArch
281 @return ICheckBoxList
283 private ICheckBoxList
getICheckBoxListSupportedArchitectures() {
284 if (iCheckBoxListArch
== null) {
285 iCheckBoxListArch
= new ICheckBoxList();
286 iCheckBoxListArch
.addFocusListener(this);
287 iCheckBoxListArch
.setToolTipText(DataType
.SUP_ARCH_LIST_HELP_TEXT
);
289 return iCheckBoxListArch
;
293 This method initializes jScrollPaneArch
295 @return javax.swing.JScrollPane
298 private JScrollPane
getJScrollPaneArch() {
299 if (jScrollPaneArch
== null) {
300 jScrollPaneArch
= new JScrollPane();
301 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 80));
302 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(320, 80));
303 jScrollPaneArch
.setViewportView(getICheckBoxListSupportedArchitectures());
305 return jScrollPaneArch
;
309 This method initializes jTextFieldHelpText
311 @return javax.swing.JTextField
314 private JTextField
getJTextFieldHelpText() {
315 if (jTextFieldHelpText
== null) {
316 jTextFieldHelpText
= new JTextField();
317 jTextFieldHelpText
.setBounds(new java
.awt
.Rectangle(160, 60, 320, 20));
318 jTextFieldHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 20));
320 return jTextFieldHelpText
;
323 public static void main(String
[] args
) {
328 This method initializes this
331 private void init() {
332 this.setSize(500, 515);
333 this.setContentPane(getJScrollPane());
334 this.setTitle("System Tables");
336 this.setViewMode(false);
340 This method initializes this
341 Fill values to all fields if these values are not empty
343 @param inPackageDependencies
346 private void init(SystemTables inSystemTables
) {
348 this.systemTables
= inSystemTables
;
350 if (this.systemTables
!= null) {
351 if (this.systemTables
.getSystemTableCNamesList().size() > 0) {
352 for (int index
= 0; index
< this.systemTables
.getSystemTableCNamesList().size(); index
++) {
353 String arg0
= systemTables
.getSystemTableCNamesList().get(index
).getSystemTableCName();
355 if (systemTables
.getSystemTableCNamesList().get(index
).getUsage() != null) {
356 arg1
= systemTables
.getSystemTableCNamesList().get(index
).getUsage().toString();
359 String arg2
= systemTables
.getSystemTableCNamesList().get(index
).getFeatureFlag();
360 Vector
<String
> arg3
= Tools
.convertListToVector(systemTables
.getSystemTableCNamesList().get(index
).getSupArchList());
361 String arg4
= systemTables
.getSystemTableCNamesList().get(index
).getHelpText();
363 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
364 vid
.addSystemTables(id
);
371 Tools
.generateComboBoxByVector(jComboBoxList
, vid
.getSystemTablesName());
376 This is the default constructor
379 public ModuleSystemTables() {
382 this.setVisible(true);
386 This is the override edit constructor
388 @param inSystemTables The input data of SystemTablesDocument.SystemTables
391 public ModuleSystemTables(OpeningModuleType inOmt
) {
394 this.msa
= omt
.getXmlMsa();
395 init(msa
.getSystemTables());
396 this.setVisible(true);
400 Disable all components when the mode is view
402 @param isView true - The view mode; false - The non-view mode
405 public void setViewMode(boolean isView
) {
407 this.jTextFieldGuidC_Name
.setEnabled(!isView
);
408 this.jComboBoxUsage
.setEnabled(!isView
);
413 This method initializes jContentPane
415 @return javax.swing.JPanel jContentPane
418 private JPanel
getJContentPane() {
419 if (jContentPane
== null) {
420 jLabelArch
= new JLabel();
421 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
422 jLabelArch
.setText("Arch");
423 jLabelFeatureFlag
= new JLabel();
424 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
425 jLabelFeatureFlag
.setText("Feature Flag");
426 jLabelUsage
= new JLabel();
427 jLabelUsage
.setText("Usage");
428 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
429 jLabelEntry
= new JLabel();
430 jLabelEntry
.setText("Guid C_Name");
431 jLabelEntry
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
432 jLabelHelpText
= new JLabel();
433 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 60, 140, 20));
434 jLabelHelpText
.setText("Help Text");
436 jContentPane
= new JPanel();
437 jContentPane
.setLayout(null);
438 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 475));
440 jContentPane
.add(jLabelEntry
, null);
441 jContentPane
.add(getJTextFieldEntry(), null);
442 jContentPane
.add(jLabelFeatureFlag
, null);
443 jContentPane
.add(getJTextFieldFeatureFlag(), null);
444 jContentPane
.add(jLabelArch
, null);
445 jContentPane
.add(jLabelUsage
, null);
446 jContentPane
.add(getJComboBoxUsage(), null);
447 jStarLabel1
= new StarLabel();
448 jStarLabel1
.setBounds(new java
.awt
.Rectangle(0, 10, 10, 20));
449 jStarLabel2
= new StarLabel();
450 jStarLabel2
.setBounds(new java
.awt
.Rectangle(0, 35, 10, 20));
452 jContentPane
.add(jStarLabel1
, null);
453 jContentPane
.add(jStarLabel2
, null);
455 jContentPane
.add(getJComboBoxList(), null);
456 jContentPane
.add(getJButtonAdd(), null);
457 jContentPane
.add(getJButtonRemove(), null);
458 jContentPane
.add(getJButtonUpdate(), null);
459 jContentPane
.add(getJScrollPaneList(), null);
460 jContentPane
.add(getJScrollPaneArch(), null);
461 jContentPane
.add(jLabelHelpText
, null);
462 jContentPane
.add(getJTextFieldHelpText(), null);
468 This method initializes Usage type
471 private void initFrame() {
472 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVSystemTableUsage());
474 this.iCheckBoxListArch
.setAllItems(ed
.getVSupportedArchitectures());
478 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
480 * Override actionPerformed to listen all actions
483 public void actionPerformed(ActionEvent arg0
) {
484 if (arg0
.getSource() == jButtonAdd
) {
490 if (arg0
.getSource() == jButtonRemove
) {
493 if (arg0
.getSource() == jButtonUpdate
) {
502 Data validation for all fields
504 @retval true - All datas are valid
505 @retval false - At least one data is invalid
508 public boolean checkAdd() {
510 // Check if all fields have correct data types
516 if (isEmpty(this.jTextFieldGuidC_Name
.getText())) {
517 Log
.err("Guid C_Name couldn't be empty");
521 if (!isEmpty(this.jTextFieldGuidC_Name
.getText())) {
522 if (!DataValidation
.isC_NameType(this.jTextFieldGuidC_Name
.getText())) {
523 Log
.err("Incorrect data type for Guid C_Name");
531 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
532 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
533 Log
.err("Incorrect data type for Feature Flag");
542 Save all components of SystemTables
543 if exists systemTables, set the value directly
544 if not exists systemTables, new an instance first
549 int count
= this.vid
.size();
551 this.systemTables
= SystemTables
.Factory
.newInstance();
553 for (int index
= 0; index
< count
; index
++) {
554 SystemTableCNames p
= SystemTableCNames
.Factory
.newInstance();
555 if (!isEmpty(vid
.getSystemTables(index
).getName())) {
556 p
.setSystemTableCName(vid
.getSystemTables(index
).getName());
558 if (!isEmpty(vid
.getSystemTables(index
).getUsage())) {
559 p
.setUsage(SystemTableUsage
.Enum
.forString(vid
.getSystemTables(index
).getUsage()));
561 if (!isEmpty(vid
.getSystemTables(index
).getFeatureFlag())) {
562 p
.setFeatureFlag(vid
.getSystemTables(index
).getFeatureFlag());
564 if (vid
.getSystemTables(index
).getSupArchList() != null && vid
.getSystemTables(index
).getSupArchList().size() > 0) {
565 p
.setSupArchList(vid
.getSystemTables(index
).getSupArchList());
567 if (!isEmpty(vid
.getSystemTables(index
).getHelp())) {
568 p
.setHelpText(vid
.getSystemTables(index
).getHelp());
570 this.systemTables
.addNewSystemTableCNames();
571 this.systemTables
.setSystemTableCNamesArray(systemTables
.getSystemTableCNamesList().size() - 1, p
);
575 this.msa
.setSystemTables(systemTables
);
576 this.omt
.setSaved(false);
577 } catch (Exception e
) {
578 Log
.err("Update System Tables", e
.getMessage());
583 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
585 * Override componentResized to resize all components when frame's size is changed
587 public void componentResized(ComponentEvent arg0
) {
588 int intCurrentWidth
= this.getJContentPane().getWidth();
589 int intCurrentHeight
= this.getJContentPane().getHeight();
590 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
591 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
593 resizeComponentWidth(jTextFieldGuidC_Name
, intCurrentWidth
, intPreferredWidth
);
594 resizeComponentWidth(jComboBoxUsage
, intCurrentWidth
, intPreferredWidth
);
595 resizeComponentWidth(jTextFieldHelpText
, intCurrentWidth
, intPreferredWidth
);
596 resizeComponentWidth(jTextFieldFeatureFlag
, intCurrentWidth
, intPreferredWidth
);
597 resizeComponentWidth(jScrollPaneArch
, intCurrentWidth
, intPreferredWidth
);
599 resizeComponentWidth(jComboBoxList
, intCurrentWidth
, intPreferredWidth
);
600 resizeComponent(jScrollPaneList
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
602 relocateComponentX(jButtonAdd
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
);
603 relocateComponentX(jButtonRemove
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
);
604 relocateComponentX(jButtonUpdate
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
);
607 private SystemTablesIdentification
getCurrentSystemTables() {
608 String arg0
= this.jTextFieldGuidC_Name
.getText();
609 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
611 String arg2
= this.jTextFieldFeatureFlag
.getText();
612 Vector
<String
> arg3
= this.iCheckBoxListArch
.getAllCheckedItemsString();
613 String arg4
= this.jTextFieldHelpText
.getText();
615 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
620 Add current item to Vector
623 private void addToList() {
624 intSelectedItemId
= vid
.size();
626 vid
.addSystemTables(getCurrentSystemTables());
628 jComboBoxList
.addItem(id
.getName());
629 jComboBoxList
.setSelectedItem(id
.getName());
632 // Reset select item index
634 intSelectedItemId
= vid
.size();
637 // Reload all fields of selected item
648 Remove current item from Vector
651 private void removeFromList() {
653 // Check if exist items
655 if (this.vid
.size() < 1) {
659 int intTempIndex
= intSelectedItemId
;
661 jComboBoxList
.removeItemAt(intSelectedItemId
);
663 vid
.removeSystemTables(intTempIndex
);
666 // Reload all fields of selected item
677 Update current item of Vector
680 private void updateForList() {
682 // Check if exist items
684 if (this.vid
.size() < 1) {
689 // Backup selected item index
691 int intTempIndex
= intSelectedItemId
;
693 vid
.updateSystemTables(getCurrentSystemTables(), intTempIndex
);
695 jComboBoxList
.removeAllItems();
696 for (int index
= 0; index
< vid
.size(); index
++) {
697 jComboBoxList
.addItem(vid
.getSystemTables(index
).getName());
701 // Restore selected item index
703 intSelectedItemId
= intTempIndex
;
706 // Reset select item index
708 jComboBoxList
.setSelectedIndex(intSelectedItemId
);
711 // Reload all fields of selected item
722 Refresh all fields' values of selected item of Vector
725 private void reloadFromList() {
726 if (vid
.size() > 0) {
728 // Get selected item index
730 intSelectedItemId
= jComboBoxList
.getSelectedIndex();
732 this.jTextFieldGuidC_Name
.setText(vid
.getSystemTables(intSelectedItemId
).getName());
733 this.jComboBoxUsage
.setSelectedItem(vid
.getSystemTables(intSelectedItemId
).getUsage());
734 this.jTextFieldHelpText
.setText(vid
.getSystemTables(intSelectedItemId
).getHelp());
736 jTextFieldFeatureFlag
.setText(vid
.getSystemTables(intSelectedItemId
).getFeatureFlag());
737 iCheckBoxListArch
.setAllItemsUnchecked();
738 iCheckBoxListArch
.initCheckedItem(true, vid
.getSystemTables(intSelectedItemId
).getSupArchList());
747 Update list area pane via the elements of Vector
750 private void reloadListArea() {
751 String strListItem
= "";
752 for (int index
= 0; index
< vid
.size(); index
++) {
753 strListItem
= strListItem
+ vid
.getSystemTables(index
).getName() + DataType
.UNIX_LINE_SEPARATOR
;
755 this.jTextAreaList
.setText(strListItem
);
759 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
761 * Reflesh the frame when selected item changed
764 public void itemStateChanged(ItemEvent arg0
) {
765 if (arg0
.getSource() == this.jComboBoxList
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {