3 The file is used to create, update PcdCode section of the MSA 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 PcdCoded section of the MSA file
49 public class PCDsDlg
extends IDialog
implements ItemListener
{
52 // / Define class Serial Version UID
54 private static final long serialVersionUID
= 2227717658188438696L;
57 // Define class members
59 private JPanel jContentPane
= null;
61 private JLabel jLabelItemType
= null;
63 private JLabel jLabelC_Name
= null;
65 private JComboBox jComboBoxItemType
= null;
67 private JComboBox jComboBoxCName
= null;
69 private JLabel jLabelDefaultValue
= null;
71 private JTextField jTextFieldDefaultValue
= null;
73 private StarLabel jStarLabel1
= null;
75 private StarLabel jStarLabel2
= null;
77 private StarLabel jStarLabel3
= null;
79 private JLabel jLabelHelpText
= null;
81 private JTextArea jTextAreaHelpText
= null;
83 private JScrollPane jScrollPane
= null;
85 private JLabel jLabelTokenSpaceGuid
= null;
87 private JTextField jTextFieldTokenSpaceGuid
= null;
89 private JLabel jLabelFeatureFlag
= null;
91 private JTextField jTextFieldFeatureFlag
= null;
93 private JLabel jLabelArch
= null;
95 private ArchCheckBox jArchCheckBox
= null;
97 private JButton jButtonOk
= null;
99 private JButton jButtonCancel
= null;
101 private JScrollPane jScrollPaneHelpText
= null;
103 private JLabel jLabelUsage
= null;
105 private JComboBox jComboBoxUsage
= null;
110 private PcdCodedIdentification id
= null;
112 private EnumerationData ed
= new EnumerationData();
114 private WorkspaceTools wt
= new WorkspaceTools();
116 private PcdVector pcd
= wt
.getAllPcdDeclarationsFromWorkspace();
119 * This method initializes jComboBoxItemType
121 * @return javax.swing.JComboBox jComboBoxItemType
124 private JComboBox
getJComboBoxItemType() {
125 if (jComboBoxItemType
== null) {
126 jComboBoxItemType
= new JComboBox();
127 jComboBoxItemType
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
128 jComboBoxItemType
.setPreferredSize(new java
.awt
.Dimension(320, 20));
130 return jComboBoxItemType
;
134 * This method initializes jTextFieldC_Name
136 * @return javax.swing.JTextField jTextFieldC_Name
139 private JComboBox
getJComboBoxCName() {
140 if (jComboBoxCName
== null) {
141 jComboBoxCName
= new JComboBox();
142 jComboBoxCName
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
143 jComboBoxCName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
144 jComboBoxCName
.addItemListener(this);
146 return jComboBoxCName
;
150 * This method initializes jTextFieldDefaultValue
152 * @return javax.swing.JTextField jTextFieldDefaultValue
155 private JTextField
getJTextFieldDefaultValue() {
156 if (jTextFieldDefaultValue
== null) {
157 jTextFieldDefaultValue
= new JTextField();
158 jTextFieldDefaultValue
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
159 jTextFieldDefaultValue
.setPreferredSize(new java
.awt
.Dimension(320, 20));
161 return jTextFieldDefaultValue
;
165 * This method initializes jTextAreaHelpText
167 * @return javax.swing.JTextArea
169 private JTextArea
getJTextAreaHelpText() {
170 if (jTextAreaHelpText
== null) {
171 jTextAreaHelpText
= new JTextArea();
172 jTextAreaHelpText
.setLineWrap(true);
173 jTextAreaHelpText
.setWrapStyleWord(true);
175 return jTextAreaHelpText
;
179 * This method initializes jScrollPaneHelpText
181 * @return javax.swing.JScrollPane
184 private JScrollPane
getJScrollPaneHelpText() {
185 if (jScrollPaneHelpText
== null) {
186 jScrollPaneHelpText
= new JScrollPane();
187 jScrollPaneHelpText
.setHorizontalScrollBarPolicy(javax
.swing
.JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER
);
188 jScrollPaneHelpText
.setSize(new java
.awt
.Dimension(320, 40));
189 jScrollPaneHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 40));
190 jScrollPaneHelpText
.setLocation(new java
.awt
.Point(168, 112));
191 jScrollPaneHelpText
.setViewportView(getJTextAreaHelpText());
193 return jScrollPaneHelpText
;
197 * This method initializes jScrollPane
199 * @return javax.swing.JScrollPane
201 private JScrollPane
getJScrollPane() {
202 if (jScrollPane
== null) {
203 jScrollPane
= new JScrollPane();
204 jScrollPane
.setViewportView(getJContentPane());
210 * This method initializes jTextFieldTokenSpaceGuid
212 * @return javax.swing.JTextField
214 private JTextField
getJTextFieldTokenSpaceGuid() {
215 if (jTextFieldTokenSpaceGuid
== null) {
216 jTextFieldTokenSpaceGuid
= new JTextField();
217 jTextFieldTokenSpaceGuid
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
218 jTextFieldTokenSpaceGuid
.setPreferredSize(new java
.awt
.Dimension(320, 20));
219 jTextFieldTokenSpaceGuid
.setVisible(false);
221 return jTextFieldTokenSpaceGuid
;
225 * This method initializes jTextFieldFeatureFlag
227 * @return javax.swing.JTextField
229 private JTextField
getJTextFieldFeatureFlag() {
230 if (jTextFieldFeatureFlag
== null) {
231 jTextFieldFeatureFlag
= new JTextField();
232 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 157, 320, 20));
233 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
234 jTextFieldFeatureFlag
.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");
236 return jTextFieldFeatureFlag
;
240 * This method initializes jButtonOk
242 * @return javax.swing.JButton
245 private JButton
getJButtonOk() {
246 if (jButtonOk
== null) {
247 jButtonOk
= new JButton();
248 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 212, 90, 20));
249 jButtonOk
.setText("Ok");
250 jButtonOk
.addActionListener(this);
256 * This method initializes jButtonCancel
258 * @return javax.swing.JButton
261 private JButton
getJButtonCancel() {
262 if (jButtonCancel
== null) {
263 jButtonCancel
= new JButton();
264 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 212, 90, 20));
265 jButtonCancel
.setText("Cancel");
266 jButtonCancel
.addActionListener(this);
268 return jButtonCancel
;
272 * This method initializes jComboBoxUsage
274 * @return javax.swing.JComboBox
276 private JComboBox
getJComboBoxUsage() {
277 if (jComboBoxUsage
== null) {
278 jComboBoxUsage
= new JComboBox();
279 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(168, 87, 320, 20));
280 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
282 return jComboBoxUsage
;
285 public static void main(String
[] args
) {
290 * This method initializes this
293 private void init() {
294 this.setSize(505, 280);
295 this.setContentPane(getJScrollPane());
296 this.setTitle("Pcd Coded");
298 this.setViewMode(false);
303 * This method initializes this Fill values to all fields if these values are
306 * @param inPcdCodedId
309 private void init(PcdCodedIdentification inPcdCodedId
) {
311 this.id
= inPcdCodedId
;
313 if (this.id
!= null) {
314 this.jComboBoxCName
.setSelectedItem(id
.getName());
315 this.jTextFieldTokenSpaceGuid
.setText(id
.getGuid());
316 this.jTextFieldDefaultValue
.setText(id
.getValue());
317 this.jComboBoxUsage
.setSelectedItem(id
.getUsage());
318 this.jTextAreaHelpText
.setText(id
.getHelp());
319 this.jComboBoxItemType
.setSelectedItem(id
.getType());
320 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
321 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
326 * This is the override edit constructor
328 * @param inPcdCodedId
332 public PCDsDlg(PcdCodedIdentification inPcdCodedId
, IFrame iFrame
) {
338 * Disable all components when the mode is view
341 * true - The view mode; false - The non-view mode
344 public void setViewMode(boolean isView
) {
346 this.jTextFieldDefaultValue
.setEnabled(!isView
);
347 this.jComboBoxItemType
.setEnabled(!isView
);
352 * This method initializes jContentPane
354 * @return javax.swing.JPanel jContentPane
357 private JPanel
getJContentPane() {
358 if (jContentPane
== null) {
359 jLabelUsage
= new JLabel();
360 jLabelUsage
.setBounds(new java
.awt
.Rectangle(12, 87, 168, 20));
361 jLabelUsage
.setText("Usge");
362 jStarLabel1
= new StarLabel();
363 jStarLabel1
.setLocation(new java
.awt
.Point(2, 12));
364 jLabelC_Name
= new JLabel();
365 jLabelC_Name
.setText("PCD C Name");
366 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(12, 12, 168, 20));
368 jStarLabel2
= new StarLabel();
369 jStarLabel2
.setLocation(new java
.awt
.Point(2, 37));
370 jLabelItemType
= new JLabel();
371 jLabelItemType
.setText("PCD Item Type");
372 jLabelItemType
.setBounds(new java
.awt
.Rectangle(12, 37, 168, 20));
374 jLabelDefaultValue
= new JLabel();
375 jLabelDefaultValue
.setText("Default Value");
376 jLabelDefaultValue
.setBounds(new java
.awt
.Rectangle(12, 62, 168, 20));
378 jStarLabel3
= new StarLabel();
379 jStarLabel3
.setLocation(new java
.awt
.Point(2, 112));
380 jLabelHelpText
= new JLabel();
381 jLabelHelpText
.setText("Help Text");
382 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(12, 112, 168, 20));
384 jLabelFeatureFlag
= new JLabel();
385 jLabelFeatureFlag
.setText("Feature Flag Expression");
386 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 157, 168, 20));
388 jLabelTokenSpaceGuid
= new JLabel();
389 jLabelTokenSpaceGuid
.setText("Token Space C Name");
390 jLabelTokenSpaceGuid
.setVisible(false);
392 jLabelArch
= new JLabel();
393 jLabelArch
.setText("Supported Architectures");
394 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 182, 168, 20));
395 jArchCheckBox
= new ArchCheckBox();
396 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
397 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 182, 320, 20));
400 jLabelTokenSpaceGuid
.setBounds(new java
.awt
.Rectangle(12, 62, 140, 20));
402 jContentPane
= new JPanel();
403 jContentPane
.setLayout(null);
404 jContentPane
.setPreferredSize(new java
.awt
.Dimension(485, 235));
406 jContentPane
.add(jStarLabel1
, null);
407 jContentPane
.add(jLabelC_Name
, null);
408 jContentPane
.add(getJComboBoxCName(), null);
409 jContentPane
.add(jStarLabel2
, null);
410 jContentPane
.add(jLabelItemType
, null);
411 jContentPane
.add(getJComboBoxItemType(), null);
412 jContentPane
.add(jLabelDefaultValue
, null);
413 jContentPane
.add(getJTextFieldDefaultValue(), null);
414 jContentPane
.add(jStarLabel3
, null);
415 jContentPane
.add(jLabelHelpText
, null);
416 jContentPane
.add(getJScrollPaneHelpText(), null);
417 jContentPane
.add(jLabelFeatureFlag
, null);
418 jContentPane
.add(getJTextFieldFeatureFlag(), null);
419 jContentPane
.add(jLabelArch
, null);
420 jContentPane
.add(jArchCheckBox
, null);
422 jContentPane
.add(getJTextFieldTokenSpaceGuid(), null);
423 jContentPane
.add(jLabelTokenSpaceGuid
, null);
424 jContentPane
.add(getJButtonOk(), null);
425 jContentPane
.add(getJButtonCancel(), null);
426 jContentPane
.add(jLabelUsage
, null);
427 jContentPane
.add(getJComboBoxUsage(), null);
433 * This method initializes Usage type, Item type and Datum type
436 private void initFrame() {
437 for (int index
= 0; index
< pcd
.size(); index
++) {
438 jComboBoxCName
.addItem(pcd
.getPcd(index
));
441 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVPcdUsage());
447 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
449 * Override actionPerformed to listen all actions
452 public void actionPerformed(ActionEvent arg0
) {
453 if (arg0
.getSource() == jButtonOk
) {
455 getCurrentPcdCoded();
456 this.returnType
= DataType
.RETURN_TYPE_OK
;
457 this.setVisible(false);
461 if (arg0
.getSource() == jButtonCancel
) {
462 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
463 this.setVisible(false);
468 * Data validation for all fields
470 * @retval true - All datas are valid
471 * @retval false - At least one data is invalid
474 public boolean checkAdd() {
476 // Check if all fields have correct data types
482 if (!isEmpty(this.jComboBoxCName
.getSelectedItem().toString())) {
483 if (!DataValidation
.isC_NameType(this.jComboBoxCName
.getSelectedItem().toString())) {
484 Log
.wrn("Update PcdCoded", "Incorrect data type for C Name");
490 // Check TokenSpaceGuid
492 if (!isEmpty(this.jTextFieldTokenSpaceGuid
.getText())) {
493 if (!DataValidation
.isC_NameType(this.jTextFieldTokenSpaceGuid
.getText())) {
494 Log
.wrn("Update PcdCoded",
495 "Incorrect data type for the selected pcd entry, please check in in spd file");
501 // Check DefaultValue
503 if (!isEmpty(this.jTextFieldDefaultValue
.getText())) {
504 if (!DataValidation
.isDefaultValueType(this.jTextFieldDefaultValue
.getText())) {
505 Log
.wrn("Update PcdCoded", "Incorrect data type for Default Value");
513 if (isEmpty(this.jTextAreaHelpText
.getText())) {
514 Log
.wrn("Update PcdCoded", "Help Text should not be empty");
521 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
522 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
523 Log
.wrn("Update PcdCoded", "Incorrect data type for Feature Flag");
531 private PcdCodedIdentification
getCurrentPcdCoded() {
532 String arg0
= this.jComboBoxCName
.getSelectedItem().toString();
533 String arg1
= this.jTextFieldTokenSpaceGuid
.getText();
535 String arg2
= this.jTextFieldFeatureFlag
.getText();
536 Vector
<String
> arg3
= this.jArchCheckBox
.getSelectedItemsVector();
538 String arg4
= this.jTextFieldDefaultValue
.getText();
539 String arg5
= this.jTextAreaHelpText
.getText();
540 String arg6
= this.jComboBoxItemType
.getSelectedItem().toString();
541 String arg7
= this.jComboBoxUsage
.getSelectedItem().toString();
542 if (arg7
.equals(DataType
.EMPTY_SELECT_ITEM
)) {
546 id
= new PcdCodedIdentification(arg0
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
, arg7
);
550 public PcdCodedIdentification
getId() {
554 public void setId(PcdCodedIdentification id
) {
561 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
563 * Reflesh the frame when selected item changed
566 public void itemStateChanged(ItemEvent arg0
) {
567 int index
= this.jComboBoxCName
.getSelectedIndex();
568 if (arg0
.getSource() == this.jComboBoxCName
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {
569 if (pcd
.getPcd(index
).getGuidCName() == null || isEmpty(pcd
.getPcd(index
).getGuidCName())
570 || pcd
.getPcd(index
).getType() == null || pcd
.getPcd(index
).getHelp() == null
571 || isEmpty(pcd
.getPcd(index
).getHelp())) {
572 Log
.wrn("select pcd entry when editing msa",
573 "The selected is defined incorrectly.\r\nPlease check it in spd file");
575 this.jTextFieldTokenSpaceGuid
.setText(pcd
.getPcd(index
).getGuidCName());
576 Tools
.generateComboBoxByVector(this.jComboBoxItemType
, pcd
.getPcd(index
).getType());
577 this.jTextAreaHelpText
.setText(pcd
.getPcd(index
).getHelp());
578 this.jTextAreaHelpText
.setSelectionStart(0);
579 this.jTextAreaHelpText
.setSelectionEnd(0);