3 The file is used to create, update PCD 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
.dialog
;
17 import java
.awt
.event
.ActionEvent
;
18 import java
.awt
.event
.ItemEvent
;
19 import java
.awt
.event
.ItemListener
;
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
.JTextField
;
28 import javax
.swing
.JTextArea
;
30 import org
.tianocore
.frameworkwizard
.common
.DataType
;
31 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
32 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
33 import org
.tianocore
.frameworkwizard
.common
.Log
;
34 import org
.tianocore
.frameworkwizard
.common
.Tools
;
35 import org
.tianocore
.frameworkwizard
.common
.ui
.ArchCheckBox
;
36 import org
.tianocore
.frameworkwizard
.common
.ui
.IDialog
;
37 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
38 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
39 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PcdCoded
.PcdCodedIdentification
;
40 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PcdCoded
.PcdVector
;
41 import org
.tianocore
.frameworkwizard
.workspace
.WorkspaceTools
;
44 * The class is used to create, update PCD of MSA/MBD file It extends
48 public class PCDsDlg
extends IDialog
implements ItemListener
{
51 // / Define class Serial Version UID
53 private static final long serialVersionUID
= 2227717658188438696L;
56 // Define class members
58 private JPanel jContentPane
= null;
60 private JLabel jLabelItemType
= null;
62 private JLabel jLabelC_Name
= null;
64 private JComboBox jComboBoxItemType
= null;
66 private JComboBox jComboBoxCName
= null;
68 private JLabel jLabelDefaultValue
= null;
70 private JTextField jTextFieldDefaultValue
= null;
72 private StarLabel jStarLabel1
= null;
74 private StarLabel jStarLabel2
= null;
76 private StarLabel jStarLabel3
= null;
78 private JLabel jLabelHelpText
= null;
80 private JTextArea jTextAreaHelpText
= null;
82 private JScrollPane jScrollPane
= null;
84 private JLabel jLabelTokenSpaceGuid
= null;
86 private JTextField jTextFieldTokenSpaceGuid
= null;
88 private JLabel jLabelFeatureFlag
= null;
90 private JTextField jTextFieldFeatureFlag
= null;
92 private JLabel jLabelArch
= null;
94 private ArchCheckBox jArchCheckBox
= null;
96 private JButton jButtonOk
= null;
98 private JButton jButtonCancel
= null;
100 private JScrollPane jScrollPaneHelpText
= null;
102 private JLabel jLabelUsage
= null;
104 private JComboBox jComboBoxUsage
= null;
109 private PcdCodedIdentification id
= null;
111 private EnumerationData ed
= new EnumerationData();
113 private WorkspaceTools wt
= new WorkspaceTools();
115 private PcdVector pcd
= wt
.getAllPcdDeclarationsFromWorkspace();
118 * This method initializes jComboBoxItemType
120 * @return javax.swing.JComboBox jComboBoxItemType
123 private JComboBox
getJComboBoxItemType() {
124 if (jComboBoxItemType
== null) {
125 jComboBoxItemType
= new JComboBox();
126 jComboBoxItemType
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
127 jComboBoxItemType
.setPreferredSize(new java
.awt
.Dimension(320, 20));
129 return jComboBoxItemType
;
133 * This method initializes jTextFieldC_Name
135 * @return javax.swing.JTextField jTextFieldC_Name
138 private JComboBox
getJComboBoxCName() {
139 if (jComboBoxCName
== null) {
140 jComboBoxCName
= new JComboBox();
141 jComboBoxCName
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
142 jComboBoxCName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
143 jComboBoxCName
.addItemListener(this);
145 return jComboBoxCName
;
149 * This method initializes jTextFieldDefaultValue
151 * @return javax.swing.JTextField jTextFieldDefaultValue
154 private JTextField
getJTextFieldDefaultValue() {
155 if (jTextFieldDefaultValue
== null) {
156 jTextFieldDefaultValue
= new JTextField();
157 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
158 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(320, 20));
160 return jTextFieldDefaultValue
;
164 * This method initializes jTextAreaHelpText
166 * @return javax.swing.JTextArea
168 private JTextArea
getJTextAreaHelpText() {
169 if (jTextAreaHelpText
== null) {
170 jTextAreaHelpText
= new JTextArea();
171 jTextAreaHelpText
.setLineWrap(true);
172 jTextAreaHelpText
.setWrapStyleWord(true);
174 return jTextAreaHelpText
;
178 * This method initializes jScrollPaneHelpText
180 * @return javax.swing.JScrollPane
183 private JScrollPane
getJScrollPaneHelpText() {
184 if (jScrollPaneHelpText
== null) {
185 jScrollPaneHelpText
= new JScrollPane();
186 jScrollPaneHelpText
.setHorizontalScrollBarPolicy(javax
.swing
.JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER
);
187 jScrollPaneHelpText
.setSize(new java
.awt
.Dimension(320, 40));
188 jScrollPaneHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 40));
189 jScrollPaneHelpText
.setLocation(new java
.awt
.Point(168, 112));
190 jScrollPaneHelpText
.setViewportView(getJTextAreaHelpText());
192 return jScrollPaneHelpText
;
196 * This method initializes jScrollPane
198 * @return javax.swing.JScrollPane
200 private JScrollPane
getJScrollPane() {
201 if (jScrollPane
== null) {
202 jScrollPane
= new JScrollPane();
203 jScrollPane
.setViewportView(getJContentPane());
209 * This method initializes jTextFieldTokenSpaceGuid
211 * @return javax.swing.JTextField
213 private JTextField
getJTextFieldTokenSpaceGuid() {
214 if (jTextFieldTokenSpaceGuid
== null) {
215 jTextFieldTokenSpaceGuid
= new JTextField();
216 jTextFieldTokenSpaceGuid
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
217 jTextFieldTokenSpaceGuid
.setPreferredSize(new java
.awt
.Dimension(320, 20));
218 jTextFieldTokenSpaceGuid
.setVisible(false);
220 return jTextFieldTokenSpaceGuid
;
224 * This method initializes jTextFieldFeatureFlag
226 * @return javax.swing.JTextField
228 private JTextField
getJTextFieldFeatureFlag() {
229 if (jTextFieldFeatureFlag
== null) {
230 jTextFieldFeatureFlag
= new JTextField();
231 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 157, 320, 20));
232 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
233 jTextFieldFeatureFlag
.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");
235 return jTextFieldFeatureFlag
;
239 * This method initializes jButtonOk
241 * @return javax.swing.JButton
244 private JButton
getJButtonOk() {
245 if (jButtonOk
== null) {
246 jButtonOk
= new JButton();
247 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 212, 90, 20));
248 jButtonOk
.setText("Ok");
249 jButtonOk
.addActionListener(this);
255 * This method initializes jButtonCancel
257 * @return javax.swing.JButton
260 private JButton
getJButtonCancel() {
261 if (jButtonCancel
== null) {
262 jButtonCancel
= new JButton();
263 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 212, 90, 20));
264 jButtonCancel
.setText("Cancel");
265 jButtonCancel
.addActionListener(this);
267 return jButtonCancel
;
271 * This method initializes jComboBoxUsage
273 * @return javax.swing.JComboBox
275 private JComboBox
getJComboBoxUsage() {
276 if (jComboBoxUsage
== null) {
277 jComboBoxUsage
= new JComboBox();
278 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(168, 87, 320, 20));
279 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
281 return jComboBoxUsage
;
284 public static void main(String
[] args
) {
289 * This method initializes this
292 private void init() {
293 this.setSize(505, 280);
294 this.setContentPane(getJScrollPane());
295 this.setTitle("Pcd Coded");
297 this.setViewMode(false);
302 * This method initializes this Fill values to all fields if these values are
305 * @param inPcdCodedId
308 private void init(PcdCodedIdentification inPcdCodedId
) {
310 this.id
= inPcdCodedId
;
312 if (this.id
!= null) {
313 this.jComboBoxCName
.setSelectedItem(id
.getName());
314 this.jTextFieldTokenSpaceGuid
.setText(id
.getGuid());
315 this.jTextFieldDefaultValue
.setText(id
.getValue());
316 this.jComboBoxUsage
.setSelectedItem(id
.getUsage());
317 this.jTextAreaHelpText
.setText(id
.getHelp());
318 this.jComboBoxItemType
.setSelectedItem(id
.getType());
319 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
320 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
325 * This is the override edit constructor
327 * @param inPcdCodedId
331 public PCDsDlg(PcdCodedIdentification inPcdCodedId
, IFrame iFrame
) {
337 * Disable all components when the mode is view
340 * true - The view mode; false - The non-view mode
343 public void setViewMode(boolean isView
) {
345 this.jTextFieldDefaultValue
.setEnabled(!isView
);
346 this.jComboBoxItemType
.setEnabled(!isView
);
351 * This method initializes jContentPane
353 * @return javax.swing.JPanel jContentPane
356 private JPanel
getJContentPane() {
357 if (jContentPane
== null) {
358 jLabelUsage
= new JLabel();
359 jLabelUsage
.setBounds(new java
.awt
.Rectangle(12, 87, 168, 20));
360 jLabelUsage
.setText("Usge");
361 jStarLabel1
= new StarLabel();
362 jStarLabel1
.setLocation(new java
.awt
.Point(2, 12));
363 jLabelC_Name
= new JLabel();
364 jLabelC_Name
.setText("PCD C Name");
365 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(12, 12, 168, 20));
367 jStarLabel2
= new StarLabel();
368 jStarLabel2
.setLocation(new java
.awt
.Point(2, 37));
369 jLabelItemType
= new JLabel();
370 jLabelItemType
.setText("PCD Item Type");
371 jLabelItemType
.setBounds(new java
.awt
.Rectangle(12, 37, 168, 20));
373 jLabelDefaultValue
= new JLabel();
374 jLabelDefaultValue
.setText("Default Value");
375 jLabelDefaultValue
.setBounds(new java
.awt
.Rectangle(12, 62, 168, 20));
377 jStarLabel3
= new StarLabel();
378 jStarLabel3
.setLocation(new java
.awt
.Point(2, 112));
379 jLabelHelpText
= new JLabel();
380 jLabelHelpText
.setText("Help Text");
381 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(12, 112, 168, 20));
383 jLabelFeatureFlag
= new JLabel();
384 jLabelFeatureFlag
.setText("Feature Flag Expression");
385 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 157, 168, 20));
387 jLabelTokenSpaceGuid
= new JLabel();
388 jLabelTokenSpaceGuid
.setText("Token Space C Name");
389 jLabelTokenSpaceGuid
.setVisible(false);
391 jLabelArch
= new JLabel();
392 jLabelArch
.setText("Supported Architectures");
393 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 182, 168, 20));
394 jArchCheckBox
= new ArchCheckBox();
395 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
396 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 182, 320, 20));
399 jLabelTokenSpaceGuid
.setBounds(new java
.awt
.Rectangle(12, 62, 140, 20));
401 jContentPane
= new JPanel();
402 jContentPane
.setLayout(null);
403 jContentPane
.setPreferredSize(new java
.awt
.Dimension(485, 235));
405 jContentPane
.add(jStarLabel1
, null);
406 jContentPane
.add(jLabelC_Name
, null);
407 jContentPane
.add(getJComboBoxCName(), null);
408 jContentPane
.add(jStarLabel2
, null);
409 jContentPane
.add(jLabelItemType
, null);
410 jContentPane
.add(getJComboBoxItemType(), null);
411 jContentPane
.add(jLabelDefaultValue
, null);
412 jContentPane
.add(getJTextFieldDefaultValue(), null);
413 jContentPane
.add(jStarLabel3
, null);
414 jContentPane
.add(jLabelHelpText
, null);
415 jContentPane
.add(getJScrollPaneHelpText(), null);
416 jContentPane
.add(jLabelFeatureFlag
, null);
417 jContentPane
.add(getJTextFieldFeatureFlag(), null);
418 jContentPane
.add(jLabelArch
, null);
419 jContentPane
.add(jArchCheckBox
, null);
421 jContentPane
.add(getJTextFieldTokenSpaceGuid(), null);
422 jContentPane
.add(jLabelTokenSpaceGuid
, null);
423 jContentPane
.add(getJButtonOk(), null);
424 jContentPane
.add(getJButtonCancel(), null);
425 jContentPane
.add(jLabelUsage
, null);
426 jContentPane
.add(getJComboBoxUsage(), null);
432 * This method initializes Usage type, Item type and Datum type
435 private void initFrame() {
436 for (int index
= 0; index
< pcd
.size(); index
++) {
437 jComboBoxCName
.addItem(pcd
.getPcd(index
));
440 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVPcdUsage());
446 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
448 * Override actionPerformed to listen all actions
451 public void actionPerformed(ActionEvent arg0
) {
452 if (arg0
.getSource() == jButtonOk
) {
454 getCurrentPcdCoded();
455 this.returnType
= DataType
.RETURN_TYPE_OK
;
456 this.setVisible(false);
460 if (arg0
.getSource() == jButtonCancel
) {
461 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
462 this.setVisible(false);
467 * Data validation for all fields
469 * @retval true - All datas are valid
470 * @retval false - At least one data is invalid
473 public boolean checkAdd() {
475 // Check if all fields have correct data types
481 if (!isEmpty(this.jComboBoxCName
.getSelectedItem().toString())) {
482 if (!DataValidation
.isC_NameType(this.jComboBoxCName
.getSelectedItem().toString())) {
483 Log
.wrn("Update PcdCoded", "Incorrect data type for C Name");
489 // Check TokenSpaceGuid
491 if (!isEmpty(this.jTextFieldTokenSpaceGuid
.getText())) {
492 if (!DataValidation
.isC_NameType(this.jTextFieldTokenSpaceGuid
.getText())) {
493 Log
.wrn("Update PcdCoded",
494 "Incorrect data type for the selected pcd entry, please check in in spd file");
500 // Check DefaultValue
502 if (!isEmpty(this.jTextFieldDefaultValue
.getText())) {
503 if (!DataValidation
.isDefaultValueType(this.jTextFieldDefaultValue
.getText())) {
504 Log
.wrn("Update PcdCoded", "Incorrect data type for Default Value");
512 if (isEmpty(this.jTextAreaHelpText
.getText())) {
513 Log
.wrn("Update PcdCoded", "Help Text should not be empty");
520 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
521 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
522 Log
.wrn("Update PcdCoded", "Incorrect data type for Feature Flag");
530 private PcdCodedIdentification
getCurrentPcdCoded() {
531 String arg0
= this.jComboBoxCName
.getSelectedItem().toString();
532 String arg1
= this.jTextFieldTokenSpaceGuid
.getText();
534 String arg2
= this.jTextFieldFeatureFlag
.getText();
535 Vector
<String
> arg3
= this.jArchCheckBox
.getSelectedItemsVector();
537 String arg4
= this.jTextFieldDefaultValue
.getText();
538 String arg5
= this.jTextAreaHelpText
.getText();
539 String arg6
= this.jComboBoxItemType
.getSelectedItem().toString();
540 String arg7
= this.jComboBoxUsage
.getSelectedItem().toString();
541 if (arg7
.equals(DataType
.EMPTY_SELECT_ITEM
)) {
545 id
= new PcdCodedIdentification(arg0
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
, arg7
);
549 public PcdCodedIdentification
getId() {
553 public void setId(PcdCodedIdentification id
) {
560 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
562 * Reflesh the frame when selected item changed
565 public void itemStateChanged(ItemEvent arg0
) {
566 int index
= this.jComboBoxCName
.getSelectedIndex();
567 if (arg0
.getSource() == this.jComboBoxCName
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {
568 if (pcd
.getPcd(index
).getGuidCName() == null || isEmpty(pcd
.getPcd(index
).getGuidCName())
569 || pcd
.getPcd(index
).getType() == null || pcd
.getPcd(index
).getHelp() == null
570 || isEmpty(pcd
.getPcd(index
).getHelp())) {
571 Log
.wrn("select pcd entry when editing msa",
572 "The selected is defined incorrectly.\r\nPlease check it in spd file");
574 this.jTextFieldTokenSpaceGuid
.setText(pcd
.getPcd(index
).getGuidCName());
575 Tools
.generateComboBoxByVector(this.jComboBoxItemType
, pcd
.getPcd(index
).getType());
576 this.jTextAreaHelpText
.setText(pcd
.getPcd(index
).getHelp());
577 this.jTextAreaHelpText
.setSelectionStart(0);
578 this.jTextAreaHelpText
.setSelectionEnd(0);