3 The file is used to create, update Ppi 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
.Ppis
.PpisIdentification
;
40 import org
.tianocore
.frameworkwizard
.workspace
.WorkspaceTools
;
43 * The class is used to create, update Ppi section of the MSA file
48 public class PpisDlg
extends IDialog
implements ItemListener
{
51 // / Define class Serial Version UID
53 private static final long serialVersionUID
= -4284901202357037724L;
56 // Define class members
58 private JPanel jContentPane
= null;
60 private JLabel jLabelC_Name
= null;
62 private JComboBox jComboBoxCName
= null;
64 private JTextField jTextFieldFeatureFlag
= null;
66 private JLabel jLabelFeatureFlag
= null;
68 private JLabel jLabelUsage
= null;
70 private JComboBox jComboBoxUsage
= null;
72 private JLabel jLabelPpiType
= null;
74 private StarLabel jStarLabel1
= null;
76 private StarLabel jStarLabel2
= null;
78 private StarLabel jStarLabel3
= null;
80 private JComboBox jComboBoxPpiType
= null;
82 private JLabel jLabelArch
= null;
84 private JScrollPane jScrollPane
= null;
86 private JLabel jLabelHelpText
= null;
88 private JTextArea jTextAreaHelpText
= null;
90 private JScrollPane jScrollPaneHelpText
= null;
92 private ArchCheckBox jArchCheckBox
= null;
94 private JButton jButtonOk
= null;
96 private JButton jButtonCancel
= null;
101 private PpisIdentification id
= null;
103 private WorkspaceTools wt
= new WorkspaceTools();
105 private EnumerationData ed
= new EnumerationData();
108 * This method initializes jComboBoxPpiType
110 * @return javax.swing.JComboBox
112 private JComboBox
getJComboBoxPpiType() {
113 if (jComboBoxPpiType
== null) {
114 jComboBoxPpiType
= new JComboBox();
115 jComboBoxPpiType
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
116 jComboBoxPpiType
.setPreferredSize(new java
.awt
.Dimension(320, 20));
117 jComboBoxPpiType
.addItemListener(this);
119 .setToolTipText("<html>PPIs are named by GUID.<br>PPI Notify is consumed via a register PPI Notify mechanism");
121 return jComboBoxPpiType
;
125 * This method initializes jTextFieldC_Name
127 * @return javax.swing.JTextField jTextFieldC_Name
130 private JComboBox
getJComboBoxCName() {
131 if (jComboBoxCName
== null) {
132 jComboBoxCName
= new JComboBox();
133 jComboBoxCName
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
134 jComboBoxCName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
135 jComboBoxCName
.setToolTipText("Select Guid C Name of PPI");
137 return jComboBoxCName
;
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(168, 62, 320, 20));
150 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
152 .setToolTipText("<html><table><tr><td colspan=2 align=center><b>PPI</b></td></tr><tr><td>ALWAYS_CONSUMED</td><td>Module always consumes the PPI</td></tr><tr><td>SOMETIMES_CONSUMED</td><td>Module sometimes consumes the PPI</td></tr><tr><td>ALWAYS_PRODUCED</td><td>Module always produces the PPI</td></tr><tr><td>SOMETIMES_PRODUCED</td><td>Module sometimes produces the PPI</td></tr><tr><td colspan=2 align=center><b>PPI Notify</b></td></tr><tr><td>SOMETIMES_CONSUMED</td><td>Module will consume the PPI if it is produced. Consumption<br>is defined by executing the PPI notify function</td></tr></table></html>");
154 return jComboBoxUsage
;
158 * This method initializes jTextFieldFeatureFlag
160 * @return javax.swing.JTextField jTextFieldFeatureFlag
163 private JTextField
getJTextFieldFeatureFlag() {
164 if (jTextFieldFeatureFlag
== null) {
165 jTextFieldFeatureFlag
= new JTextField();
166 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 132, 320, 20));
167 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
168 jTextFieldFeatureFlag
.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");
170 return jTextFieldFeatureFlag
;
174 * This method initializes jScrollPane
176 * @return javax.swing.JScrollPane
178 private JScrollPane
getJScrollPane() {
179 if (jScrollPane
== null) {
180 jScrollPane
= new JScrollPane();
181 jScrollPane
.setViewportView(getJContentPane());
187 * This method initializes jTextAreaHelpText
189 * @return javax.swing.JTextArea
192 private JTextArea
getJTextAreaHelpText() {
193 if (jTextAreaHelpText
== null) {
194 jTextAreaHelpText
= new JTextArea();
195 jTextAreaHelpText
.setLineWrap(true);
196 jTextAreaHelpText
.setWrapStyleWord(true);
198 return jTextAreaHelpText
;
202 * This method initializes jScrollPaneHelpText
204 * @return javax.swing.JScrollPane
207 private JScrollPane
getJScrollPaneHelpText() {
208 if (jScrollPaneHelpText
== null) {
209 jScrollPaneHelpText
= new JScrollPane();
210 jScrollPaneHelpText
.setHorizontalScrollBarPolicy(javax
.swing
.JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER
);
211 jScrollPaneHelpText
.setSize(new java
.awt
.Dimension(320, 40));
212 jScrollPaneHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 40));
213 jScrollPaneHelpText
.setLocation(new java
.awt
.Point(168, 87));
214 jScrollPaneHelpText
.setViewportView(getJTextAreaHelpText());
216 return jScrollPaneHelpText
;
220 * This method initializes jButtonOk
222 * @return javax.swing.JButton
225 private JButton
getJButtonOk() {
226 if (jButtonOk
== null) {
227 jButtonOk
= new JButton();
228 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 187, 90, 20));
229 jButtonOk
.setText("Ok");
230 jButtonOk
.addActionListener(this);
236 * This method initializes jButtonCancel
238 * @return javax.swing.JButton
241 private JButton
getJButtonCancel() {
242 if (jButtonCancel
== null) {
243 jButtonCancel
= new JButton();
244 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 187, 90, 20));
245 jButtonCancel
.setText("Cancel");
246 jButtonCancel
.addActionListener(this);
248 return jButtonCancel
;
251 public static void main(String
[] args
) {
256 * This method initializes this
259 private void init() {
260 this.setSize(505, 260);
261 this.setContentPane(getJScrollPane());
262 this.setTitle("PPI Definitions");
268 * This method initializes this Fill values to all fields if these values are
271 * @param inProtocolsId
274 private void init(PpisIdentification inPpisId
) {
278 if (this.id
!= null) {
279 this.jComboBoxCName
.setSelectedItem(id
.getName());
280 this.jComboBoxPpiType
.setSelectedItem(id
.getType());
281 this.jComboBoxUsage
.setSelectedItem(id
.getUsage());
282 this.jTextAreaHelpText
.setText(id
.getHelp());
283 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
284 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
289 * This is the override edit constructor
291 * @param inProtocolsIdentification
295 public PpisDlg(PpisIdentification inPpisIdentification
, IFrame iFrame
) {
297 init(inPpisIdentification
);
301 * This method initializes jContentPane
303 * @return javax.swing.JPanel jContentPane
306 private JPanel
getJContentPane() {
307 if (jContentPane
== null) {
308 jStarLabel1
= new StarLabel();
309 jStarLabel1
.setLocation(new java
.awt
.Point(2, 12));
310 jLabelPpiType
= new JLabel();
311 jLabelPpiType
.setBounds(new java
.awt
.Rectangle(12, 12, 168, 20));
312 jLabelPpiType
.setText("Select Ppi Type");
314 jStarLabel2
= new StarLabel();
315 jStarLabel2
.setLocation(new java
.awt
.Point(2, 37));
316 jLabelC_Name
= new JLabel();
317 jLabelC_Name
.setText("PPI GUID C Name");
318 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(12, 37, 168, 20));
320 jStarLabel3
= new StarLabel();
321 jStarLabel3
.setLocation(new java
.awt
.Point(2, 62));
322 jLabelUsage
= new JLabel();
323 jLabelUsage
.setText("Usage");
324 jLabelUsage
.setBounds(new java
.awt
.Rectangle(12, 62, 168, 20));
326 jLabelHelpText
= new JLabel();
327 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 87, 168, 20));
328 jLabelHelpText
.setText("Help Text");
330 jLabelFeatureFlag
= new JLabel();
331 jLabelFeatureFlag
.setText("Feature Flag Expression");
332 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 132, 168, 20));
334 jLabelArch
= new JLabel();
335 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 157, 168, 20));
336 jLabelArch
.setText("Supported Architectures");
337 jArchCheckBox
= new ArchCheckBox();
338 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 157, 320, 20));
339 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
341 jContentPane
= new JPanel();
342 jContentPane
.setLayout(null);
343 jContentPane
.setPreferredSize(new java
.awt
.Dimension(485, 215));
345 jContentPane
.add(jStarLabel1
, null);
346 jContentPane
.add(jLabelPpiType
, null);
347 jContentPane
.add(getJComboBoxPpiType(), null);
348 jContentPane
.add(jStarLabel2
, null);
349 jContentPane
.add(jLabelC_Name
, null);
350 jContentPane
.add(getJComboBoxCName(), null);
351 jContentPane
.add(jStarLabel3
, null);
352 jContentPane
.add(jLabelUsage
, null);
353 jContentPane
.add(getJComboBoxUsage(), null);
354 jContentPane
.add(jLabelHelpText
, null);
355 jContentPane
.add(getJScrollPaneHelpText(), null);
356 jContentPane
.add(jLabelFeatureFlag
, null);
357 jContentPane
.add(getJTextFieldFeatureFlag(), null);
358 jContentPane
.add(jLabelArch
, null);
359 jContentPane
.add(jArchCheckBox
, null);
360 jContentPane
.add(getJButtonOk(), null);
361 jContentPane
.add(getJButtonCancel(), null);
367 * This method initializes Usage type
370 private void initFrame() {
371 Tools
.generateComboBoxByVector(jComboBoxCName
, wt
.getAllPpiDeclarationsFromWorkspace());
372 Tools
.generateComboBoxByVector(jComboBoxPpiType
, ed
.getVPpiType());
373 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVPpiUsage());
379 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
381 * Override actionPerformed to listen all actions
384 public void actionPerformed(ActionEvent arg0
) {
385 if (arg0
.getSource() == jButtonOk
) {
388 this.returnType
= DataType
.RETURN_TYPE_OK
;
389 this.setVisible(false);
393 if (arg0
.getSource() == jButtonCancel
) {
394 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
395 this.setVisible(false);
400 * Data validation for all fields
402 * @retval true - All datas are valid
403 * @retval false - At least one data is invalid
406 public boolean checkAdd() {
408 // Check if all fields have correct data types
414 if (!isEmpty(this.jComboBoxCName
.getSelectedItem().toString())) {
415 if (!DataValidation
.isC_NameType(this.jComboBoxCName
.getSelectedItem().toString())) {
416 Log
.wrn("Update Ppis", "Incorrect data type for Ppi/PpiNotify Name");
424 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
425 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
426 Log
.wrn("Update Ppis", "Incorrect data type for Feature Flag");
434 private PpisIdentification
getCurrentPpis() {
435 String arg0
= this.jComboBoxCName
.getSelectedItem().toString();
436 String arg1
= this.jComboBoxPpiType
.getSelectedItem().toString();
437 String arg2
= this.jComboBoxUsage
.getSelectedItem().toString();
439 String arg3
= this.jTextFieldFeatureFlag
.getText();
440 Vector
<String
> arg4
= this.jArchCheckBox
.getSelectedItemsVector();
441 String arg5
= this.jTextAreaHelpText
.getText();
443 id
= new PpisIdentification(arg0
, arg1
, arg2
, arg3
, arg4
, arg5
);
448 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
450 * Reflesh the frame when selected item changed
454 public void itemStateChanged(ItemEvent arg0
) {
455 if (arg0
.getSource() == this.jComboBoxPpiType
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {
456 if (this.jComboBoxPpiType
.getSelectedItem().toString().equals(ed
.getVPpiType().get(0))) {
457 Tools
.generateComboBoxByVector(this.jComboBoxUsage
, ed
.getVPpiUsage());
459 Tools
.generateComboBoxByVector(this.jComboBoxUsage
, ed
.getVPpiNotifyUsage());
464 public PpisIdentification
getId() {
468 public void setId(PpisIdentification id
) {