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
.OpeningModuleType
;
40 import org
.tianocore
.frameworkwizard
.common
.Tools
;
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
.Identification
.SystemTables
.SystemTablesIdentification
;
45 import org
.tianocore
.frameworkwizard
.module
.Identification
.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));
135 return jTextFieldGuidC_Name
;
139 This method initializes jComboBoxUsage
141 @return javax.swing.JComboBox jComboBoxUsage
144 private JComboBox
getJComboBoxUsage() {
145 if (jComboBoxUsage
== null) {
146 jComboBoxUsage
= new JComboBox();
147 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 35, 320, 20));
148 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320,20));
150 return jComboBoxUsage
;
154 * This method initializes jTextFieldFeatureFlag
156 * @return javax.swing.JTextField
158 private JTextField
getJTextFieldFeatureFlag() {
159 if (jTextFieldFeatureFlag
== null) {
160 jTextFieldFeatureFlag
= new JTextField();
161 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(160, 85, 320, 20));
162 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320,20));
164 return jTextFieldFeatureFlag
;
168 This method initializes jComboBoxFileList
170 @return javax.swing.JComboBox jComboBoxFileList
173 private JComboBox
getJComboBoxList() {
174 if (jComboBoxList
== null) {
175 jComboBoxList
= new JComboBox();
176 jComboBoxList
.setBounds(new java
.awt
.Rectangle(15, 195, 210, 20));
177 jComboBoxList
.addItemListener(this);
178 jComboBoxList
.addActionListener(this);
179 jComboBoxList
.setPreferredSize(new java
.awt
.Dimension(210, 20));
181 return jComboBoxList
;
185 This method initializes jButtonAdd
187 @return javax.swing.JButton jButtonAdd
190 private JButton
getJButtonAdd() {
191 if (jButtonAdd
== null) {
192 jButtonAdd
= new JButton();
193 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 80, 20));
194 jButtonAdd
.setText("Add");
195 jButtonAdd
.addActionListener(this);
196 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
202 This method initializes jButtonRemove
204 @return javax.swing.JButton jButtonRemove
207 private JButton
getJButtonRemove() {
208 if (jButtonRemove
== null) {
209 jButtonRemove
= new JButton();
210 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 80, 20));
211 jButtonRemove
.setText("Remove");
212 jButtonRemove
.addActionListener(this);
213 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
215 return jButtonRemove
;
219 This method initializes jButtonUpdate
221 @return javax.swing.JButton jButtonUpdate
224 private JButton
getJButtonUpdate() {
225 if (jButtonUpdate
== null) {
226 jButtonUpdate
= new JButton();
227 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 80, 20));
228 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
229 jButtonUpdate
.setText("Update");
230 jButtonUpdate
.addActionListener(this);
232 return jButtonUpdate
;
236 * This method initializes jScrollPaneFileList
238 * @return javax.swing.JScrollPane
240 private JScrollPane
getJScrollPaneList() {
241 if (jScrollPaneList
== null) {
242 jScrollPaneList
= new JScrollPane();
243 jScrollPaneList
.setBounds(new java
.awt
.Rectangle(15, 220, 465, 240));
244 jScrollPaneList
.setViewportView(getJTextAreaList());
245 jScrollPaneList
.setPreferredSize(new java
.awt
.Dimension(465, 240));
247 return jScrollPaneList
;
251 This method initializes jScrollPane
253 @return javax.swing.JScrollPane
255 private JScrollPane
getJScrollPane() {
256 if (jScrollPane
== null) {
257 jScrollPane
= new JScrollPane();
258 jScrollPane
.setViewportView(getJContentPane());
264 * This method initializes jTextAreaFileList
266 * @return javax.swing.JTextArea
268 private JTextArea
getJTextAreaList() {
269 if (jTextAreaList
== null) {
270 jTextAreaList
= new JTextArea();
271 jTextAreaList
.setEditable(false);
274 return jTextAreaList
;
278 This method initializes iCheckBoxListArch
280 @return ICheckBoxList
282 private ICheckBoxList
getICheckBoxListSupportedArchitectures() {
283 if (iCheckBoxListArch
== null) {
284 iCheckBoxListArch
= new ICheckBoxList();
285 iCheckBoxListArch
.addFocusListener(this);
286 iCheckBoxListArch
.setToolTipText(DataType
.SUP_ARCH_LIST_HELP_TEXT
);
288 return iCheckBoxListArch
;
292 This method initializes jScrollPaneArch
294 @return javax.swing.JScrollPane
297 private JScrollPane
getJScrollPaneArch() {
298 if (jScrollPaneArch
== null) {
299 jScrollPaneArch
= new JScrollPane();
300 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 80));
301 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(320, 80));
302 jScrollPaneArch
.setViewportView(getICheckBoxListSupportedArchitectures());
304 return jScrollPaneArch
;
308 This method initializes jTextFieldHelpText
310 @return javax.swing.JTextField
313 private JTextField
getJTextFieldHelpText() {
314 if (jTextFieldHelpText
== null) {
315 jTextFieldHelpText
= new JTextField();
316 jTextFieldHelpText
.setBounds(new java
.awt
.Rectangle(160, 60, 320, 20));
317 jTextFieldHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 20));
319 return jTextFieldHelpText
;
322 public static void main(String
[] args
) {
327 This method initializes this
330 private void init() {
331 this.setSize(500, 515);
332 this.setContentPane(getJScrollPane());
333 this.setTitle("System Tables");
335 this.setViewMode(false);
339 This method initializes this
340 Fill values to all fields if these values are not empty
342 @param inPackageDependencies
345 private void init(SystemTables inSystemTables
) {
347 this.systemTables
= inSystemTables
;
349 if (this.systemTables
!= null) {
350 if (this.systemTables
.getSystemTableCNamesList().size() > 0) {
351 for (int index
= 0; index
< this.systemTables
.getSystemTableCNamesList().size(); index
++) {
352 String arg0
= systemTables
.getSystemTableCNamesList().get(index
).getSystemTableCName();
354 if (systemTables
.getSystemTableCNamesList().get(index
).getUsage() != null) {
355 arg1
= systemTables
.getSystemTableCNamesList().get(index
).getUsage().toString();
358 String arg2
= systemTables
.getSystemTableCNamesList().get(index
).getFeatureFlag();
359 Vector
<String
> arg3
= Tools
.convertListToVector(systemTables
.getSystemTableCNamesList().get(index
).getSupArchList());
360 String arg4
= systemTables
.getSystemTableCNamesList().get(index
).getHelpText();
362 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
363 vid
.addSystemTables(id
);
370 Tools
.generateComboBoxByVector(jComboBoxList
, vid
.getSystemTablesName());
375 This is the default constructor
378 public ModuleSystemTables() {
381 this.setVisible(true);
385 This is the override edit constructor
387 @param inSystemTables The input data of SystemTablesDocument.SystemTables
390 public ModuleSystemTables(OpeningModuleType inOmt
) {
393 this.msa
= omt
.getXmlMsa();
394 init(msa
.getSystemTables());
395 this.setVisible(true);
399 Disable all components when the mode is view
401 @param isView true - The view mode; false - The non-view mode
404 public void setViewMode(boolean isView
) {
406 this.jTextFieldGuidC_Name
.setEnabled(!isView
);
407 this.jComboBoxUsage
.setEnabled(!isView
);
412 This method initializes jContentPane
414 @return javax.swing.JPanel jContentPane
417 private JPanel
getJContentPane() {
418 if (jContentPane
== null) {
419 jLabelArch
= new JLabel();
420 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
421 jLabelArch
.setText("Arch");
422 jLabelFeatureFlag
= new JLabel();
423 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
424 jLabelFeatureFlag
.setText("Feature Flag");
425 jLabelUsage
= new JLabel();
426 jLabelUsage
.setText("Usage");
427 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
428 jLabelEntry
= new JLabel();
429 jLabelEntry
.setText("Guid C_Name");
430 jLabelEntry
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
431 jLabelHelpText
= new JLabel();
432 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 60, 140, 20));
433 jLabelHelpText
.setText("Help Text");
435 jContentPane
= new JPanel();
436 jContentPane
.setLayout(null);
437 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 475));
439 jContentPane
.add(jLabelEntry
, null);
440 jContentPane
.add(getJTextFieldEntry(), null);
441 jContentPane
.add(jLabelFeatureFlag
, null);
442 jContentPane
.add(getJTextFieldFeatureFlag(), null);
443 jContentPane
.add(jLabelArch
, null);
444 jContentPane
.add(jLabelUsage
, null);
445 jContentPane
.add(getJComboBoxUsage(), null);
446 jStarLabel1
= new StarLabel();
447 jStarLabel1
.setBounds(new java
.awt
.Rectangle(0, 10, 10, 20));
448 jStarLabel2
= new StarLabel();
449 jStarLabel2
.setBounds(new java
.awt
.Rectangle(0, 35, 10, 20));
451 jContentPane
.add(jStarLabel1
, null);
452 jContentPane
.add(jStarLabel2
, null);
454 jContentPane
.add(getJComboBoxList(), null);
455 jContentPane
.add(getJButtonAdd(), null);
456 jContentPane
.add(getJButtonRemove(), null);
457 jContentPane
.add(getJButtonUpdate(), null);
458 jContentPane
.add(getJScrollPaneList(), null);
459 jContentPane
.add(getJScrollPaneArch(), null);
460 jContentPane
.add(jLabelHelpText
, null);
461 jContentPane
.add(getJTextFieldHelpText(), null);
467 This method initializes Usage type
470 private void initFrame() {
471 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVSystemTableUsage());
473 this.iCheckBoxListArch
.setAllItems(ed
.getVSupportedArchitectures());
477 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
479 * Override actionPerformed to listen all actions
482 public void actionPerformed(ActionEvent arg0
) {
483 if (arg0
.getSource() == jButtonAdd
) {
489 if (arg0
.getSource() == jButtonRemove
) {
492 if (arg0
.getSource() == jButtonUpdate
) {
501 Data validation for all fields
503 @retval true - All datas are valid
504 @retval false - At least one data is invalid
507 public boolean checkAdd() {
509 // Check if all fields have correct data types
515 if (isEmpty(this.jTextFieldGuidC_Name
.getText())) {
516 Log
.err("Guid C_Name couldn't be empty");
520 if (!isEmpty(this.jTextFieldGuidC_Name
.getText())) {
521 if (!DataValidation
.isC_NameType(this.jTextFieldGuidC_Name
.getText())) {
522 Log
.err("Incorrect data type for Guid C_Name");
530 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
531 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
532 Log
.err("Incorrect data type for Feature Flag");
541 Save all components of SystemTables
542 if exists systemTables, set the value directly
543 if not exists systemTables, new an instance first
548 int count
= this.vid
.size();
550 this.systemTables
= SystemTables
.Factory
.newInstance();
552 for (int index
= 0; index
< count
; index
++) {
553 SystemTableCNames p
= SystemTableCNames
.Factory
.newInstance();
554 if (!isEmpty(vid
.getSystemTables(index
).getName())) {
555 p
.setSystemTableCName(vid
.getSystemTables(index
).getName());
557 if (!isEmpty(vid
.getSystemTables(index
).getUsage())) {
558 p
.setUsage(SystemTableUsage
.Enum
.forString(vid
.getSystemTables(index
).getUsage()));
560 if (!isEmpty(vid
.getSystemTables(index
).getFeatureFlag())) {
561 p
.setFeatureFlag(vid
.getSystemTables(index
).getFeatureFlag());
563 if (vid
.getSystemTables(index
).getSupArchList() != null && vid
.getSystemTables(index
).getSupArchList().size() > 0) {
564 p
.setSupArchList(vid
.getSystemTables(index
).getSupArchList());
566 if (!isEmpty(vid
.getSystemTables(index
).getHelp())) {
567 p
.setHelpText(vid
.getSystemTables(index
).getHelp());
569 this.systemTables
.addNewSystemTableCNames();
570 this.systemTables
.setSystemTableCNamesArray(systemTables
.getSystemTableCNamesList().size() - 1, p
);
574 this.msa
.setSystemTables(systemTables
);
575 this.omt
.setSaved(false);
576 } catch (Exception e
) {
577 Log
.err("Update System Tables", e
.getMessage());
582 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
584 * Override componentResized to resize all components when frame's size is changed
586 public void componentResized(ComponentEvent arg0
) {
587 int intCurrentWidth
= this.getJContentPane().getWidth();
588 int intCurrentHeight
= this.getJContentPane().getHeight();
589 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
590 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
592 resizeComponentWidth(jTextFieldGuidC_Name
, intCurrentWidth
, intPreferredWidth
);
593 resizeComponentWidth(jComboBoxUsage
, intCurrentWidth
, intPreferredWidth
);
594 resizeComponentWidth(jTextFieldHelpText
, intCurrentWidth
, intPreferredWidth
);
595 resizeComponentWidth(jTextFieldFeatureFlag
, intCurrentWidth
, intPreferredWidth
);
596 resizeComponentWidth(jScrollPaneArch
, intCurrentWidth
, intPreferredWidth
);
598 resizeComponentWidth(jComboBoxList
, intCurrentWidth
, intPreferredWidth
);
599 resizeComponent(jScrollPaneList
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
601 relocateComponentX(jButtonAdd
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
);
602 relocateComponentX(jButtonRemove
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
);
603 relocateComponentX(jButtonUpdate
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
);
606 private SystemTablesIdentification
getCurrentSystemTables() {
607 String arg0
= this.jTextFieldGuidC_Name
.getText();
608 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
610 String arg2
= this.jTextFieldFeatureFlag
.getText();
611 Vector
<String
> arg3
= this.iCheckBoxListArch
.getAllCheckedItemsString();
612 String arg4
= this.jTextFieldHelpText
.getText();
614 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
619 Add current item to Vector
622 private void addToList() {
623 intSelectedItemId
= vid
.size();
625 vid
.addSystemTables(getCurrentSystemTables());
627 jComboBoxList
.addItem(id
.getName());
628 jComboBoxList
.setSelectedItem(id
.getName());
631 // Reset select item index
633 intSelectedItemId
= vid
.size();
636 // Reload all fields of selected item
647 Remove current item from Vector
650 private void removeFromList() {
652 // Check if exist items
654 if (this.vid
.size() < 1) {
658 int intTempIndex
= intSelectedItemId
;
660 jComboBoxList
.removeItemAt(intSelectedItemId
);
662 vid
.removeSystemTables(intTempIndex
);
665 // Reload all fields of selected item
676 Update current item of Vector
679 private void updateForList() {
681 // Check if exist items
683 if (this.vid
.size() < 1) {
688 // Backup selected item index
690 int intTempIndex
= intSelectedItemId
;
692 vid
.updateSystemTables(getCurrentSystemTables(), intTempIndex
);
694 jComboBoxList
.removeAllItems();
695 for (int index
= 0; index
< vid
.size(); index
++) {
696 jComboBoxList
.addItem(vid
.getSystemTables(index
).getName());
700 // Restore selected item index
702 intSelectedItemId
= intTempIndex
;
705 // Reset select item index
707 jComboBoxList
.setSelectedIndex(intSelectedItemId
);
710 // Reload all fields of selected item
721 Refresh all fields' values of selected item of Vector
724 private void reloadFromList() {
725 if (vid
.size() > 0) {
727 // Get selected item index
729 intSelectedItemId
= jComboBoxList
.getSelectedIndex();
731 this.jTextFieldGuidC_Name
.setText(vid
.getSystemTables(intSelectedItemId
).getName());
732 this.jComboBoxUsage
.setSelectedItem(vid
.getSystemTables(intSelectedItemId
).getUsage());
733 this.jTextFieldHelpText
.setText(vid
.getSystemTables(intSelectedItemId
).getHelp());
735 jTextFieldFeatureFlag
.setText(vid
.getSystemTables(intSelectedItemId
).getFeatureFlag());
736 iCheckBoxListArch
.setAllItemsUnchecked();
737 iCheckBoxListArch
.initCheckedItem(true, vid
.getSystemTables(intSelectedItemId
).getSupArchList());
746 Update list area pane via the elements of Vector
749 private void reloadListArea() {
750 String strListItem
= "";
751 for (int index
= 0; index
< vid
.size(); index
++) {
752 strListItem
= strListItem
+ vid
.getSystemTables(index
).getName() + DataType
.UNIX_LINE_SEPARATOR
;
754 this.jTextAreaList
.setText(strListItem
);
758 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
760 * Reflesh the frame when selected item changed
763 public void itemStateChanged(ItemEvent arg0
) {
764 if (arg0
.getSource() == this.jComboBoxList
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {