]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/dialog/HobsDlg.java
Changed spelling to manifest
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / HobsDlg.java
... / ...
CommitLineData
1/** @file\r
2 \r
3 The file is used to create, update Hob 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.IDialog;\r
35import org.tianocore.frameworkwizard.common.ui.IFrame;\r
36import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
37import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
38import org.tianocore.frameworkwizard.module.Identifications.Hobs.HobsIdentification;\r
39import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
40import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
41\r
42/**\r
43 * The class is used to create, update Hob of the MSA file \r
44 * \r
45 * It extends IDialog\r
46 * \r
47 */\r
48public class HobsDlg extends IDialog {\r
49\r
50 // /\r
51 // / Define class Serial Version UID\r
52 // /\r
53 private static final long serialVersionUID = -553473437579358325L;\r
54\r
55 //\r
56 // Define class members\r
57 //\r
58 private JPanel jContentPane = null;\r
59\r
60 private JLabel jLabelC_Name = null;\r
61\r
62 private JComboBox jComboBoxGuidC_Name = null;\r
63\r
64 private JLabel jLabelUsage = null;\r
65\r
66 private JLabel jLabelHobType = null;\r
67\r
68 private JComboBox jComboBoxUsage = null;\r
69\r
70 private JComboBox jComboBoxHobType = null;\r
71\r
72 private StarLabel jStarLabel1 = null;\r
73\r
74 private StarLabel jStarLabel2 = null;\r
75\r
76 private StarLabel jStarLabel3 = null;\r
77\r
78 private JLabel jLabelArch = null;\r
79\r
80 private JScrollPane jScrollPane = null;\r
81\r
82 private JLabel jLabelFeatureFlag = null;\r
83\r
84 private JTextField jTextFieldFeatureFlag = null;\r
85\r
86 private JLabel jLabelHelpText = null;\r
87\r
88 private JTextArea jTextAreaHelpText = null;\r
89\r
90 private JScrollPane jScrollPaneHelpText = null;\r
91\r
92 private ArchCheckBox jArchCheckBox = null;\r
93\r
94 private JButton jButtonOk = null;\r
95\r
96 private JButton jButtonCancel = null;\r
97\r
98 //\r
99 // Not used by UI\r
100 //\r
101 private HobsIdentification id = null;\r
102\r
103 private EnumerationData ed = new EnumerationData();\r
104\r
105 private WorkspaceTools wt = new WorkspaceTools();\r
106\r
107 /**\r
108 * This method initializes jTextField\r
109 * \r
110 * @return javax.swing.JTextField jTextFieldC_Name\r
111 * \r
112 */\r
113 private JComboBox getJComboBoxGuidC_Name() {\r
114 if (jComboBoxGuidC_Name == null) {\r
115 jComboBoxGuidC_Name = new JComboBox();\r
116 jComboBoxGuidC_Name.setBounds(new java.awt.Rectangle(168, 12, 320, 20));\r
117 jComboBoxGuidC_Name.setPreferredSize(new java.awt.Dimension(320, 20));\r
118 jComboBoxGuidC_Name.setToolTipText("Select the GUID C Name of the Hob");\r
119 }\r
120 return jComboBoxGuidC_Name;\r
121 }\r
122\r
123 /**\r
124 * This method initializes jComboBoxHobType\r
125 * \r
126 * @return javax.swing.JComboBox jComboBoxHobType\r
127 * \r
128 */\r
129 private JComboBox getJComboBoxHobType() {\r
130 if (jComboBoxHobType == null) {\r
131 jComboBoxHobType = new JComboBox();\r
132 jComboBoxHobType.setBounds(new java.awt.Rectangle(168, 37, 320, 20));\r
133 jComboBoxHobType.setPreferredSize(new java.awt.Dimension(320, 20));\r
134 jComboBoxHobType\r
135 .setToolTipText("<html><table>"\r
136 + "<tr><td>PHIT</td><td>EFI_HOB_TYPE_HANDOFF</td></tr>"\r
137 + "<tr><td>MEMORY_ALLOCATION</td><td>EFI_HOB_TYPE_MEMORY_ALLOCATION and $BaseName</td></tr>"\r
138 + "<tr><td>RESOURCE_DESCRIPTOR</td><td>EFI_HOB_TYPE_RESOURCE_DESCRIPTOR</td></tr>"\r
139 + "<tr><td>GUID_EXTENTION</td><td>EFI_HOB_TYPE_GUID_EXTENSION and BaseName of GUID</td></tr>"\r
140 + "<tr><td>FIRMWARE_VOLUME</td><td>EFI_HOB_TYPE_FV</td></tr>"\r
141 + "<tr><td>CPU</td><td>EFI_HOB_TYPE_CPU</td></tr>"\r
142 + "<tr><td>POOL</td><td>EFI_HOB_TYPE_PEI_MEMORY_POOL</td></tr>"\r
143 + "<tr><td>CAPSULE_VOLUME</td><td>EFI_HOB_TYPE_CV</td></tr>"\r
144 + "</table></html>");\r
145 }\r
146 return jComboBoxHobType;\r
147 }\r
148\r
149 /**\r
150 * This method initializes jComboBoxUsage\r
151 * \r
152 * @return javax.swing.JComboBox jComboBoxUsage\r
153 * \r
154 */\r
155 private JComboBox getJComboBoxUsage() {\r
156 if (jComboBoxUsage == null) {\r
157 jComboBoxUsage = new JComboBox();\r
158 jComboBoxUsage.setBounds(new java.awt.Rectangle(168, 62, 320, 20));\r
159 jComboBoxUsage.setPreferredSize(new java.awt.Dimension(320, 20));\r
160 jComboBoxUsage\r
161 .setToolTipText("<html><table>"\r
162 + "<tr><td>ALWAYS_CONSUMED</td><td>HOB must be present in the system</td></tr>"\r
163 + "<tr><td>SOMETIMES_CONSUMED</td><td>HOB will be used if it's present</td></tr>"\r
164 + "<tr><td>ALWAYS_PRODUCED</td><td>HOB is always produced</td></tr>"\r
165 + "<tr><td>SOMETIMES_PRODUCED</td><td>HOB will sometimes be produced by the module</td></tr>"\r
166 + "</table></html>");\r
167 }\r
168 return jComboBoxUsage;\r
169 }\r
170\r
171 /**\r
172 * This method initializes jScrollPane\r
173 * \r
174 * @return javax.swing.JScrollPane\r
175 */\r
176 private JScrollPane getJScrollPane() {\r
177 if (jScrollPane == null) {\r
178 jScrollPane = new JScrollPane();\r
179 jScrollPane.setViewportView(getJContentPane());\r
180 }\r
181 return jScrollPane;\r
182 }\r
183\r
184 /**\r
185 * This method initializes jTextFieldFeatureFlag\r
186 * \r
187 * @return javax.swing.JTextField\r
188 */\r
189 private JTextField getJTextFieldFeatureFlag() {\r
190 if (jTextFieldFeatureFlag == null) {\r
191 jTextFieldFeatureFlag = new JTextField();\r
192 jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(168, 157, 320, 20));\r
193 jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(320, 20));\r
194 jTextFieldFeatureFlag.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");\r
195 jTextFieldFeatureFlag.setEnabled(false);\r
196 }\r
197 return jTextFieldFeatureFlag;\r
198 }\r
199\r
200 /**\r
201 * This method initializes jTextFieldHelpText\r
202 * \r
203 * @return javax.swing.JTextField\r
204 * \r
205 */\r
206 private JTextArea getJTextAreaHelpText() {\r
207 if (jTextAreaHelpText == null) {\r
208 jTextAreaHelpText = new JTextArea();\r
209 jTextAreaHelpText.setLineWrap(true);\r
210 jTextAreaHelpText.setWrapStyleWord(true);\r
211 }\r
212 return jTextAreaHelpText;\r
213 }\r
214\r
215 /**\r
216 * This method initializes jScrollPaneHelpText\r
217 * \r
218 * @return javax.swing.JScrollPane\r
219 */\r
220 private JScrollPane getJScrollPaneHelpText() {\r
221 if (jScrollPaneHelpText == null) {\r
222 jScrollPaneHelpText = new JScrollPane();\r
223 jScrollPaneHelpText.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
224 jScrollPaneHelpText.setSize(new java.awt.Dimension(320, 40));\r
225 jScrollPaneHelpText.setPreferredSize(new java.awt.Dimension(320, 40));\r
226 jScrollPaneHelpText.setLocation(new java.awt.Point(168, 87));\r
227 jScrollPaneHelpText.setViewportView(getJTextAreaHelpText());\r
228 }\r
229 return jScrollPaneHelpText;\r
230 }\r
231\r
232 /**\r
233 * This method initializes jButtonOk\r
234 * \r
235 * @return javax.swing.JButton\r
236 * \r
237 */\r
238 private JButton getJButtonOk() {\r
239 if (jButtonOk == null) {\r
240 jButtonOk = new JButton();\r
241 jButtonOk.setBounds(new java.awt.Rectangle(290, 187, 90, 20));\r
242 jButtonOk.setText("Ok");\r
243 jButtonOk.addActionListener(this);\r
244 }\r
245 return jButtonOk;\r
246 }\r
247\r
248 /**\r
249 * This method initializes jButtonCancel\r
250 * \r
251 * @return javax.swing.JButton\r
252 * \r
253 */\r
254 private JButton getJButtonCancel() {\r
255 if (jButtonCancel == null) {\r
256 jButtonCancel = new JButton();\r
257 jButtonCancel.setBounds(new java.awt.Rectangle(390, 187, 90, 20));\r
258 jButtonCancel.setText("Cancel");\r
259 jButtonCancel.addActionListener(this);\r
260 }\r
261 return jButtonCancel;\r
262 }\r
263\r
264 public static void main(String[] args) {\r
265\r
266 }\r
267\r
268 /**\r
269 * This method initializes this\r
270 * \r
271 */\r
272 private void init() {\r
273 this.setSize(505, 260);\r
274 this.setContentPane(getJScrollPane());\r
275 this.setTitle("Hobs");\r
276 initFrame();\r
277 this.setViewMode(false);\r
278 this.centerWindow();\r
279 }\r
280\r
281 /**\r
282 * This method initializes this Fill values to all fields if these values are\r
283 * not empty\r
284 * \r
285 * @param inHobsId\r
286 * \r
287 */\r
288 private void init(HobsIdentification inHobsId, ModuleIdentification mid) {\r
289 init();\r
290 this.id = inHobsId;\r
291 \r
292 //\r
293 // Init arch with module's arch\r
294 //\r
295 this.jArchCheckBox.setEnabledItems(wt.getModuleArch(mid));\r
296 \r
297 //\r
298 // Get defined guids from dependent packages\r
299 //\r
300 Vector<PackageIdentification> vpid = wt.getPackageDependenciesOfModule(mid);\r
301 if (vpid.size() <= 0) {\r
302 Log\r
303 .wrn("Init Guid",\r
304 "This module hasn't defined any package dependency, so there is no guid value can be added for hob");\r
305 }\r
306 //\r
307 // Init guids drop down list\r
308 //\r
309 Tools\r
310 .generateComboBoxByVector(jComboBoxGuidC_Name,\r
311 wt.getAllGuidDeclarationsFromPackages(vpid, EnumerationData.GUID_TYPE_HOB));\r
312\r
313\r
314 if (this.id != null) {\r
315 this.jComboBoxGuidC_Name.setSelectedItem(id.getName());\r
316 this.jComboBoxHobType.setSelectedItem(id.getType());\r
317 this.jComboBoxUsage.setSelectedItem(id.getUsage());\r
318 this.jTextAreaHelpText.setText(id.getHelp());\r
319 this.jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
320 this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
321 }\r
322 }\r
323\r
324 /**\r
325 * This is the override edit constructor\r
326 * \r
327 * @param inHobsIdentification\r
328 * @param iFrame\r
329 * \r
330 */\r
331 public HobsDlg(HobsIdentification inHobsIdentification, IFrame iFrame, ModuleIdentification mid) {\r
332 super(iFrame, true);\r
333 init(inHobsIdentification, mid);\r
334 }\r
335\r
336 /**\r
337 * Disable all components when the mode is view\r
338 * \r
339 * @param isView\r
340 * true - The view mode; false - The non-view mode\r
341 * \r
342 */\r
343 public void setViewMode(boolean isView) {\r
344 if (isView) {\r
345 this.jComboBoxGuidC_Name.setEnabled(!isView);\r
346 this.jComboBoxUsage.setEnabled(!isView);\r
347 this.jComboBoxHobType.setEnabled(!isView);\r
348 }\r
349 }\r
350\r
351 /**\r
352 * This method initializes jContentPane\r
353 * \r
354 * @return javax.swing.JPanel jContentPane\r
355 * \r
356 */\r
357 public JPanel getJContentPane() {\r
358 if (jContentPane == null) {\r
359 jStarLabel1 = new StarLabel();\r
360 jStarLabel1.setLocation(new java.awt.Point(2, 12));\r
361 jLabelC_Name = new JLabel();\r
362 jLabelC_Name.setText("Hob's Guid C Name");\r
363 jLabelC_Name.setBounds(new java.awt.Rectangle(12, 12, 155, 20));\r
364\r
365 jStarLabel2 = new StarLabel();\r
366 jStarLabel2.setLocation(new java.awt.Point(2, 37));\r
367 jLabelHobType = new JLabel();\r
368 jLabelHobType.setText("Hob Type");\r
369 jLabelHobType.setBounds(new java.awt.Rectangle(12, 37, 155, 20));\r
370\r
371 jStarLabel3 = new StarLabel();\r
372 jStarLabel3.setLocation(new java.awt.Point(2, 62));\r
373 jLabelUsage = new JLabel();\r
374 jLabelUsage.setText("Usage");\r
375 jLabelUsage.setBounds(new java.awt.Rectangle(12, 62, 155, 20));\r
376\r
377 jLabelHelpText = new JLabel();\r
378 jLabelHelpText.setBounds(new java.awt.Rectangle(12, 87, 155, 20));\r
379 jLabelHelpText.setText("Help Text");\r
380\r
381 jLabelFeatureFlag = new JLabel();\r
382 jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 157, 155, 20));\r
383 jLabelFeatureFlag.setText("Feature Flag Expression");\r
384 jLabelFeatureFlag.setEnabled(false);\r
385\r
386 jLabelArch = new JLabel();\r
387 jLabelArch.setBounds(new java.awt.Rectangle(12, 132, 155, 20));\r
388 jLabelArch.setText("Supported Architectures");\r
389 jArchCheckBox = new ArchCheckBox();\r
390 jArchCheckBox.setBounds(new java.awt.Rectangle(168, 132, 320, 20));\r
391 jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
392\r
393 jContentPane = new JPanel();\r
394 jContentPane.setLayout(null);\r
395 jContentPane.setPreferredSize(new java.awt.Dimension(485, 215));\r
396\r
397 jContentPane.add(jStarLabel1, null);\r
398 jContentPane.add(jLabelC_Name, null);\r
399 jContentPane.add(getJComboBoxGuidC_Name(), null);\r
400 jContentPane.add(jStarLabel2, null);\r
401 jContentPane.add(jLabelHobType, null);\r
402 jContentPane.add(getJComboBoxHobType(), null);\r
403 jContentPane.add(jStarLabel3, null);\r
404 jContentPane.add(jLabelUsage, null);\r
405 jContentPane.add(getJComboBoxUsage(), null);\r
406 jContentPane.add(jLabelHelpText, null);\r
407 jContentPane.add(getJScrollPaneHelpText(), null);\r
408 jContentPane.add(jLabelFeatureFlag, null);\r
409 jContentPane.add(getJTextFieldFeatureFlag(), null);\r
410 jContentPane.add(jLabelArch, null);\r
411 jContentPane.add(jArchCheckBox, null);\r
412 jContentPane.add(getJButtonOk(), null);\r
413 jContentPane.add(getJButtonCancel(), null);\r
414 }\r
415 return jContentPane;\r
416 }\r
417\r
418 /**\r
419 * This method initializes Usage type and Hob type\r
420 * \r
421 */\r
422 private void initFrame() {\r
423 Tools.generateComboBoxByVector(jComboBoxUsage, ed.getVHobUsage());\r
424 Tools.generateComboBoxByVector(jComboBoxHobType, ed.getVHobType());\r
425 }\r
426\r
427 /*\r
428 * (non-Javadoc)\r
429 * \r
430 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
431 * \r
432 * Override actionPerformed to listen all actions\r
433 * \r
434 */\r
435 public void actionPerformed(ActionEvent arg0) {\r
436 if (arg0.getSource() == jButtonOk) {\r
437 if (checkAdd()) {\r
438 getCurrentHobs();\r
439 this.returnType = DataType.RETURN_TYPE_OK;\r
440 this.setVisible(false);\r
441 }\r
442 }\r
443\r
444 if (arg0.getSource() == jButtonCancel) {\r
445 this.returnType = DataType.RETURN_TYPE_CANCEL;\r
446 this.setVisible(false);\r
447 }\r
448 }\r
449\r
450 /**\r
451 * Data validation for all fields\r
452 * \r
453 * @retval true - All datas are valid\r
454 * @retval false - At least one data is invalid\r
455 * \r
456 */\r
457 public boolean checkAdd() {\r
458 //\r
459 // Check if all fields have correct data types\r
460 //\r
461 \r
462 //\r
463 // Check Name\r
464 //\r
465 if (this.jComboBoxGuidC_Name.getSelectedItem() == null) {\r
466 Log.wrn("Update Guids", "Please select one Hob Name");\r
467 return false;\r
468 }\r
469 //\r
470 // Check Name\r
471 //\r
472 if (isEmpty(this.jComboBoxGuidC_Name.getSelectedItem().toString())) {\r
473 Log.wrn("Update Hobs", "Hob Guid C Name must be entered!");\r
474 return false;\r
475 }\r
476\r
477 if (!isEmpty(this.jComboBoxGuidC_Name.getSelectedItem().toString())) {\r
478 if (!DataValidation.isC_NameType(this.jComboBoxGuidC_Name.getSelectedItem().toString())) {\r
479 Log.wrn("Update Hobs", "Incorrect data type for Hob Name");\r
480 return false;\r
481 }\r
482 }\r
483\r
484 //\r
485 // Check FeatureFlag\r
486 //\r
487 if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
488 if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
489 Log.wrn("Update Hobs", "Incorrect data type for Feature Flag");\r
490 return false;\r
491 }\r
492 }\r
493\r
494 return true;\r
495 }\r
496\r
497 private HobsIdentification getCurrentHobs() {\r
498 String arg0 = this.jComboBoxGuidC_Name.getSelectedItem().toString();\r
499 String arg1 = this.jComboBoxHobType.getSelectedItem().toString();\r
500 String arg2 = this.jComboBoxUsage.getSelectedItem().toString();\r
501\r
502 String arg3 = this.jTextFieldFeatureFlag.getText();\r
503 Vector<String> arg4 = this.jArchCheckBox.getSelectedItemsVector();\r
504 String arg5 = this.jTextAreaHelpText.getText();\r
505 id = new HobsIdentification(arg0, arg1, arg2, arg3, arg4, arg5);\r
506 return id;\r
507 }\r
508\r
509 public HobsIdentification getId() {\r
510 return id;\r
511 }\r
512\r
513 public void setId(HobsIdentification id) {\r
514 this.id = id;\r
515 }\r
516}\r