]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/dialog/EventsDlg.java
1. Fix EDKT528: Framework wizard should not force user to specify a GuidCName for...
[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 this.iComboBoxGuidC_Name.insertItemAt(DataType.EMPTY_SELECT_ITEM, 0);\r
335 this.iComboBoxGuidC_Name.setSelectedIndex(0);\r
336\r
337 if (this.id != null) {\r
338 String tmpName = id.getName();\r
339 if (isEmpty(tmpName)) {\r
340 tmpName = DataType.EMPTY_SELECT_ITEM;\r
341 }\r
342\r
343 this.iComboBoxGuidC_Name.setSelectedItem(tmpName);\r
344 this.jComboBoxEventsType.setSelectedItem(id.getType());\r
345 this.jComboBoxUsage.setSelectedItem(id.getUsage());\r
346 this.jTextAreaHelpText.setText(id.getHelp());\r
347\r
348 jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
349 this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
350 this.jComboBoxEventGroup.setSelectedItem(id.getGroup());\r
351 }\r
352 }\r
353\r
354 /**\r
355 * This is the override edit constructor\r
356 * \r
357 * @param inEventsIdentification\r
358 * @param iFrame\r
359 * \r
360 */\r
361 public EventsDlg(EventsIdentification inEventsIdentification, IFrame iFrame, ModuleIdentification mid) {\r
362 super(iFrame, true);\r
363 init(inEventsIdentification, mid);\r
364 }\r
365\r
366 /**\r
367 * Disable all components when the mode is view\r
368 * \r
369 * @param isView\r
370 * true - The view mode; false - The non-view mode\r
371 * \r
372 */\r
373 public void setViewMode(boolean isView) {\r
374 if (isView) {\r
375 this.iComboBoxGuidC_Name.setEnabled(!isView);\r
376 this.jComboBoxUsage.setEnabled(!isView);\r
377 }\r
378 }\r
379\r
380 /**\r
381 * This method initializes jContentPane\r
382 * \r
383 * @return javax.swing.JPanel jContentPane\r
384 * \r
385 */\r
386 private JPanel getJContentPane() {\r
387 if (jContentPane == null) {\r
388 jStarLabel1 = new StarLabel();\r
389 jStarLabel1.setLocation(new java.awt.Point(2, 12));\r
390 jLabelEventType = new JLabel();\r
391 jLabelEventType.setText("Select Event Type");\r
392 jLabelEventType.setBounds(new java.awt.Rectangle(12, 12, 168, 20));\r
393\r
394 jStarLabel2 = new StarLabel();\r
395 jStarLabel2.setLocation(new java.awt.Point(2, 37));\r
396 jLabelC_Name = new JLabel();\r
397 jLabelC_Name.setText("Guid C Name");\r
398 jLabelC_Name.setBounds(new java.awt.Rectangle(12, 37, 168, 20));\r
399\r
400 jStarLabel3 = new StarLabel();\r
401 jStarLabel3.setLocation(new java.awt.Point(2, 62));\r
402 jLabelGroup = new JLabel();\r
403 jLabelGroup.setText("Event Group Type");\r
404 jLabelGroup.setBounds(new java.awt.Rectangle(12, 62, 168, 20));\r
405\r
406 jStarLabel4 = new StarLabel();\r
407 jStarLabel4.setLocation(new java.awt.Point(2, 87));\r
408 jLabelUsage = new JLabel();\r
409 jLabelUsage.setText("Usage");\r
410 jLabelUsage.setBounds(new java.awt.Rectangle(12, 87, 168, 20));\r
411\r
412 jLabelHelpText = new JLabel();\r
413 jLabelHelpText.setBounds(new java.awt.Rectangle(12, 112, 168, 20));\r
414 jLabelHelpText.setText("Help Text");\r
415\r
416 jLabelFeatureFlag = new JLabel();\r
417 jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 182, 168, 20));\r
418 jLabelFeatureFlag.setText("Feature Flag Expression");\r
419 jLabelFeatureFlag.setEnabled(false);\r
420\r
421 jLabelArch = new JLabel();\r
422 jLabelArch.setBounds(new java.awt.Rectangle(12, 157, 168, 20));\r
423 jLabelArch.setText("Supported Architectures");\r
424 jArchCheckBox = new ArchCheckBox();\r
425 jArchCheckBox.setBounds(new java.awt.Rectangle(168, 157, 320, 20));\r
426 jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
427\r
428 jContentPane = new JPanel();\r
429 jContentPane.setLayout(null);\r
430 jContentPane.setPreferredSize(new java.awt.Dimension(485, 235));\r
431\r
432 jContentPane.add(jStarLabel1, null);\r
433 jContentPane.add(jLabelEventType, null);\r
434 jContentPane.add(getJComboBoxEventsType(), null);\r
435 //jContentPane.add(jStarLabel2, null);\r
436 jContentPane.add(jLabelC_Name, null);\r
437 jContentPane.add(getIComboBoxGuidC_Name(), null);\r
438 jContentPane.add(jStarLabel3, null);\r
439 jContentPane.add(jLabelGroup, null);\r
440 jContentPane.add(getJComboBoxEventGroup(), null);\r
441 jContentPane.add(jStarLabel4, null);\r
442 jContentPane.add(jLabelUsage, null);\r
443 jContentPane.add(getJComboBoxUsage(), null);\r
444 jContentPane.add(jLabelHelpText, null);\r
445 jContentPane.add(getJScrollPaneHelpText(), null);\r
446 jContentPane.add(jLabelFeatureFlag, null);\r
447 jContentPane.add(getJTextFieldFeatureFlag(), null);\r
448 jContentPane.add(jLabelArch, null);\r
449 jContentPane.add(jArchCheckBox, null);\r
450 jContentPane.add(getJButtonOk(), null);\r
451 jContentPane.add(getJButtonCancel(), null);\r
452\r
453 }\r
454 return jContentPane;\r
455 }\r
456\r
457 /**\r
458 * This method initializes events groups and usage type\r
459 * \r
460 */\r
461 private void initFrame() {\r
462 Tools.generateComboBoxByVector(jComboBoxEventsType, ed.getVEventType());\r
463 Tools.generateComboBoxByVector(jComboBoxEventGroup, ed.getVEventGroup());\r
464 Tools.generateComboBoxByVector(jComboBoxUsage, ed.getVEventUsage());\r
465 }\r
466\r
467 /*\r
468 * (non-Javadoc)\r
469 * \r
470 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
471 * \r
472 * Override actionPerformed to listen all actions\r
473 * \r
474 */\r
475 public void actionPerformed(ActionEvent arg0) {\r
476 if (arg0.getSource() == jButtonOk) {\r
477 if (checkAdd()) {\r
478 getCurrentEvents();\r
479 this.returnType = DataType.RETURN_TYPE_OK;\r
480 this.setVisible(false);\r
481 }\r
482 }\r
483\r
484 if (arg0.getSource() == jButtonCancel) {\r
485 this.returnType = DataType.RETURN_TYPE_CANCEL;\r
486 this.setVisible(false);\r
487 }\r
488 }\r
489\r
490 /**\r
491 * Data validation for all fields\r
492 * \r
493 * @retval true - All datas are valid\r
494 * @retval false - At least one data is invalid\r
495 * \r
496 */\r
497 public boolean checkAdd() {\r
498 //\r
499 // Check if all fields have correct data types\r
500 //\r
501 \r
502 //\r
503 // Check Name\r
504 //\r
505 String tmpName = this.iComboBoxGuidC_Name.getSelectedItem().toString();\r
506 if (!tmpName.equals(DataType.EMPTY_SELECT_ITEM) && isEmpty(tmpName)) {\r
507 if (!DataValidation.isC_NameType(this.iComboBoxGuidC_Name.getSelectedItem().toString())) {\r
508 Log.wrn("Update Events", "Incorrect data type for Event Name");\r
509 return false;\r
510 }\r
511 }\r
512\r
513 //\r
514 // Check FeatureFlag\r
515 //\r
516 if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
517 if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
518 Log.wrn("Update Events", "Incorrect data type for Feature Flag");\r
519 return false;\r
520 }\r
521 }\r
522\r
523 return true;\r
524 }\r
525\r
526 private EventsIdentification getCurrentEvents() {\r
527 String arg0 = this.iComboBoxGuidC_Name.getSelectedItem().toString();\r
528 String arg1 = this.jComboBoxEventsType.getSelectedItem().toString();\r
529 String arg2 = this.jComboBoxUsage.getSelectedItem().toString();\r
530\r
531 String arg3 = this.jTextFieldFeatureFlag.getText();\r
532 Vector<String> arg4 = this.jArchCheckBox.getSelectedItemsVector();\r
533 String arg5 = this.jTextAreaHelpText.getText();\r
534 String arg6 = this.jComboBoxEventGroup.getSelectedItem().toString();\r
535 id = new EventsIdentification(arg0, arg1, arg2, arg3, arg4, arg5, arg6);\r
536 return id;\r
537 }\r
538\r
539 public EventsIdentification getId() {\r
540 return id;\r
541 }\r
542\r
543 public void setId(EventsIdentification id) {\r
544 this.id = id;\r
545 }\r
546}\r