]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/dialog/EventsDlg.java
1. Fix EDKT496 Framework Wizard should allow user to pick up a Protocol Guid to tag...
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / EventsDlg.java
... / ...
CommitLineData
1/** @file\r
2 \r
3 The file is used to create, update Events section of the MSA file\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard.module.ui.dialog;\r
16\r
17import java.awt.event.ActionEvent;\r
18import java.util.Vector;\r
19\r
20import javax.swing.JButton;\r
21import javax.swing.JComboBox;\r
22import javax.swing.JLabel;\r
23import javax.swing.JPanel;\r
24import javax.swing.JScrollPane;\r
25import javax.swing.JTextField;\r
26import javax.swing.JTextArea;\r
27\r
28import org.tianocore.frameworkwizard.common.DataType;\r
29import org.tianocore.frameworkwizard.common.DataValidation;\r
30import org.tianocore.frameworkwizard.common.EnumerationData;\r
31import org.tianocore.frameworkwizard.common.Log;\r
32import org.tianocore.frameworkwizard.common.Tools;\r
33import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
34import org.tianocore.frameworkwizard.common.ui.IComboBox;\r
35import org.tianocore.frameworkwizard.common.ui.IDialog;\r
36import org.tianocore.frameworkwizard.common.ui.IFrame;\r
37import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
38import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
39import org.tianocore.frameworkwizard.module.Identifications.Events.EventsIdentification;\r
40import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
41import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
42\r
43/**\r
44 * The class is used to create, update Events section of the MSA file \r
45 * It extends IDialog\r
46 * \r
47 * @since ModuleEditor 1.0\r
48 * \r
49 */\r
50public class EventsDlg extends IDialog {\r
51\r
52 // /\r
53 // / Define class Serial Version UID\r
54 // /\r
55 private static final long serialVersionUID = -4396143706422842331L;\r
56\r
57 //\r
58 // Define class members\r
59 //\r
60 private JPanel jContentPane = null;\r
61\r
62 private JLabel jLabelEventType = null;\r
63\r
64 private JLabel jLabelC_Name = null;\r
65\r
66 private IComboBox iComboBoxGuidC_Name = null;\r
67\r
68 private JLabel jLabelUsage = null;\r
69\r
70 private JLabel jLabelGroup = null;\r
71\r
72 private JComboBox jComboBoxUsage = null;\r
73\r
74 private JComboBox jComboBoxEventGroup = null;\r
75\r
76 private StarLabel jStarLabel1 = null;\r
77\r
78 private StarLabel jStarLabel2 = null;\r
79\r
80 private StarLabel jStarLabel3 = null;\r
81\r
82 private StarLabel jStarLabel4 = null;\r
83\r
84 private JComboBox jComboBoxEventsType = null;\r
85\r
86 private JScrollPane jScrollPane = null;\r
87\r
88 private JLabel jLabelArch = null;\r
89\r
90 private JLabel jLabelHelpText = null;\r
91\r
92 private JTextArea jTextAreaHelpText = null;\r
93\r
94 private JScrollPane jScrollPaneHelpText = null;\r
95\r
96 private JLabel jLabelFeatureFlag = null;\r
97\r
98 private JTextField jTextFieldFeatureFlag = null;\r
99\r
100 private ArchCheckBox jArchCheckBox = null;\r
101\r
102 private JButton jButtonOk = null;\r
103\r
104 private JButton jButtonCancel = null;\r
105\r
106 //\r
107 // Not used by UI\r
108 //\r
109 private EventsIdentification id = null;\r
110\r
111 private EnumerationData ed = new EnumerationData();\r
112\r
113 private WorkspaceTools wt = new WorkspaceTools();\r
114\r
115 /**\r
116 * This method initializes jComboBoxType\r
117 * \r
118 * @return javax.swing.JComboBox jComboBoxType\r
119 * \r
120 */\r
121 private JComboBox getJComboBoxEventsType() {\r
122 if (jComboBoxEventsType == null) {\r
123 jComboBoxEventsType = new JComboBox();\r
124 jComboBoxEventsType.setBounds(new java.awt.Rectangle(168, 12, 320, 20));\r
125 jComboBoxEventsType.setPreferredSize(new java.awt.Dimension(320, 20));\r
126 jComboBoxEventsType\r
127 .setToolTipText("<html>Select CreateEvents if the Module has an event that is waiting to be signaled.<br>"\r
128 + "Select SignalEvents if the Module will signal all events in an event group.<br>"\r
129 + "NOTE: Signal events are named by GUID.</html>");\r
130 }\r
131 return jComboBoxEventsType;\r
132 }\r
133\r
134 /**\r
135 * This method initializes jTextFieldC_Name\r
136 * \r
137 * @return javax.swing.JTextField jTextFieldC_Name\r
138 * \r
139 */\r
140 private IComboBox getIComboBoxGuidC_Name() {\r
141 if (iComboBoxGuidC_Name == null) {\r
142 iComboBoxGuidC_Name = new IComboBox();\r
143 iComboBoxGuidC_Name.setBounds(new java.awt.Rectangle(168, 37, 320, 20));\r
144 iComboBoxGuidC_Name.setPreferredSize(new java.awt.Dimension(320, 20));\r
145 iComboBoxGuidC_Name.setToolTipText("Select the GUID C Name of the Event");\r
146 }\r
147 return iComboBoxGuidC_Name;\r
148 }\r
149\r
150 /**\r
151 * This method initializes jComboBoxEventsType\r
152 * \r
153 * @return javax.swing.JComboBox\r
154 */\r
155 private JComboBox getJComboBoxEventGroup() {\r
156 if (jComboBoxEventGroup == null) {\r
157 jComboBoxEventGroup = new JComboBox();\r
158 jComboBoxEventGroup.setBounds(new java.awt.Rectangle(168, 62, 320, 20));\r
159 jComboBoxEventGroup.setPreferredSize(new java.awt.Dimension(320, 20));\r
160 jComboBoxEventGroup.setToolTipText("Select Type of Event: Guid or Timer.");\r
161\r
162 }\r
163 return jComboBoxEventGroup;\r
164 }\r
165\r
166 /**\r
167 * This method initializes jComboBoxUsage\r
168 * \r
169 * @return javax.swing.JComboBox jComboBoxUsage\r
170 * \r
171 */\r
172 private JComboBox getJComboBoxUsage() {\r
173 if (jComboBoxUsage == null) {\r
174 jComboBoxUsage = new JComboBox();\r
175 jComboBoxUsage.setBounds(new java.awt.Rectangle(168, 87, 320, 20));\r
176 jComboBoxUsage.setPreferredSize(new java.awt.Dimension(320, 20));\r
177 jComboBoxUsage\r
178 .setToolTipText("<html><table>"\r
179 + "<tr><td colspan=2 align=center><b>Create Events</b></td></tr>"\r
180 + "<tr><td>ALWAYS_CONSUMED</td><td>Module registers a notification function and REQUIRES that it be<br>"\r
181 + "executed for the module to fully function.</td></tr>"\r
182 + "<tr><td>SOMETIMES_CONSUMED</td><td>Module registers a notification function and calls the function<br>"\r
183 + "when it is signaled</td></tr><tr><td colspan=2 align=center><b>Signal Events</b></td></tr>"\r
184 + "<tr><td>ALWAYS_PRODUCED</td><td>Module will Always signal the event</td></tr>"\r
185 + "<tr><td>SOMETIMES_PRODUCED</td><td>Module will sometimes signal the event</td></tr>"\r
186 + "</table></html>");\r
187 }\r
188 return jComboBoxUsage;\r
189 }\r
190\r
191 /**\r
192 * This method initializes jScrollPane\r
193 * \r
194 * @return javax.swing.JScrollPane\r
195 */\r
196 private JScrollPane getJScrollPane() {\r
197 if (jScrollPane == null) {\r
198 jScrollPane = new JScrollPane();\r
199 jScrollPane.setViewportView(getJContentPane());\r
200 }\r
201 return jScrollPane;\r
202 }\r
203\r
204 /**\r
205 * This method initializes jTextFieldFeatureFlag\r
206 * \r
207 * @return javax.swing.JTextField\r
208 */\r
209 private JTextField getJTextFieldFeatureFlag() {\r
210 if (jTextFieldFeatureFlag == null) {\r
211 jTextFieldFeatureFlag = new JTextField();\r
212 jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(168, 182, 320, 20));\r
213 jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(320, 20));\r
214 jTextFieldFeatureFlag.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");\r
215 jTextFieldFeatureFlag.setEnabled(false);\r
216 }\r
217 return jTextFieldFeatureFlag;\r
218 }\r
219\r
220 /**\r
221 * This method initializes jTextAreaHelpText\r
222 * \r
223 * @return javax.swing.JTextArea\r
224 * \r
225 */\r
226 private JTextArea getJTextAreaHelpText() {\r
227 if (jTextAreaHelpText == null) {\r
228 jTextAreaHelpText = new JTextArea();\r
229 jTextAreaHelpText.setLineWrap(true);\r
230 jTextAreaHelpText.setWrapStyleWord(true);\r
231 }\r
232 return jTextAreaHelpText;\r
233 }\r
234\r
235 /**\r
236 * This method initializes jScrollPaneHelpText\r
237 * \r
238 * @return javax.swing.JScrollPane\r
239 * \r
240 */\r
241 private JScrollPane getJScrollPaneHelpText() {\r
242 if (jScrollPaneHelpText == null) {\r
243 jScrollPaneHelpText = new JScrollPane();\r
244 jScrollPaneHelpText.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
245 jScrollPaneHelpText.setSize(new java.awt.Dimension(320, 40));\r
246 jScrollPaneHelpText.setPreferredSize(new java.awt.Dimension(320, 40));\r
247 jScrollPaneHelpText.setLocation(new java.awt.Point(168, 112));\r
248 jScrollPaneHelpText.setViewportView(getJTextAreaHelpText());\r
249 }\r
250 return jScrollPaneHelpText;\r
251 }\r
252\r
253 /**\r
254 * This method initializes jButtonOk\r
255 * \r
256 * @return javax.swing.JButton\r
257 * \r
258 */\r
259 private JButton getJButtonOk() {\r
260 if (jButtonOk == null) {\r
261 jButtonOk = new JButton();\r
262 jButtonOk.setBounds(new java.awt.Rectangle(290, 212, 90, 20));\r
263 jButtonOk.setText("Ok");\r
264 jButtonOk.addActionListener(this);\r
265 }\r
266 return jButtonOk;\r
267 }\r
268\r
269 /**\r
270 * This method initializes jButtonCancel\r
271 * \r
272 * @return javax.swing.JButton\r
273 * \r
274 */\r
275 private JButton getJButtonCancel() {\r
276 if (jButtonCancel == null) {\r
277 jButtonCancel = new JButton();\r
278 jButtonCancel.setBounds(new java.awt.Rectangle(390, 212, 90, 20));\r
279 jButtonCancel.setText("Cancel");\r
280 jButtonCancel.addActionListener(this);\r
281 }\r
282 return jButtonCancel;\r
283 }\r
284\r
285 public static void main(String[] args) {\r
286\r
287 }\r
288\r
289 /**\r
290 * This method initializes this\r
291 * \r
292 */\r
293 private void init() {\r
294 this.setSize(505, 280);\r
295 this.setContentPane(getJScrollPane());\r
296 this.setTitle("Events");\r
297 initFrame();\r
298 this.setViewMode(false);\r
299 this.centerWindow();\r
300 }\r
301\r
302 /**\r
303 * This method initializes this Fill values to all fields if these values are\r
304 * not empty\r
305 * \r
306 * @param inEventsId\r
307 * \r
308 */\r
309 private void init(EventsIdentification inEventsId, ModuleIdentification mid) {\r
310 init();\r
311 this.id = inEventsId;\r
312\r
313 //\r
314 // Init arch with module's arch\r
315 //\r
316 this.jArchCheckBox.setEnabledItems(wt.getModuleArch(mid));\r
317\r
318 //\r
319 // Get defined guids from dependent packages\r
320 //\r
321 Vector<PackageIdentification> vpid = wt.getPackageDependenciesOfModule(mid);\r
322 if (vpid.size() <= 0) {\r
323 Log\r
324 .wrn("Init Guid",\r
325 "This module hasn't defined any package dependency, so there is no guid value can be added for event");\r
326 }\r
327 //\r
328 // Init guids drop down list\r
329 //\r
330 Tools\r
331 .generateComboBoxByVector(iComboBoxGuidC_Name,\r
332 wt.getAllGuidDeclarationsFromPackages(vpid, EnumerationData.GUID_TYPE_EFI_EVENT));\r
333\r
334 if (this.id != null) {\r
335 this.iComboBoxGuidC_Name.setSelectedItem(id.getName());\r
336 this.jComboBoxEventsType.setSelectedItem(id.getType());\r
337 this.jComboBoxUsage.setSelectedItem(id.getUsage());\r
338 this.jTextAreaHelpText.setText(id.getHelp());\r
339\r
340 jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
341 this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
342 this.jComboBoxEventGroup.setSelectedItem(id.getGroup());\r
343 }\r
344 }\r
345\r
346 /**\r
347 * This is the override edit constructor\r
348 * \r
349 * @param inEventsIdentification\r
350 * @param iFrame\r
351 * \r
352 */\r
353 public EventsDlg(EventsIdentification inEventsIdentification, IFrame iFrame, ModuleIdentification mid) {\r
354 super(iFrame, true);\r
355 init(inEventsIdentification, mid);\r
356 }\r
357\r
358 /**\r
359 * Disable all components when the mode is view\r
360 * \r
361 * @param isView\r
362 * true - The view mode; false - The non-view mode\r
363 * \r
364 */\r
365 public void setViewMode(boolean isView) {\r
366 if (isView) {\r
367 this.iComboBoxGuidC_Name.setEnabled(!isView);\r
368 this.jComboBoxUsage.setEnabled(!isView);\r
369 }\r
370 }\r
371\r
372 /**\r
373 * This method initializes jContentPane\r
374 * \r
375 * @return javax.swing.JPanel jContentPane\r
376 * \r
377 */\r
378 private JPanel getJContentPane() {\r
379 if (jContentPane == null) {\r
380 jStarLabel1 = new StarLabel();\r
381 jStarLabel1.setLocation(new java.awt.Point(2, 12));\r
382 jLabelEventType = new JLabel();\r
383 jLabelEventType.setText("Select Event Type");\r
384 jLabelEventType.setBounds(new java.awt.Rectangle(12, 12, 168, 20));\r
385\r
386 jStarLabel2 = new StarLabel();\r
387 jStarLabel2.setLocation(new java.awt.Point(2, 37));\r
388 jLabelC_Name = new JLabel();\r
389 jLabelC_Name.setText("Guid C Name");\r
390 jLabelC_Name.setBounds(new java.awt.Rectangle(12, 37, 168, 20));\r
391\r
392 jStarLabel3 = new StarLabel();\r
393 jStarLabel3.setLocation(new java.awt.Point(2, 62));\r
394 jLabelGroup = new JLabel();\r
395 jLabelGroup.setText("Event Group Type");\r
396 jLabelGroup.setBounds(new java.awt.Rectangle(12, 62, 168, 20));\r
397\r
398 jStarLabel4 = new StarLabel();\r
399 jStarLabel4.setLocation(new java.awt.Point(2, 87));\r
400 jLabelUsage = new JLabel();\r
401 jLabelUsage.setText("Usage");\r
402 jLabelUsage.setBounds(new java.awt.Rectangle(12, 87, 168, 20));\r
403\r
404 jLabelHelpText = new JLabel();\r
405 jLabelHelpText.setBounds(new java.awt.Rectangle(12, 112, 168, 20));\r
406 jLabelHelpText.setText("Help Text");\r
407\r
408 jLabelFeatureFlag = new JLabel();\r
409 jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 182, 168, 20));\r
410 jLabelFeatureFlag.setText("Feature Flag Expression");\r
411 jLabelFeatureFlag.setEnabled(false);\r
412\r
413 jLabelArch = new JLabel();\r
414 jLabelArch.setBounds(new java.awt.Rectangle(12, 157, 168, 20));\r
415 jLabelArch.setText("Supported Architectures");\r
416 jArchCheckBox = new ArchCheckBox();\r
417 jArchCheckBox.setBounds(new java.awt.Rectangle(168, 157, 320, 20));\r
418 jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
419\r
420 jContentPane = new JPanel();\r
421 jContentPane.setLayout(null);\r
422 jContentPane.setPreferredSize(new java.awt.Dimension(485, 235));\r
423\r
424 jContentPane.add(jStarLabel1, null);\r
425 jContentPane.add(jLabelEventType, null);\r
426 jContentPane.add(getJComboBoxEventsType(), null);\r
427 jContentPane.add(jStarLabel2, null);\r
428 jContentPane.add(jLabelC_Name, null);\r
429 jContentPane.add(getIComboBoxGuidC_Name(), null);\r
430 jContentPane.add(jStarLabel3, null);\r
431 jContentPane.add(jLabelGroup, null);\r
432 jContentPane.add(getJComboBoxEventGroup(), null);\r
433 jContentPane.add(jStarLabel4, null);\r
434 jContentPane.add(jLabelUsage, null);\r
435 jContentPane.add(getJComboBoxUsage(), null);\r
436 jContentPane.add(jLabelHelpText, null);\r
437 jContentPane.add(getJScrollPaneHelpText(), null);\r
438 jContentPane.add(jLabelFeatureFlag, null);\r
439 jContentPane.add(getJTextFieldFeatureFlag(), null);\r
440 jContentPane.add(jLabelArch, null);\r
441 jContentPane.add(jArchCheckBox, null);\r
442 jContentPane.add(getJButtonOk(), null);\r
443 jContentPane.add(getJButtonCancel(), null);\r
444\r
445 }\r
446 return jContentPane;\r
447 }\r
448\r
449 /**\r
450 * This method initializes events groups and usage type\r
451 * \r
452 */\r
453 private void initFrame() {\r
454 Tools.generateComboBoxByVector(jComboBoxEventsType, ed.getVEventType());\r
455 Tools.generateComboBoxByVector(jComboBoxEventGroup, ed.getVEventGroup());\r
456 Tools.generateComboBoxByVector(jComboBoxUsage, ed.getVEventUsage());\r
457 }\r
458\r
459 /*\r
460 * (non-Javadoc)\r
461 * \r
462 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
463 * \r
464 * Override actionPerformed to listen all actions\r
465 * \r
466 */\r
467 public void actionPerformed(ActionEvent arg0) {\r
468 if (arg0.getSource() == jButtonOk) {\r
469 if (checkAdd()) {\r
470 getCurrentEvents();\r
471 this.returnType = DataType.RETURN_TYPE_OK;\r
472 this.setVisible(false);\r
473 }\r
474 }\r
475\r
476 if (arg0.getSource() == jButtonCancel) {\r
477 this.returnType = DataType.RETURN_TYPE_CANCEL;\r
478 this.setVisible(false);\r
479 }\r
480 }\r
481\r
482 /**\r
483 * Data validation for all fields\r
484 * \r
485 * @retval true - All datas are valid\r
486 * @retval false - At least one data is invalid\r
487 * \r
488 */\r
489 public boolean checkAdd() {\r
490 //\r
491 // Check if all fields have correct data types\r
492 //\r
493 \r
494 //\r
495 // Check Name\r
496 //\r
497 if (this.iComboBoxGuidC_Name.getSelectedItem() == null) {\r
498 Log.wrn("Update Guids", "Please select one Event Name");\r
499 return false;\r
500 }\r
501\r
502 //\r
503 // Check Name\r
504 //\r
505 if (isEmpty(this.iComboBoxGuidC_Name.getSelectedItem().toString())) {\r
506 Log.wrn("Update Events", "Event Name couldn't be empty");\r
507 return false;\r
508 }\r
509\r
510 if (!isEmpty(this.iComboBoxGuidC_Name.getSelectedItem().toString())) {\r
511 if (!DataValidation.isC_NameType(this.iComboBoxGuidC_Name.getSelectedItem().toString())) {\r
512 Log.wrn("Update Events", "Incorrect data type for Event Name");\r
513 return false;\r
514 }\r
515 }\r
516\r
517 //\r
518 // Check FeatureFlag\r
519 //\r
520 if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
521 if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
522 Log.wrn("Update Events", "Incorrect data type for Feature Flag");\r
523 return false;\r
524 }\r
525 }\r
526\r
527 return true;\r
528 }\r
529\r
530 private EventsIdentification getCurrentEvents() {\r
531 String arg0 = this.iComboBoxGuidC_Name.getSelectedItem().toString();\r
532 String arg1 = this.jComboBoxEventsType.getSelectedItem().toString();\r
533 String arg2 = this.jComboBoxUsage.getSelectedItem().toString();\r
534\r
535 String arg3 = this.jTextFieldFeatureFlag.getText();\r
536 Vector<String> arg4 = this.jArchCheckBox.getSelectedItemsVector();\r
537 String arg5 = this.jTextAreaHelpText.getText();\r
538 String arg6 = this.jComboBoxEventGroup.getSelectedItem().toString();\r
539 id = new EventsIdentification(arg0, arg1, arg2, arg3, arg4, arg5, arg6);\r
540 return id;\r
541 }\r
542\r
543 public EventsIdentification getId() {\r
544 return id;\r
545 }\r
546\r
547 public void setId(EventsIdentification id) {\r
548 this.id = id;\r
549 }\r
550}\r