3 The file is used to create, update Formset 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
.HiiPackageUsage
;
31 import org
.tianocore
.HiiPackagesDocument
;
32 import org
.tianocore
.HiiPackagesDocument
.HiiPackages
;
33 import org
.tianocore
.HiiPackagesDocument
.HiiPackages
.HiiPackage
;
34 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
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
.HiiPackages
.HiiPackagesIdentification
;
45 import org
.tianocore
.frameworkwizard
.module
.Identification
.HiiPackages
.HiiPackagesVector
;
48 The class is used to create, update Formset of MSA/MBD file
49 It extends IInternalFrame
54 public class ModuleHiiPackages
extends IInternalFrame
{
57 /// Define class Serial Version UID
59 private static final long serialVersionUID
= -6851574146786158116L;
62 //Define class members
64 private JPanel jContentPane
= null;
66 private JLabel jLabelName
= null;
68 private JTextField jTextFieldName
= 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 HiiPackagesDocument
.HiiPackages hiiPackages
= null;
117 private HiiPackagesIdentification id
= null;
119 private HiiPackagesVector vid
= new HiiPackagesVector();
121 private EnumerationData ed
= new EnumerationData();
124 This method initializes jTextFieldName
126 @return javax.swing.JTextField jTextFieldName
129 private JTextField
getJTextFieldName() {
130 if (jTextFieldName
== null) {
131 jTextFieldName
= new JTextField();
132 jTextFieldName
.setBounds(new java
.awt
.Rectangle(160, 10, 320, 20));
133 jTextFieldName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
135 return jTextFieldName
;
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 jTextFieldHelpText
280 @return javax.swing.JTextField
283 private JTextField
getJTextFieldHelpText() {
284 if (jTextFieldHelpText
== null) {
285 jTextFieldHelpText
= new JTextField();
286 jTextFieldHelpText
.setBounds(new java
.awt
.Rectangle(160, 60, 320, 20));
287 jTextFieldHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 20));
289 return jTextFieldHelpText
;
293 This method initializes iCheckBoxListArch
295 @return ICheckBoxList
297 private ICheckBoxList
getICheckBoxListSupportedArchitectures() {
298 if (iCheckBoxListArch
== null) {
299 iCheckBoxListArch
= new ICheckBoxList();
300 iCheckBoxListArch
.addFocusListener(this);
301 iCheckBoxListArch
.setToolTipText(DataType
.SUP_ARCH_LIST_HELP_TEXT
);
303 return iCheckBoxListArch
;
307 This method initializes jScrollPaneArch
309 @return javax.swing.JScrollPane
312 private JScrollPane
getJScrollPaneArch() {
313 if (jScrollPaneArch
== null) {
314 jScrollPaneArch
= new JScrollPane();
315 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 80));
316 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(320, 80));
317 jScrollPaneArch
.setViewportView(getICheckBoxListSupportedArchitectures());
319 return jScrollPaneArch
;
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("Hii Packages");
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(HiiPackages inHiiPackages
) {
347 this.hiiPackages
= inHiiPackages
;
349 if (this.hiiPackages
!= null) {
350 if (this.hiiPackages
.getHiiPackageList().size() > 0) {
351 for (int index
= 0; index
< this.hiiPackages
.getHiiPackageList().size(); index
++) {
352 String arg0
= hiiPackages
.getHiiPackageList().get(index
).getHiiCName();
354 if (hiiPackages
.getHiiPackageList().get(index
).getUsage() != null) {
355 arg1
= hiiPackages
.getHiiPackageList().get(index
).getUsage().toString();
358 String arg2
= hiiPackages
.getHiiPackageList().get(index
).getFeatureFlag();
359 Vector
<String
> arg3
= Tools
.convertListToVector(hiiPackages
.getHiiPackageList().get(index
)
361 String arg4
= hiiPackages
.getHiiPackageList().get(index
).getHelpText();
363 id
= new HiiPackagesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
364 vid
.addHiiPackages(id
);
371 Tools
.generateComboBoxByVector(jComboBoxList
, vid
.getHiiPackagesName());
376 This is the default constructor
379 public ModuleHiiPackages() {
382 this.setVisible(true);
389 This is the override edit constructor
391 @param inFormsets The input data of HiiPackagesDocument.HiiPackages
394 public ModuleHiiPackages(OpeningModuleType inOmt
) {
397 this.msa
= omt
.getXmlMsa();
398 init(msa
.getHiiPackages());
399 this.setVisible(true);
403 Disable all components when the mode is view
405 @param isView true - The view mode; false - The non-view mode
408 public void setViewMode(boolean isView
) {
410 this.jTextFieldName
.setEnabled(!isView
);
411 this.jComboBoxUsage
.setEnabled(!isView
);
416 This method initializes jContentPane
418 @return javax.swing.JPanel jContentPane
421 private JPanel
getJContentPane() {
422 if (jContentPane
== null) {
423 jLabelUsage
= new JLabel();
424 jLabelUsage
.setText("Usage");
425 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
426 jLabelName
= new JLabel();
427 jLabelName
.setText("Name");
428 jLabelName
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
429 jLabelArch
= new JLabel();
430 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
431 jLabelArch
.setText("Arch");
432 jLabelFeatureFlag
= new JLabel();
433 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
434 jLabelFeatureFlag
.setText("Feature Flag");
435 jLabelHelpText
= new JLabel();
436 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 60, 140, 20));
437 jLabelHelpText
.setText("Help Text");
439 jContentPane
= new JPanel();
440 jContentPane
.setLayout(null);
441 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 475));
443 jContentPane
.add(jLabelName
, null);
444 jContentPane
.add(jLabelUsage
, null);
445 jContentPane
.add(getJTextFieldName(), null);
446 jContentPane
.add(getJComboBoxUsage(), null);
448 jContentPane
.add(jLabelFeatureFlag
, null);
449 jContentPane
.add(jLabelArch
, null);
450 jContentPane
.add(getJTextFieldFeatureFlag(), null);
452 jStarLabel1
= new StarLabel();
453 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
454 jStarLabel2
= new StarLabel();
455 jStarLabel2
.setLocation(new java
.awt
.Point(0, 35));
457 jContentPane
.add(jStarLabel1
, null);
458 jContentPane
.add(jStarLabel2
, null);
460 jContentPane
.add(getJComboBoxList(), null);
461 jContentPane
.add(getJButtonAdd(), null);
462 jContentPane
.add(getJButtonRemove(), null);
463 jContentPane
.add(getJButtonUpdate(), null);
464 jContentPane
.add(getJScrollPaneList(), null);
465 jContentPane
.add(getJScrollPaneArch(), null);
466 jContentPane
.add(jLabelHelpText
, null);
467 jContentPane
.add(getJTextFieldHelpText(), null);
473 This method initializes Usage type
476 private void initFrame() {
477 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVHiiPackageUsage());
478 this.iCheckBoxListArch
.setAllItems(ed
.getVSupportedArchitectures());
482 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
484 * Override actionPerformed to listen all actions
487 public void actionPerformed(ActionEvent arg0
) {
488 if (arg0
.getSource() == jButtonAdd
) {
494 if (arg0
.getSource() == jButtonRemove
) {
497 if (arg0
.getSource() == jButtonUpdate
) {
506 Data validation for all fields
508 @retval true - All datas are valid
509 @retval false - At least one data is invalid
512 public boolean checkAdd() {
514 // Check if all fields have correct data types
518 // Check Hii Package Name
520 if (isEmpty(this.jTextFieldName
.getText())) {
521 Log
.err("Hii Package Name Record couldn't be empty");
525 if (!isEmpty(this.jTextFieldName
.getText())) {
526 if (!DataValidation
.isC_NameType(this.jTextFieldName
.getText())) {
527 Log
.err("Incorrect data type for Hii Package Name");
535 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
536 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
537 Log
.err("Incorrect data type for Feature Flag");
546 Save all components of hiiPackages
547 if exists formset, set the value directly
548 if not exists formset, new an instance first
553 int count
= this.vid
.size();
555 this.hiiPackages
= HiiPackages
.Factory
.newInstance();
557 for (int index
= 0; index
< count
; index
++) {
558 HiiPackage p
= HiiPackage
.Factory
.newInstance();
559 if (!isEmpty(vid
.getHiiPackages(index
).getName())) {
560 p
.setHiiCName(vid
.getHiiPackages(index
).getName());
562 if (!isEmpty(vid
.getHiiPackages(index
).getUsage())) {
563 p
.setUsage(HiiPackageUsage
.Enum
.forString(vid
.getHiiPackages(index
).getUsage()));
565 if (!isEmpty(vid
.getHiiPackages(index
).getFeatureFlag())) {
566 p
.setFeatureFlag(vid
.getHiiPackages(index
).getFeatureFlag());
568 if (vid
.getHiiPackages(index
).getSupArchList() != null
569 && vid
.getHiiPackages(index
).getSupArchList().size() > 0) {
570 p
.setSupArchList(vid
.getHiiPackages(index
).getSupArchList());
572 if (!isEmpty(vid
.getHiiPackages(index
).getHelp())) {
573 p
.setHelpText(vid
.getHiiPackages(index
).getHelp());
575 this.hiiPackages
.addNewHiiPackage();
576 this.hiiPackages
.setHiiPackageArray(hiiPackages
.getHiiPackageList().size() - 1, p
);
580 this.msa
.setHiiPackages(hiiPackages
);
581 this.omt
.setSaved(false);
582 } catch (Exception e
) {
583 Log
.err("Update hiiPackages", e
.getMessage());
588 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
590 * Override componentResized to resize all components when frame's size is changed
592 public void componentResized(ComponentEvent arg0
) {
593 int intCurrentWidth
= this.getJContentPane().getWidth();
594 int intCurrentHeight
= this.getJContentPane().getHeight();
595 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
596 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
598 resizeComponentWidth(jTextFieldName
, intCurrentWidth
, intPreferredWidth
);
599 resizeComponentWidth(jComboBoxUsage
, intCurrentWidth
, intPreferredWidth
);
600 resizeComponentWidth(jTextFieldHelpText
, intCurrentWidth
, intPreferredWidth
);
601 resizeComponentWidth(jTextFieldFeatureFlag
, intCurrentWidth
, intPreferredWidth
);
602 resizeComponentWidth(jScrollPaneArch
, intCurrentWidth
, intPreferredWidth
);
604 resizeComponentWidth(jComboBoxList
, intCurrentWidth
, intPreferredWidth
);
605 resizeComponent(jScrollPaneList
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
607 relocateComponentX(jButtonAdd
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
);
608 relocateComponentX(jButtonRemove
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
);
609 relocateComponentX(jButtonUpdate
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
);
612 private HiiPackagesIdentification
getCurrentHiiPackages() {
613 String arg0
= this.jTextFieldName
.getText();
614 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
616 String arg2
= this.jTextFieldFeatureFlag
.getText();
617 Vector
<String
> arg3
= this.iCheckBoxListArch
.getAllCheckedItemsString();
618 String arg4
= this.jTextFieldHelpText
.getText();
620 id
= new HiiPackagesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
625 Add current item to Vector
628 private void addToList() {
629 intSelectedItemId
= vid
.size();
631 vid
.addHiiPackages(getCurrentHiiPackages());
633 jComboBoxList
.addItem(id
.getName());
634 jComboBoxList
.setSelectedItem(id
.getName());
637 // Reset select item index
639 intSelectedItemId
= vid
.size();
642 // Reload all fields of selected item
653 Remove current item from Vector
656 private void removeFromList() {
658 // Check if exist items
660 if (this.vid
.size() < 1) {
664 int intTempIndex
= intSelectedItemId
;
666 jComboBoxList
.removeItemAt(intSelectedItemId
);
668 vid
.removeHiiPackages(intTempIndex
);
671 // Reload all fields of selected item
682 Update current item of Vector
685 private void updateForList() {
687 // Check if exist items
689 if (this.vid
.size() < 1) {
694 // Backup selected item index
696 int intTempIndex
= intSelectedItemId
;
698 vid
.updateHiiPackages(getCurrentHiiPackages(), intTempIndex
);
700 jComboBoxList
.removeAllItems();
701 for (int index
= 0; index
< vid
.size(); index
++) {
702 jComboBoxList
.addItem(vid
.getHiiPackages(index
).getName());
706 // Restore selected item index
708 intSelectedItemId
= intTempIndex
;
711 // Reset select item index
713 jComboBoxList
.setSelectedIndex(intSelectedItemId
);
716 // Reload all fields of selected item
727 Refresh all fields' values of selected item of Vector
730 private void reloadFromList() {
731 if (vid
.size() > 0) {
733 // Get selected item index
735 intSelectedItemId
= jComboBoxList
.getSelectedIndex();
737 this.jTextFieldName
.setText(vid
.getHiiPackages(intSelectedItemId
).getName());
738 this.jComboBoxUsage
.setSelectedItem(vid
.getHiiPackages(intSelectedItemId
).getUsage());
739 this.jTextFieldHelpText
.setText(vid
.getHiiPackages(intSelectedItemId
).getHelp());
741 jTextFieldFeatureFlag
.setText(vid
.getHiiPackages(intSelectedItemId
).getFeatureFlag());
742 iCheckBoxListArch
.setAllItemsUnchecked();
743 iCheckBoxListArch
.initCheckedItem(true, vid
.getHiiPackages(intSelectedItemId
).getSupArchList());
752 Update list area pane via the elements of Vector
755 private void reloadListArea() {
756 String strListItem
= "";
757 for (int index
= 0; index
< vid
.size(); index
++) {
758 strListItem
= strListItem
+ vid
.getHiiPackages(index
).getName() + DataType
.UNIX_LINE_SEPARATOR
;
760 this.jTextAreaList
.setText(strListItem
);
764 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
766 * Reflesh the frame when selected item changed
769 public void itemStateChanged(ItemEvent arg0
) {
770 if (arg0
.getSource() == this.jComboBoxList
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {