3 The file is used to create, update BootModes 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.
16 package org
.tianocore
.frameworkwizard
.module
.ui
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ComponentEvent
;
20 import java
.awt
.event
.ItemEvent
;
21 import java
.util
.Vector
;
23 import javax
.swing
.JButton
;
24 import javax
.swing
.JComboBox
;
25 import javax
.swing
.JLabel
;
26 import javax
.swing
.JPanel
;
27 import javax
.swing
.JScrollPane
;
28 import javax
.swing
.JTextArea
;
29 import javax
.swing
.JTextField
;
31 import org
.tianocore
.BootModeNames
;
32 import org
.tianocore
.BootModeUsage
;
33 import org
.tianocore
.BootModesDocument
;
34 import org
.tianocore
.BootModesDocument
.BootModes
;
35 import org
.tianocore
.BootModesDocument
.BootModes
.BootMode
;
36 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
37 import org
.tianocore
.frameworkwizard
.common
.DataType
;
38 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
39 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
40 import org
.tianocore
.frameworkwizard
.common
.Log
;
41 import org
.tianocore
.frameworkwizard
.common
.Tools
;
42 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
44 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
45 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
46 import org
.tianocore
.frameworkwizard
.module
.Identifications
.BootModes
.BootModesIdentification
;
47 import org
.tianocore
.frameworkwizard
.module
.Identifications
.BootModes
.BootModesVector
;
50 The class is used to create, update BootModes of MSA/MBD file
51 It extends IInternalFrame
56 public class ModuleBootModes
extends IInternalFrame
{
59 /// Define class Serial Version UID
61 private static final long serialVersionUID
= -3888558623432442561L;
64 //Define class members
66 private JPanel jContentPane
= null;
68 private JLabel jLabelBootModeName
= null;
70 private JComboBox jComboBoxBootModeName
= null;
72 private JLabel jLabelUsage
= null;
74 private JComboBox jComboBoxUsage
= null;
76 private StarLabel jStarLabel1
= null;
78 private StarLabel jStarLabel2
= null;
80 private JLabel jLabelFeatureFlag
= null;
82 private JTextField jTextFieldFeatureFlag
= null;
84 private JLabel jLabelArch
= null;
86 private JTextArea jTextAreaList
= null;
88 private JComboBox jComboBoxList
= null;
90 private JButton jButtonAdd
= null;
92 private JButton jButtonRemove
= null;
94 private JButton jButtonUpdate
= null;
96 private JScrollPane jScrollPane
= null;
98 private JScrollPane jScrollPaneList
= null;
100 private ICheckBoxList iCheckBoxListArch
= null;
102 private JScrollPane jScrollPaneArch
= null;
104 private JLabel jLabelHelpText
= null;
106 private JTextField jTextFieldHelpText
= null;
111 private int intSelectedItemId
= 0;
113 private OpeningModuleType omt
= null;
115 private ModuleSurfaceArea msa
= null;
117 private BootModesDocument
.BootModes bootModes
= null;
119 private BootModesIdentification id
= null;
121 private BootModesVector vid
= new BootModesVector();
123 private EnumerationData ed
= new EnumerationData();
126 This method initializes jComboBoxBootModeName
128 @return javax.swing.JComboBox jComboBoxBootModeName
131 private JComboBox
getJComboBoxBootModeName() {
132 if (jComboBoxBootModeName
== null) {
133 jComboBoxBootModeName
= new JComboBox();
134 jComboBoxBootModeName
.setBounds(new java
.awt
.Rectangle(160, 10, 320, 20));
135 jComboBoxBootModeName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
137 return jComboBoxBootModeName
;
141 This method initializes jComboBoxUsage
143 @return javax.swing.JComboBox jComboBoxUsage
146 private JComboBox
getJComboBoxUsage() {
147 if (jComboBoxUsage
== null) {
148 jComboBoxUsage
= new JComboBox();
149 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 35, 320, 20));
150 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
152 return jComboBoxUsage
;
156 * This method initializes jTextFieldFeatureFlag
158 * @return javax.swing.JTextField
160 private JTextField
getJTextFieldFeatureFlag() {
161 if (jTextFieldFeatureFlag
== null) {
162 jTextFieldFeatureFlag
= new JTextField();
163 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(160, 85, 320, 20));
164 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
166 return jTextFieldFeatureFlag
;
170 This method initializes jComboBoxFileList
172 @return javax.swing.JComboBox jComboBoxFileList
175 private JComboBox
getJComboBoxList() {
176 if (jComboBoxList
== null) {
177 jComboBoxList
= new JComboBox();
178 jComboBoxList
.setBounds(new java
.awt
.Rectangle(15, 195, 210, 20));
179 jComboBoxList
.addItemListener(this);
180 jComboBoxList
.addActionListener(this);
181 jComboBoxList
.setPreferredSize(new java
.awt
.Dimension(210, 20));
183 return jComboBoxList
;
187 This method initializes jButtonAdd
189 @return javax.swing.JButton jButtonAdd
192 private JButton
getJButtonAdd() {
193 if (jButtonAdd
== null) {
194 jButtonAdd
= new JButton();
195 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 80, 20));
196 jButtonAdd
.setText("Add");
197 jButtonAdd
.addActionListener(this);
198 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
204 This method initializes jButtonRemove
206 @return javax.swing.JButton jButtonRemove
209 private JButton
getJButtonRemove() {
210 if (jButtonRemove
== null) {
211 jButtonRemove
= new JButton();
212 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 80, 20));
213 jButtonRemove
.setText("Remove");
214 jButtonRemove
.addActionListener(this);
215 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
217 return jButtonRemove
;
221 This method initializes jButtonUpdate
223 @return javax.swing.JButton jButtonUpdate
226 private JButton
getJButtonUpdate() {
227 if (jButtonUpdate
== null) {
228 jButtonUpdate
= new JButton();
229 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 80, 20));
230 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
231 jButtonUpdate
.setText("Update");
232 jButtonUpdate
.addActionListener(this);
234 return jButtonUpdate
;
238 * This method initializes jScrollPaneFileList
240 * @return javax.swing.JScrollPane
242 private JScrollPane
getJScrollPaneList() {
243 if (jScrollPaneList
== null) {
244 jScrollPaneList
= new JScrollPane();
245 jScrollPaneList
.setBounds(new java
.awt
.Rectangle(15, 220, 465, 240));
246 jScrollPaneList
.setViewportView(getJTextAreaList());
247 jScrollPaneList
.setPreferredSize(new java
.awt
.Dimension(465, 240));
249 return jScrollPaneList
;
253 This method initializes jScrollPane
255 @return javax.swing.JScrollPane
257 private JScrollPane
getJScrollPane() {
258 if (jScrollPane
== null) {
259 jScrollPane
= new JScrollPane();
260 jScrollPane
.setViewportView(getJContentPane());
266 * This method initializes jTextAreaFileList
268 * @return javax.swing.JTextArea
270 private JTextArea
getJTextAreaList() {
271 if (jTextAreaList
== null) {
272 jTextAreaList
= new JTextArea();
273 jTextAreaList
.setEditable(false);
276 return jTextAreaList
;
280 This method initializes iCheckBoxListArch
282 @return ICheckBoxList
284 private ICheckBoxList
getICheckBoxListSupportedArchitectures() {
285 if (iCheckBoxListArch
== null) {
286 iCheckBoxListArch
= new ICheckBoxList();
287 iCheckBoxListArch
.addFocusListener(this);
288 iCheckBoxListArch
.setToolTipText(DataType
.SUP_ARCH_LIST_HELP_TEXT
);
290 return iCheckBoxListArch
;
294 This method initializes jScrollPaneArch
296 @return javax.swing.JScrollPane
299 private JScrollPane
getJScrollPaneArch() {
300 if (jScrollPaneArch
== null) {
301 jScrollPaneArch
= new JScrollPane();
302 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 80));
303 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(320, 80));
304 jScrollPaneArch
.setViewportView(getICheckBoxListSupportedArchitectures());
306 return jScrollPaneArch
;
310 This method initializes jTextFieldHelpText
312 @return javax.swing.JTextField
315 private JTextField
getJTextFieldHelpText() {
316 if (jTextFieldHelpText
== null) {
317 jTextFieldHelpText
= new JTextField();
318 jTextFieldHelpText
.setBounds(new java
.awt
.Rectangle(160, 60, 320, 20));
319 jTextFieldHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 20));
321 return jTextFieldHelpText
;
324 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("Boot Modes");
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(BootModes inBootModes
) {
348 this.bootModes
= inBootModes
;
350 if (this.bootModes
!= null) {
351 if (this.bootModes
.getBootModeList().size() > 0) {
352 for (int index
= 0; index
< this.bootModes
.getBootModeList().size(); index
++) {
354 if (bootModes
.getBootModeList().get(index
).getBootModeName() != null) {
355 arg0
= bootModes
.getBootModeList().get(index
).getBootModeName().toString();
358 if (bootModes
.getBootModeList().get(index
).getUsage() != null) {
359 arg1
= bootModes
.getBootModeList().get(index
).getUsage().toString();
362 String arg2
= bootModes
.getBootModeList().get(index
).getFeatureFlag();
363 Vector
<String
> arg3
= Tools
.convertListToVector(bootModes
.getBootModeList().get(index
).getSupArchList());
364 String arg4
= bootModes
.getBootModeList().get(index
).getHelpText();
366 id
= new BootModesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
367 vid
.addBootModes(id
);
374 Tools
.generateComboBoxByVector(jComboBoxList
, vid
.getBootModesName());
379 This is the default constructor
382 public ModuleBootModes() {
385 this.setVisible(true);
389 This is the override edit constructor
391 @param inBootModes The input BootModesDocument.BootModes
394 public ModuleBootModes(OpeningModuleType inOmt
) {
397 this.msa
= omt
.getXmlMsa();
398 init(msa
.getBootModes());
399 this.setVisible(true);
404 Disable all components when the mode is view
406 @param isView true - The view mode; false - The non-view mode
409 public void setViewMode(boolean isView
) {
411 this.jComboBoxBootModeName
.setEnabled(!isView
);
412 this.jComboBoxUsage
.setEnabled(!isView
);
417 This method initializes jContentPane
419 @return javax.swing.JPanel jContentPane
422 private JPanel
getJContentPane() {
423 if (jContentPane
== null) {
424 jLabelArch
= new JLabel();
425 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
426 jLabelArch
.setText("Arch");
427 jLabelFeatureFlag
= new JLabel();
428 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
429 jLabelFeatureFlag
.setText("Feature Flag");
430 jLabelUsage
= new JLabel();
431 jLabelUsage
.setText("Usage");
432 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
433 jLabelBootModeName
= new JLabel();
434 jLabelBootModeName
.setText("Boot Mode Name");
435 jLabelBootModeName
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
436 jLabelHelpText
= new JLabel();
437 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 60, 140, 20));
438 jLabelHelpText
.setText("Help Text");
440 jContentPane
= new JPanel();
441 jContentPane
.setLayout(null);
442 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 475));
444 jContentPane
.add(jLabelBootModeName
, null);
445 jContentPane
.add(getJComboBoxBootModeName(), null);
446 jContentPane
.add(jLabelUsage
, null);
447 jContentPane
.add(getJComboBoxUsage(), null);
448 jStarLabel1
= new StarLabel();
449 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
450 jStarLabel2
= new StarLabel();
451 jStarLabel2
.setLocation(new java
.awt
.Point(0, 35));
453 jContentPane
.add(jStarLabel1
, null);
454 jContentPane
.add(jStarLabel2
, null);
455 jContentPane
.add(jLabelFeatureFlag
, null);
456 jContentPane
.add(getJTextFieldFeatureFlag(), null);
457 jContentPane
.add(jLabelArch
, null);
459 jContentPane
.add(getJComboBoxList(), null);
460 jContentPane
.add(getJButtonAdd(), null);
461 jContentPane
.add(getJButtonRemove(), null);
462 jContentPane
.add(getJButtonUpdate(), null);
463 jContentPane
.add(getJScrollPaneList(), null);
464 jContentPane
.add(getJScrollPaneArch(), null);
465 jContentPane
.add(jLabelHelpText
, null);
466 jContentPane
.add(getJTextFieldHelpText(), null);
472 This method initializes BootModeName groups and Usage type
475 private void initFrame() {
476 Tools
.generateComboBoxByVector(jComboBoxBootModeName
, ed
.getVBootModeNames());
477 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVPpiUsage());
479 this.iCheckBoxListArch
.setAllItems(ed
.getVSupportedArchitectures());
483 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
485 * Override actionPerformed to listen all actions
488 public void actionPerformed(ActionEvent arg0
) {
489 if (arg0
.getSource() == jButtonAdd
) {
495 if (arg0
.getSource() == jButtonRemove
) {
498 if (arg0
.getSource() == jButtonUpdate
) {
507 Data validation for all fields
509 @retval true - All datas are valid
510 @retval false - At least one data is invalid
513 public boolean checkAdd() {
515 // Check if all fields have correct data types
521 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
522 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
523 Log
.err("Incorrect data type for Feature Flag");
532 Save all components of Mbd Header
533 if exists bootModes, set the value directly
534 if not exists bootModes, new an instance first
539 int count
= this.vid
.size();
541 this.bootModes
= BootModes
.Factory
.newInstance();
543 for (int index
= 0; index
< count
; index
++) {
544 BootMode p
= BootMode
.Factory
.newInstance();
545 if (!isEmpty(vid
.getBootModes(index
).getName())) {
546 p
.setBootModeName(BootModeNames
.Enum
.forString(vid
.getBootModes(index
).getName()));
548 if (!isEmpty(vid
.getBootModes(index
).getUsage())) {
549 p
.setUsage(BootModeUsage
.Enum
.forString(vid
.getBootModes(index
).getUsage()));
551 if (!isEmpty(vid
.getBootModes(index
).getFeatureFlag())) {
552 p
.setFeatureFlag(vid
.getBootModes(index
).getFeatureFlag());
554 if (vid
.getBootModes(index
).getSupArchList() != null && vid
.getBootModes(index
).getSupArchList().size() > 0) {
555 p
.setSupArchList(vid
.getBootModes(index
).getSupArchList());
557 if (!isEmpty(vid
.getBootModes(index
).getHelp())) {
558 p
.setHelpText(vid
.getBootModes(index
).getHelp());
560 this.bootModes
.addNewBootMode();
561 this.bootModes
.setBootModeArray(bootModes
.getBootModeList().size() - 1, p
);
565 this.msa
.setBootModes(bootModes
);
566 this.omt
.setSaved(false);
567 } catch (Exception e
) {
568 Log
.err("Update Boot Modes", e
.getMessage());
573 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
575 * Override componentResized to resize all components when frame's size is changed
577 public void componentResized(ComponentEvent arg0
) {
578 int intCurrentWidth
= this.getJContentPane().getWidth();
579 int intCurrentHeight
= this.getJContentPane().getHeight();
580 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
581 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
583 resizeComponentWidth(jComboBoxBootModeName
, intCurrentWidth
, intPreferredWidth
);
584 resizeComponentWidth(jComboBoxUsage
, intCurrentWidth
, intPreferredWidth
);
585 resizeComponentWidth(jTextFieldHelpText
, intCurrentWidth
, intPreferredWidth
);
586 resizeComponentWidth(jTextFieldFeatureFlag
, intCurrentWidth
, intPreferredWidth
);
587 resizeComponentWidth(jScrollPaneArch
, intCurrentWidth
, intPreferredWidth
);
589 resizeComponentWidth(jComboBoxList
, intCurrentWidth
, intPreferredWidth
);
590 resizeComponent(jScrollPaneList
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
592 relocateComponentX(jButtonAdd
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
);
593 relocateComponentX(jButtonRemove
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
);
594 relocateComponentX(jButtonUpdate
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
);
597 private BootModesIdentification
getCurrentBootModes() {
598 String arg0
= this.jComboBoxBootModeName
.getSelectedItem().toString();
600 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
602 String arg2
= this.jTextFieldFeatureFlag
.getText();
603 Vector
<String
> arg3
= this.iCheckBoxListArch
.getAllCheckedItemsString();
604 String arg4
= this.jTextFieldHelpText
.getText();
605 id
= new BootModesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
610 Add current item to Vector
613 private void addToList() {
614 intSelectedItemId
= vid
.size();
616 vid
.addBootModes(getCurrentBootModes());
618 jComboBoxList
.addItem(id
.getName());
619 jComboBoxList
.setSelectedItem(id
.getName());
622 // Reset select item index
624 intSelectedItemId
= vid
.size();
627 // Reload all fields of selected item
638 Remove current item from Vector
641 private void removeFromList() {
643 // Check if exist items
645 if (this.vid
.size() < 1) {
649 int intTempIndex
= intSelectedItemId
;
651 jComboBoxList
.removeItemAt(intSelectedItemId
);
653 vid
.removeBootModes(intTempIndex
);
656 // Reload all fields of selected item
667 Update current item of Vector
670 private void updateForList() {
672 // Check if exist items
674 if (this.vid
.size() < 1) {
679 // Backup selected item index
681 int intTempIndex
= intSelectedItemId
;
683 vid
.updateBootModes(getCurrentBootModes(), intTempIndex
);
685 jComboBoxList
.removeAllItems();
686 for (int index
= 0; index
< vid
.size(); index
++) {
687 jComboBoxList
.addItem(vid
.getBootModes(index
).getName());
691 // Restore selected item index
693 intSelectedItemId
= intTempIndex
;
696 // Reset select item index
698 jComboBoxList
.setSelectedIndex(intSelectedItemId
);
701 // Reload all fields of selected item
712 Refresh all fields' values of selected item of Vector
715 private void reloadFromList() {
716 if (vid
.size() > 0) {
718 // Get selected item index
720 intSelectedItemId
= jComboBoxList
.getSelectedIndex();
722 this.jComboBoxBootModeName
.setSelectedItem(vid
.getBootModes(intSelectedItemId
).getName());
723 this.jComboBoxUsage
.setSelectedItem(vid
.getBootModes(intSelectedItemId
).getUsage());
724 this.jTextFieldHelpText
.setText(vid
.getBootModes(intSelectedItemId
).getHelp());
726 jTextFieldFeatureFlag
.setText(vid
.getBootModes(intSelectedItemId
).getFeatureFlag());
727 iCheckBoxListArch
.setAllItemsUnchecked();
728 iCheckBoxListArch
.initCheckedItem(true, vid
.getBootModes(intSelectedItemId
).getSupArchList());
737 Update list area pane via the elements of Vector
740 private void reloadListArea() {
741 String strListItem
= "";
742 for (int index
= 0; index
< vid
.size(); index
++) {
743 strListItem
= strListItem
+ vid
.getBootModes(index
).getName() + DataType
.UNIX_LINE_SEPARATOR
;
745 this.jTextAreaList
.setText(strListItem
);
749 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
751 * Reflesh the frame when selected item changed
754 public void itemStateChanged(ItemEvent arg0
) {
755 if (arg0
.getSource() == this.jComboBoxList
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {