3 The file is used to create, update Protocol of 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.
16 package org
.tianocore
.frameworkwizard
.module
.ui
.dialog
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ItemEvent
;
20 import java
.awt
.event
.ItemListener
;
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
.JTextField
;
29 import javax
.swing
.JTextArea
;
31 import org
.tianocore
.frameworkwizard
.common
.DataType
;
32 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
33 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
34 import org
.tianocore
.frameworkwizard
.common
.Log
;
35 import org
.tianocore
.frameworkwizard
.common
.Tools
;
36 import org
.tianocore
.frameworkwizard
.common
.ui
.ArchCheckBox
;
37 import org
.tianocore
.frameworkwizard
.common
.ui
.IDialog
;
38 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
39 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
40 import org
.tianocore
.frameworkwizard
.module
.Identifications
.Protocols
.ProtocolsIdentification
;
41 import org
.tianocore
.frameworkwizard
.workspace
.WorkspaceTools
;
44 * The class is used to create, update Protocol of MSA file
49 public class ProtocolsDlg
extends IDialog
implements ItemListener
{
52 // / Define class Serial Version UID
54 private static final long serialVersionUID
= -9084913640747858848L;
57 // Define class members
59 private JPanel jContentPane
= null;
61 private JLabel jLabelC_Name
= null;
63 private JLabel jLabelFeatureFlag
= null;
65 private JTextField jTextFieldFeatureFlag
= null;
67 private JLabel jLabelUsage
= null;
69 private JComboBox jComboBoxUsage
= null;
71 private StarLabel jStarLabel1
= null;
73 private StarLabel jStarLabel2
= null;
75 private StarLabel jStarLabel3
= null;
77 private JLabel jLabelProtocolType
= null;
79 private JLabel jLabelArch
= null;
81 private JScrollPane jScrollPane
= null;
83 private JComboBox jComboBoxProtocolType
= null;
85 private JComboBox jComboBoxCName
= null;
87 private JLabel jLabelHelpText
= null;
89 private JTextArea jTextAreaHelpText
= null;
91 private JScrollPane jScrollPaneHelpText
= null;
93 private ArchCheckBox jArchCheckBox
= null;
95 private JButton jButtonOk
= null;
97 private JButton jButtonCancel
= null;
102 private ProtocolsIdentification id
= null;
104 private WorkspaceTools wt
= new WorkspaceTools();
106 private EnumerationData ed
= new EnumerationData();
109 * This method initializes jTextFieldFeatureFlag
111 * @return javax.swing.JTextField jTextFieldFeatureFlag
114 private JTextField
getJTextFieldFeatureFlag() {
115 if (jTextFieldFeatureFlag
== null) {
116 jTextFieldFeatureFlag
= new JTextField();
117 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 132, 320, 20));
118 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
119 jTextFieldFeatureFlag
.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");
121 return jTextFieldFeatureFlag
;
125 * This method initializes jComboBoxUsage
127 * @return javax.swing.JComboBox jComboBoxUsage
130 private JComboBox
getJComboBoxProtocolUsage() {
131 if (jComboBoxUsage
== null) {
132 jComboBoxUsage
= new JComboBox();
133 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
134 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
136 .setToolTipText("<html><table><tr><td colspan=2 align=center><b>Protocol</b></td></tr>"
137 + "<tr><td>ALWAYS_CONSUMED</td><td>Module always consumes the protocol</td></tr>"
138 + "<tr><td>SOMETIMES_CONSUMES</td><td>Module sometimes consumes the protocol</td></tr>"
139 + "<tr><td>ALWAYS_PRODUCED</td><td>Module always produces the protocol</td></tr>"
140 + "<tr><td>SOMETIMES_PRODUCED</td><td>Module sometimes produces the protocol</td></tr>"
141 + "<tr><td>TO_START</td><td>The protocol is consumed by a Driver Binding protocol <b>Start</b><br>function. The protocol is used in EFI 1.10 driver model</td></tr>"
142 + "<tr><td>BY_START</td><td>Protocol is produced by a Driver Binding protocol <b>Start</b><br>function. The protocol is used in EFI 1.10 driver model</td></tr>"
143 + "<tr><td colspan=2 align=center><b>Protocol Notify</b></td></tr>"
144 + "<tr><td>SOMETIMES_CONSUMED</td><td>Module will consume the protocol if it is produced.<br>Consumption is defined by executing the protocol notify<br>function.</td></tr></table></html>");
146 return jComboBoxUsage
;
150 * This method initializes jScrollPane
152 * @return javax.swing.JScrollPane
154 private JScrollPane
getJScrollPane() {
155 if (jScrollPane
== null) {
156 jScrollPane
= new JScrollPane();
157 jScrollPane
.setViewportView(getJContentPane());
163 * This method initializes jComboBoxProtocolType
165 * @return javax.swing.JComboBox
167 private JComboBox
getJComboBoxProtocolType() {
168 if (jComboBoxProtocolType
== null) {
169 jComboBoxProtocolType
= new JComboBox();
170 jComboBoxProtocolType
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
171 jComboBoxProtocolType
.setPreferredSize(new java
.awt
.Dimension(320, 20));
172 jComboBoxProtocolType
.addItemListener(this);
173 jComboBoxProtocolType
174 .setToolTipText("<html>Select Protocol Type<br>Protocol Notify is a register protocol notify mechanism.");
176 return jComboBoxProtocolType
;
180 * This method initializes jComboBoxCName
182 * @return javax.swing.JComboBox
184 private JComboBox
getJComboBoxCName() {
185 if (jComboBoxCName
== null) {
186 jComboBoxCName
= new JComboBox();
187 jComboBoxCName
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
188 jComboBoxCName
.setPreferredSize(new java
.awt
.Dimension(320, 20));
189 jComboBoxCName
.setToolTipText("Select Guid C Name of the Protocol");
192 return jComboBoxCName
;
196 * This method initializes jTextAreaHelpText
198 * @return javax.swing.JTextArea
201 private JTextArea
getJTextAreaHelpText() {
202 if (jTextAreaHelpText
== null) {
203 jTextAreaHelpText
= new JTextArea();
204 jTextAreaHelpText
.setLineWrap(true);
205 jTextAreaHelpText
.setWrapStyleWord(true);
207 return jTextAreaHelpText
;
211 * This method initializes jScrollPaneHelpText
213 * @return javax.swing.JScrollPane
216 private JScrollPane
getJScrollPaneHelpText() {
217 if (jScrollPaneHelpText
== null) {
218 jScrollPaneHelpText
= new JScrollPane();
219 jScrollPaneHelpText
.setHorizontalScrollBarPolicy(javax
.swing
.JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER
);
220 jScrollPaneHelpText
.setSize(new java
.awt
.Dimension(320, 40));
221 jScrollPaneHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 40));
222 jScrollPaneHelpText
.setLocation(new java
.awt
.Point(168, 87));
223 jScrollPaneHelpText
.setViewportView(getJTextAreaHelpText());
225 return jScrollPaneHelpText
;
229 * This method initializes jButtonOk
231 * @return javax.swing.JButton
234 private JButton
getJButtonOk() {
235 if (jButtonOk
== null) {
236 jButtonOk
= new JButton();
237 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 187, 90, 20));
238 jButtonOk
.setText("Ok");
239 jButtonOk
.addActionListener(this);
245 * This method initializes jButtonCancel
247 * @return javax.swing.JButton
250 private JButton
getJButtonCancel() {
251 if (jButtonCancel
== null) {
252 jButtonCancel
= new JButton();
253 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 187, 90, 20));
254 jButtonCancel
.setText("Cancel");
255 jButtonCancel
.addActionListener(this);
257 return jButtonCancel
;
260 public static void main(String
[] args
) {
265 * This method initializes this
268 private void init() {
269 // Width must be 20 larger than Content Pane PreferredSize width for MSFT
270 // Height must be 45 larger than ContentPane PreferredSize height for MSFT
271 this.setSize(505, 260);
272 this.setContentPane(getJScrollPane());
273 this.setTitle("Protocols");
275 this.setViewMode(false);
280 * This method initializes this Fill values to all fields if these values are
283 * @param inProtocolsId
286 private void init(ProtocolsIdentification inProtocolsId
) {
288 this.id
= inProtocolsId
;
290 if (this.id
!= null) {
291 this.jComboBoxCName
.setSelectedItem(id
.getName());
292 this.jComboBoxProtocolType
.setSelectedItem(id
.getType());
293 this.jComboBoxUsage
.setSelectedItem(id
.getUsage());
294 this.jTextAreaHelpText
.setText(id
.getHelp());
295 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
296 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
301 * This is the override edit constructor
303 * @param inProtocolsIdentification
307 public ProtocolsDlg(ProtocolsIdentification inProtocolsIdentification
, IFrame iFrame
) {
309 init(inProtocolsIdentification
);
313 * Disable all components when the mode is view
316 * true - The view mode; false - The non-view mode
319 public void setViewMode(boolean isView
) {
321 this.jComboBoxUsage
.setEnabled(!isView
);
322 this.jTextFieldFeatureFlag
.setEnabled(!isView
);
327 * This method initializes jContentPane
329 * @return javax.swing.JPanel jContentPane
332 private JPanel
getJContentPane() {
333 if (jContentPane
== null) {
334 jStarLabel1
= new StarLabel();
335 jStarLabel1
.setLocation(new java
.awt
.Point(2, 12));
336 jLabelProtocolType
= new JLabel();
337 jLabelProtocolType
.setBounds(new java
.awt
.Rectangle(12, 12, 155, 20));
338 jLabelProtocolType
.setText("Select Protocol Type");
340 jStarLabel2
= new StarLabel();
341 jStarLabel2
.setLocation(new java
.awt
.Point(2, 37));
342 jLabelC_Name
= new JLabel();
343 jLabelC_Name
.setText("Protocol Guid C Name");
344 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(12, 37, 155, 20));
346 jStarLabel3
= new StarLabel();
347 jStarLabel3
.setLocation(new java
.awt
.Point(2, 62));
348 jLabelUsage
= new JLabel();
349 jLabelUsage
.setText("Usage");
350 jLabelUsage
.setBounds(new java
.awt
.Rectangle(12, 62, 155, 20));
352 jLabelHelpText
= new JLabel();
353 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(12, 87, 155, 20));
354 jLabelHelpText
.setText("Help Text");
356 jLabelFeatureFlag
= new JLabel();
357 jLabelFeatureFlag
.setText("Feature Flag Expression");
358 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 132, 155, 20));
360 jLabelArch
= new JLabel();
361 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 157, 155, 20));
362 jLabelArch
.setText("Supported Architectures");
363 jArchCheckBox
= new ArchCheckBox();
364 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 157, 320, 20));
365 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
367 jContentPane
= new JPanel();
368 jContentPane
.setLayout(null);
369 jContentPane
.setPreferredSize(new java
.awt
.Dimension(485, 215));
371 jContentPane
.add(jStarLabel1
, null);
372 jContentPane
.add(jLabelProtocolType
, null);
373 jContentPane
.add(getJComboBoxProtocolType(), null);
374 jContentPane
.add(jStarLabel2
, null);
375 jContentPane
.add(jLabelC_Name
, null);
376 jContentPane
.add(getJComboBoxCName(), null);
377 jContentPane
.add(jStarLabel3
, null);
378 jContentPane
.add(jLabelUsage
, null);
379 jContentPane
.add(getJComboBoxProtocolUsage(), null);
380 jContentPane
.add(jLabelHelpText
, null);
381 jContentPane
.add(getJScrollPaneHelpText(), null);
382 jContentPane
.add(jLabelFeatureFlag
, null);
383 jContentPane
.add(getJTextFieldFeatureFlag(), null);
384 jContentPane
.add(jLabelArch
, null);
385 jContentPane
.add(jArchCheckBox
, null);
386 jContentPane
.add(getJButtonOk(), null);
387 jContentPane
.add(getJButtonCancel(), null);
393 * This method initializes Usage type
396 private void initFrame() {
397 Tools
.generateComboBoxByVector(jComboBoxProtocolType
, ed
.getVProtocolType());
398 Tools
.generateComboBoxByVector(jComboBoxCName
, wt
.getAllProtocolDeclarationsFromWorkspace());
399 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVProtocolUsage());
405 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
407 * Override actionPerformed to listen all actions
410 public void actionPerformed(ActionEvent arg0
) {
411 if (arg0
.getSource() == jButtonOk
) {
413 getCurrentProtocols();
414 this.returnType
= DataType
.RETURN_TYPE_OK
;
415 this.setVisible(false);
419 if (arg0
.getSource() == jButtonCancel
) {
420 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
421 this.setVisible(false);
426 * Data validation for all fields
428 * @retval true - All datas are valid
429 * @retval false - At least one data is invalid
432 public boolean checkAdd() {
434 // Check if all fields have correct data types
440 if (!isEmpty(this.jComboBoxCName
.getSelectedItem().toString())) {
441 if (!DataValidation
.isC_NameType(this.jComboBoxCName
.getSelectedItem().toString())) {
442 Log
.wrn("Update Protocols", "Incorrect data type for Protocol/ProtocolNotify Name");
450 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
451 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
452 Log
.wrn("Update Protocols", "Incorrect data type for Feature Flag");
460 private ProtocolsIdentification
getCurrentProtocols() {
461 String arg0
= this.jComboBoxCName
.getSelectedItem().toString();
462 String arg1
= this.jComboBoxProtocolType
.getSelectedItem().toString();
463 String arg2
= this.jComboBoxUsage
.getSelectedItem().toString();
465 String arg3
= this.jTextFieldFeatureFlag
.getText();
466 Vector
<String
> arg4
= this.jArchCheckBox
.getSelectedItemsVector();
467 String arg5
= this.jTextAreaHelpText
.getText();
468 id
= new ProtocolsIdentification(arg0
, arg1
, arg2
, arg3
, arg4
, arg5
);
475 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
477 * Reflesh the frame when selected item changed
481 public void itemStateChanged(ItemEvent arg0
) {
482 if (arg0
.getSource() == this.jComboBoxProtocolType
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {
483 if (this.jComboBoxProtocolType
.getSelectedItem().toString().equals(ed
.getVProtocolType().get(0))) {
484 Tools
.generateComboBoxByVector(this.jComboBoxUsage
, ed
.getVProtocolUsage());
486 Tools
.generateComboBoxByVector(this.jComboBoxUsage
, ed
.getVProtocolNotifyUsage());
491 public ProtocolsIdentification
getId() {
495 public void setId(ProtocolsIdentification id
) {