]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java
Fix tracker "Package Library Class Recommended Instance should not default to null":
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdLibClassDecls.java
... / ...
CommitLineData
1/** @file\r
2 Java class SpdLibClassDecls is GUI for create library definition elements of spd file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.packaging.ui;\r
14\r
15import java.awt.Dimension;\r
16import java.awt.event.ActionEvent;\r
17import java.awt.event.ComponentEvent;\r
18import java.io.File;\r
19import java.util.HashMap;\r
20import java.util.Iterator;\r
21import java.util.Map;\r
22import java.util.Set;\r
23import java.util.Vector;\r
24\r
25import javax.swing.AbstractAction;\r
26import javax.swing.JFileChooser;\r
27import javax.swing.JOptionPane;\r
28import javax.swing.JPanel;\r
29import javax.swing.JTable;\r
30import javax.swing.JTextField;\r
31import javax.swing.JComboBox;\r
32import javax.swing.JLabel;\r
33import javax.swing.JScrollPane;\r
34import javax.swing.JButton;\r
35import javax.swing.JFrame;\r
36import javax.swing.ListSelectionModel;\r
37import javax.swing.event.InternalFrameAdapter;\r
38import javax.swing.event.InternalFrameEvent;\r
39import javax.swing.event.ListSelectionEvent;\r
40import javax.swing.event.ListSelectionListener;\r
41import javax.swing.event.TableModelEvent;\r
42import javax.swing.event.TableModelListener;\r
43import javax.swing.table.DefaultTableModel;\r
44import javax.swing.table.TableModel;\r
45\r
46import org.apache.xmlbeans.XmlObject;\r
47import org.tianocore.PackageSurfaceAreaDocument;\r
48import org.tianocore.frameworkwizard.common.DataValidation;\r
49import org.tianocore.frameworkwizard.common.Tools;\r
50import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
51import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
52import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
53import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
54import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
55import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
56import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
57import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
58import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
59\r
60\r
61/**\r
62 GUI for create library definition elements of spd file.\r
63 \r
64 @since PackageEditor 1.0\r
65**/\r
66public class SpdLibClassDecls extends IInternalFrame implements TableModelListener{\r
67 /**\r
68 * \r
69 */\r
70 private static final long serialVersionUID = 1L;\r
71\r
72 static JFrame frame;\r
73 \r
74 private JTable jTable = null;\r
75\r
76 private DefaultTableModel model = null;\r
77\r
78 private JPanel jContentPane = null;\r
79\r
80 private JTextField jTextFieldAdd = null;\r
81\r
82 private JComboBox jComboBoxSelect = null;\r
83\r
84 private JScrollPane jScrollPane = null;\r
85\r
86 private JButton jButtonAdd = null;\r
87\r
88 private JButton jButtonRemove = null;\r
89\r
90 private JButton jButtonRemoveAll = null;\r
91\r
92 private JLabel jLabelHdr = null;\r
93\r
94 private JTextField jTextFieldHdr = null;\r
95\r
96 private JButton jButtonBrowse = null;\r
97 \r
98 private StarLabel jStarLabel1 = null;\r
99 \r
100 private StarLabel jStarLabel2 = null;\r
101 \r
102 private SpdFileContents sfc = null;\r
103 \r
104 private OpeningPackageType docConsole = null;\r
105\r
106 private JLabel jLabel1ClassName = null;\r
107 \r
108 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="10,53"\r
109 \r
110 private int selectedRow = -1;\r
111\r
112 private StarLabel starLabel = null;\r
113\r
114 private JLabel jLabel2HelpText = null;\r
115\r
116 private JTextField jTextFieldHelp = null;\r
117\r
118 private JLabel jLabel3RecInstName = null;\r
119\r
120 private JTextField jTextField1RecInstName = null;\r
121\r
122 private JLabel jLabel4RecInstVer = null;\r
123\r
124 private JTextField jTextField2RecInstVer = null;\r
125\r
126 private JLabel jLabel5SupArchList = null;\r
127\r
128 private JLabel jLabel6SupModList = null;\r
129 \r
130 private JScrollPane jScrollPaneModules = null;\r
131 \r
132 private JScrollPane jScrollPane1Arch = null;\r
133 \r
134 private ICheckBoxList iCheckBoxListModules = null;\r
135\r
136 private ICheckBoxList iCheckBoxList = null;\r
137\r
138 private JComboBox jComboBox = null;\r
139\r
140 private int cnClassName = 0;\r
141 private int cnHdrFile = 1;\r
142 private int cnHelpText = 2;\r
143 private int cnRecInstName = 3;\r
144 private int cnRecInstVer = 4;\r
145 private int cnSupArch = 5;\r
146 private int cnSupMod = 6;\r
147 \r
148 HashMap<String, String> libNameGuidMap = new HashMap<String, String>();\r
149\r
150\r
151 /**\r
152 This method initializes this\r
153 \r
154 **/\r
155 private void initialize() {\r
156 \r
157 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
158\r
159 }\r
160\r
161 /**\r
162 This method initializes jTextFieldAdd \r
163 \r
164 @return javax.swing.JTextField \r
165 **/\r
166 private JTextField getJTextFieldAdd() {\r
167 if (jTextFieldAdd == null) {\r
168 jTextFieldAdd = new JTextField();\r
169 jTextFieldAdd.setBounds(new java.awt.Rectangle(122,6,390,20));\r
170 jTextFieldAdd.setPreferredSize(new java.awt.Dimension(260,20));\r
171 jTextFieldAdd.setEnabled(true);\r
172 }\r
173 return jTextFieldAdd;\r
174 }\r
175\r
176 /**\r
177 This method initializes jComboBoxSelect \r
178 \r
179 @return javax.swing.JComboBox \r
180 **/\r
181 private JComboBox getJComboBoxSelect() {\r
182 if (jComboBoxSelect == null) {\r
183 jComboBoxSelect = new JComboBox();\r
184 jComboBoxSelect.setBounds(new java.awt.Rectangle(220, 10, 260, 20));\r
185 jComboBoxSelect.setPreferredSize(new java.awt.Dimension(260,22));\r
186 jComboBoxSelect.setEnabled(true);\r
187 jComboBoxSelect.setVisible(false);\r
188 }\r
189 return jComboBoxSelect;\r
190 }\r
191\r
192 /**\r
193 This method initializes jScrollPane \r
194 \r
195 @return javax.swing.JScrollPane \r
196\r
197 Used for the Table of Library Classes that are provided by this package\r
198\r
199 **/\r
200 private JScrollPane getJScrollPane() {\r
201 if (jScrollPane == null) {\r
202 jScrollPane = new JScrollPane();\r
203 jScrollPane.setBounds(new java.awt.Rectangle(12,351,608,253));\r
204 jScrollPane.setPreferredSize(new java.awt.Dimension(390,150));\r
205 jScrollPane.setViewportView(getJTable());\r
206 }\r
207 return jScrollPane;\r
208 }\r
209\r
210 /**\r
211 This method initializes jTable \r
212 \r
213 @return javax.swing.JTable \r
214 **/\r
215 private JTable getJTable() {\r
216 if (jTable == null) {\r
217 model = new DefaultTableModel();\r
218 jTable = new JTable(model);\r
219 jTable.setRowHeight(20);\r
220 jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
221 jTable.setColumnSelectionAllowed(false);\r
222 model.addColumn("Class Name");\r
223 model.addColumn("Header");\r
224 model.addColumn("Help Text");\r
225 model.addColumn("Recommended Instance");\r
226 model.addColumn("Version");\r
227 model.addColumn("Sup. Arch");\r
228 model.addColumn("Mod. Types");\r
229 \r
230 Vector<String> vArch = new Vector<String>();\r
231 vArch.add("IA32");\r
232 vArch.add("X64");\r
233 vArch.add("IPF");\r
234 vArch.add("EBC");\r
235 vArch.add("ARM");\r
236 vArch.add("PPC");\r
237 jTable.getColumnModel().getColumn(cnSupArch).setCellEditor(new ListEditor(vArch));\r
238 \r
239 Vector<String> vModule = new Vector<String>();\r
240 vModule.add("BASE");\r
241 vModule.add("SEC");\r
242 vModule.add("PEI_CORE");\r
243 vModule.add("PEIM");\r
244 vModule.add("DXE_CORE");\r
245 vModule.add("DXE_DRIVER");\r
246 vModule.add("DXE_RUNTIME_DRIVER");\r
247 vModule.add("DXE_SAL_DRIVER");\r
248 vModule.add("DXE_SMM_DRIVER");\r
249 vModule.add("UEFI_DRIVER");\r
250 vModule.add("UEFI_APPLICATION");\r
251 vModule.add("USER_DEFINED");\r
252\r
253 jTable.getColumnModel().getColumn(cnSupMod).setCellEditor(new ListEditor(vModule));\r
254 \r
255 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
256 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
257 public void valueChanged(ListSelectionEvent e) {\r
258 if (e.getValueIsAdjusting()){\r
259 return;\r
260 }\r
261 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
262 if (lsm.isSelectionEmpty()) {\r
263 return;\r
264 }\r
265 else{\r
266 selectedRow = lsm.getMinSelectionIndex();\r
267 }\r
268 }\r
269 });\r
270 \r
271 jTable.getModel().addTableModelListener(this);\r
272\r
273 }\r
274 return jTable;\r
275 }\r
276 \r
277 \r
278 public void tableChanged(TableModelEvent arg0) {\r
279 // TODO Auto-generated method stub\r
280 int row = arg0.getFirstRow();\r
281 TableModel m = (TableModel)arg0.getSource();\r
282 if (arg0.getType() == TableModelEvent.UPDATE){\r
283 String lib = m.getValueAt(row, cnClassName) + "";\r
284 String hdr = m.getValueAt(row, cnHdrFile) + "";\r
285 String hlp = m.getValueAt(row, cnHelpText) + "";\r
286 String name = m.getValueAt(row, cnRecInstName) + "";\r
287 String ver = m.getValueAt(row, cnRecInstVer) + "";\r
288 String arch = null;\r
289 if (m.getValueAt(row, cnSupArch) != null) {\r
290 arch = m.getValueAt(row, cnSupArch).toString();\r
291 }\r
292 String module = null;\r
293 if (m.getValueAt(row, cnSupMod) != null) {\r
294 module = m.getValueAt(row, cnSupMod).toString();\r
295 }\r
296 String[] rowData = {lib, hdr, hlp, name, ver};\r
297 if (!dataValidation(rowData)) {\r
298 return;\r
299 }\r
300 docConsole.setSaved(false);\r
301 \r
302 getLibInstances(lib);\r
303 String guid = nameToGuid(name);\r
304 \r
305 sfc.updateSpdLibClass(row, lib, hdr, hlp, guid, ver, arch, module);\r
306 }\r
307 }\r
308\r
309 /**\r
310 This method initializes jButtonAdd \r
311 \r
312 @return javax.swing.JButton \r
313 **/\r
314 private JButton getJButtonAdd() {\r
315 if (jButtonAdd == null) {\r
316 jButtonAdd = new JButton();\r
317 jButtonAdd.setText("Add");\r
318 jButtonAdd.setSize(new java.awt.Dimension(99,20));\r
319 jButtonAdd.setLocation(new java.awt.Point(321,326));\r
320 jButtonAdd.addActionListener(this);\r
321 }\r
322 return jButtonAdd;\r
323 }\r
324\r
325 /**\r
326 This method initializes jButtonRemove \r
327 \r
328 @return javax.swing.JButton \r
329 **/\r
330 private JButton getJButtonRemove() {\r
331 if (jButtonRemove == null) {\r
332 jButtonRemove = new JButton();\r
333 jButtonRemove.setText("Remove");\r
334 jButtonRemove.setSize(new java.awt.Dimension(99,20));\r
335 jButtonRemove.setLocation(new java.awt.Point(424,326));\r
336 jButtonRemove.addActionListener(this);\r
337 }\r
338 return jButtonRemove;\r
339 }\r
340\r
341 /**\r
342 This method initializes jButtonRemoveAll \r
343 \r
344 @return javax.swing.JButton \r
345 **/\r
346 private JButton getJButtonRemoveAll() {\r
347 if (jButtonRemoveAll == null) {\r
348 jButtonRemoveAll = new JButton();\r
349 jButtonRemoveAll.setText("Remove All");\r
350 jButtonRemoveAll.setSize(new java.awt.Dimension(99,20));\r
351 jButtonRemoveAll.setLocation(new java.awt.Point(527,326));\r
352 jButtonRemoveAll.addActionListener(this);\r
353 }\r
354 return jButtonRemoveAll;\r
355 }\r
356\r
357 /**\r
358 This is the default constructor\r
359 **/\r
360 public SpdLibClassDecls() {\r
361 super();\r
362 initialize();\r
363 init();\r
364 \r
365 }\r
366\r
367 public SpdLibClassDecls(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){\r
368 this();\r
369 sfc = new SpdFileContents(inPsa);\r
370 init(sfc);\r
371 }\r
372 \r
373 public SpdLibClassDecls(OpeningPackageType opt) {\r
374 this(opt.getXmlSpd());\r
375 docConsole = opt;\r
376 }\r
377 /**\r
378 This method initializes this\r
379 \r
380 @return void\r
381 **/\r
382 private void init() {\r
383 \r
384 this.setContentPane(getJContentPane());\r
385 this.setTitle("Library Class Declarations");\r
386 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
387 this.setVisible(true);\r
388 this.addInternalFrameListener(new InternalFrameAdapter(){\r
389 public void internalFrameDeactivated(InternalFrameEvent e){\r
390 if (jTable.isEditing()) {\r
391 jTable.getCellEditor().stopCellEditing();\r
392 }\r
393 }\r
394 });\r
395 initFrame();\r
396 }\r
397\r
398 private void init(SpdFileContents sfc) {\r
399 if (sfc.getSpdLibClassDeclarationCount() == 0) {\r
400 return ;\r
401 }\r
402 //\r
403 // initialize table using SpdFileContents object\r
404 //\r
405 String[][] saa = new String[sfc.getSpdLibClassDeclarationCount()][7];\r
406 sfc.getSpdLibClassDeclarations(saa);\r
407 int i = 0;\r
408 while (i < saa.length) {\r
409 if (saa[i][3] != null && saa[i][3].length() > 0) {\r
410 getLibInstances(saa[i][0]);\r
411 saa[i][3] = guidToName(saa[i][3]);\r
412 }\r
413 \r
414 model.addRow(saa[i]);\r
415 i++;\r
416 }\r
417 }\r
418 private JScrollPane getJContentPane(){\r
419 if (topScrollPane == null){\r
420 topScrollPane = new JScrollPane();\r
421 topScrollPane.setSize(new java.awt.Dimension(634,590));\r
422 topScrollPane.setViewportView(getJContentPane1());\r
423 }\r
424 return topScrollPane;\r
425 }\r
426 /**\r
427 This method initializes jContentPane\r
428 \r
429 @return javax.swing.JPanel\r
430 **/\r
431 private JPanel getJContentPane1() {\r
432 if (jContentPane == null) {\r
433 // Library Class\r
434 jStarLabel1 = new StarLabel();\r
435 jStarLabel1.setLocation(new java.awt.Point(1,7));\r
436 jLabel1ClassName = new JLabel();\r
437 jLabel1ClassName.setBounds(new java.awt.Rectangle(16,6,82,20));\r
438 jLabel1ClassName.setText("Library Class");\r
439\r
440 // Help Text\r
441 starLabel = new StarLabel();\r
442 starLabel.setBounds(new java.awt.Rectangle(1,33,10,20));\r
443 jLabel2HelpText = new JLabel();\r
444 jLabel2HelpText.setBounds(new java.awt.Rectangle(16,33,82,20));\r
445 jLabel2HelpText.setText("Help Text");\r
446\r
447 // Header File\r
448 jStarLabel2 = new StarLabel();\r
449 jStarLabel2.setLocation(new java.awt.Point(1,74));\r
450 jLabelHdr = new JLabel();\r
451 jLabelHdr.setBounds(new java.awt.Rectangle(14,74,199,22));\r
452 jLabelHdr.setText("Include Header for Specified Class");\r
453\r
454 jLabel6SupModList = new JLabel();\r
455 jLabel6SupModList.setBounds(new java.awt.Rectangle(16,252,108,16));\r
456 jLabel6SupModList.setText("Supported Module");\r
457 jLabel6SupModList.setEnabled(true);\r
458\r
459 jLabel5SupArchList = new JLabel();\r
460 jLabel5SupArchList.setBounds(new java.awt.Rectangle(15,169,93,16));\r
461 jLabel5SupArchList.setText("Supported Arch");\r
462 jLabel5SupArchList.setEnabled(true);\r
463 jLabel4RecInstVer = new JLabel();\r
464 jLabel4RecInstVer.setBounds(new java.awt.Rectangle(16,138,196,16));\r
465 jLabel4RecInstVer.setEnabled(true);\r
466 jLabel4RecInstVer.setText("Recommended Instance Version");\r
467 jLabel3RecInstName = new JLabel();\r
468 jLabel3RecInstName.setBounds(new java.awt.Rectangle(17,112,195,16));\r
469 jLabel3RecInstName.setEnabled(true);\r
470 jLabel3RecInstName.setText("Recommended Instance Name");\r
471 \r
472 jContentPane = new JPanel();\r
473 jContentPane.setPreferredSize(new Dimension(480, 400));\r
474 jContentPane.setLayout(null);\r
475 jContentPane.add(jLabelHdr, null);\r
476 jContentPane.add(jStarLabel1, null);\r
477 jContentPane.add(jStarLabel2, null);\r
478 jContentPane.add(getJTextFieldAdd(), null);\r
479 jContentPane.add(getJComboBoxSelect(), null);\r
480 jContentPane.add(getJScrollPane(), null);\r
481 jContentPane.add(getJButtonAdd(), null);\r
482 jContentPane.add(getJButtonRemove(), null);\r
483 jContentPane.add(getJButtonRemoveAll(), null);\r
484 \r
485 jContentPane.add(getJTextFieldHdr(), null);\r
486 jContentPane.add(getJButtonBrowse(), null);\r
487 jContentPane.add(jLabel1ClassName, null);\r
488 jContentPane.add(starLabel, null);\r
489 jContentPane.add(jLabel2HelpText, null);\r
490 jContentPane.add(getJTextFieldHelp(), null);\r
491\r
492 jContentPane.add(jLabel3RecInstName, null);\r
493 jContentPane.add(getJTextField1RecInstName(), null);\r
494 jContentPane.add(jLabel4RecInstVer, null);\r
495 jContentPane.add(getJTextField2RecInstVer(), null);\r
496 jContentPane.add(jLabel5SupArchList, null);\r
497 jContentPane.add(jLabel6SupModList, null);\r
498 \r
499 jContentPane.add(getJScrollPaneModules(), null);\r
500 jContentPane.add(getJScrollPane1Arch(), null);\r
501 jContentPane.add(getJComboBox(), null);\r
502 \r
503 }\r
504 \r
505 return jContentPane;\r
506 }\r
507\r
508 /**\r
509 fill ComboBoxes with pre-defined contents\r
510 **/\r
511 private void initFrame() {\r
512 jComboBoxSelect.addItem("BaseCpuICacheFlush");\r
513 jComboBoxSelect.addItem("BaseDebugLibNull");\r
514 jComboBoxSelect.addItem("BaseDebugLibReportStatusCode");\r
515 jComboBoxSelect.addItem("BaseIoLibIntrinsic");\r
516 jComboBoxSelect.addItem("BaseLib");\r
517 jComboBoxSelect.addItem("BaseMemoryLib");\r
518 jComboBoxSelect.addItem("BaseMemoryLibMmx");\r
519 jComboBoxSelect.addItem("BaseMemoryLibSse2");\r
520 jComboBoxSelect.addItem("BasePeCoffGetEntryPointLib");\r
521 jComboBoxSelect.addItem("BasePeCoffLib");\r
522 jComboBoxSelect.addItem("BasePrintLib");\r
523 jComboBoxSelect.addItem("BaseReportStatusCodeLibNull");\r
524 jComboBoxSelect.addItem("CommonPciCf8Lib");\r
525 jComboBoxSelect.addItem("CommonPciExpressLib");\r
526 jComboBoxSelect.addItem("CommonPciLibCf8");\r
527 jComboBoxSelect.addItem("CommonPciLibPciExpress");\r
528 jComboBoxSelect.addItem("DxeCoreEntryPoint");\r
529 jComboBoxSelect.addItem("DxeHobLib");\r
530 jComboBoxSelect.addItem("DxeIoLibCpuIo");\r
531 jComboBoxSelect.addItem("DxeLib");\r
532 jComboBoxSelect.addItem("DxePcdLib");\r
533 jComboBoxSelect.addItem("DxeReportStatusCodeLib");\r
534 jComboBoxSelect.addItem("DxeServicesTableLib");\r
535 jComboBoxSelect.addItem("PeiCoreEntryPoint");\r
536 jComboBoxSelect.addItem("PeiMemoryLib");\r
537 jComboBoxSelect.addItem("PeimEntryPoint");\r
538 jComboBoxSelect.addItem("PeiReportStatusCodeLib");\r
539 jComboBoxSelect.addItem("PeiServicesTablePointerLib");\r
540 jComboBoxSelect.addItem("PeiServicesTablePointerLibMm7");\r
541 jComboBoxSelect.addItem("UefiDebugLibConOut");\r
542 jComboBoxSelect.addItem("UefiDebugLibStdErr");\r
543 jComboBoxSelect.addItem("UefiDriverEntryPointMultiple");\r
544 jComboBoxSelect.addItem("UefiDriverEntryPointSingle");\r
545 jComboBoxSelect.addItem("UefiDriverEntryPointSingleUnload");\r
546 jComboBoxSelect.addItem("UefiDriverModelLib");\r
547 jComboBoxSelect.addItem("UefiDriverModelLibNoConfigNoDiag");\r
548 jComboBoxSelect.addItem("UefiLib");\r
549 jComboBoxSelect.addItem("UefiMemoryLib");\r
550\r
551 }\r
552\r
553 /* (non-Javadoc)\r
554 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
555 */\r
556 public void actionPerformed(ActionEvent arg0) {\r
557 \r
558 if (arg0.getSource() == jButtonAdd) {\r
559 \r
560 //ToDo: check before add\r
561 // LAH WAS String[] row = {null, null, null, jComboBox.getSelectedItem()+"", jTextField2RecInstVer.getText(), null, null};\r
562 String[] row = {null, null, null, null, null, null, null};\r
563 row[cnClassName] = jTextFieldAdd.getText();\r
564 row[cnHdrFile] = jTextFieldHdr.getText().replace('\\', '/');\r
565 row[cnHelpText] = jTextFieldHelp.getText();\r
566 row[cnRecInstName] = jComboBox.getSelectedItem()+"";\r
567 row[cnRecInstVer] = jTextField2RecInstVer.getText();\r
568 row[cnSupArch] = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
569 if (row[cnSupArch].length() == 0) {\r
570 row[cnSupArch] = null;\r
571 }\r
572 row[cnSupMod] = vectorToString(iCheckBoxListModules.getAllCheckedItemsString());\r
573 if (row[cnSupMod].length() == 0){\r
574 row[cnSupMod] = null;\r
575 }\r
576 if (!dataValidation(row)) {\r
577 return;\r
578 }\r
579 model.addRow(row);\r
580 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
581 docConsole.setSaved(false);\r
582 //\r
583 //convert to GUID before storing recommended lib instance.\r
584 //\r
585 getLibInstances(row[cnClassName]);\r
586 String recommendGuid = nameToGuid(row[cnRecInstName]);\r
587\r
588 sfc.genSpdLibClassDeclarations(row[cnClassName], recommendGuid, row[cnHdrFile], row[cnHelpText], row[cnSupArch], null, null, row[cnRecInstVer], null, row[cnSupMod]);\r
589 \r
590 }\r
591 //\r
592 // remove selected line\r
593 //\r
594 if (arg0.getSource() == jButtonRemove) {\r
595 if (jTable.isEditing()){\r
596 jTable.getCellEditor().stopCellEditing();\r
597 }\r
598 int rowSelected = selectedRow;\r
599 if (rowSelected >= 0) {\r
600 model.removeRow(rowSelected);\r
601 docConsole.setSaved(false);\r
602 sfc.removeSpdLibClass(rowSelected);\r
603 }\r
604 }\r
605\r
606 if (arg0.getSource() == jButtonRemoveAll) {\r
607 if (model.getRowCount() == 0) {\r
608 return;\r
609 }\r
610 docConsole.setSaved(false);\r
611 model.setRowCount(0);\r
612 sfc.removeSpdLibClass();\r
613 }\r
614 }\r
615\r
616 private boolean dataValidation(String[] row) {\r
617 if (!DataValidation.isKeywordType(row[cnClassName])) {\r
618 JOptionPane.showMessageDialog(frame, "Library Class is NOT KeyWord Type.");\r
619 return false;\r
620 }\r
621 if (!DataValidation.isPathAndFilename(row[cnHdrFile])) {\r
622 JOptionPane.showMessageDialog(frame, "Include Header is NOT PathAndFilename Type.");\r
623 return false;\r
624 }\r
625 if (row[cnHelpText].length() == 0) {\r
626 JOptionPane.showMessageDialog(frame, "Help Text Must NOT be empty.");\r
627 return false;\r
628 }\r
629 if (row[cnRecInstVer].length() > 0) {\r
630 if (!DataValidation.isVersionDataType(row[cnRecInstVer])) {\r
631 JOptionPane.showMessageDialog(frame, "Recommended Instance Version is NOT VersionDataType.");\r
632 return false;\r
633 }\r
634 }\r
635 return true;\r
636 }\r
637 /**\r
638 Add contents in list to sfc\r
639 **/\r
640 protected void save() {\r
641 \r
642 }\r
643\r
644 /**\r
645 This method initializes jTextField \r
646 \r
647 @return javax.swing.JTextField \r
648 **/\r
649 private JTextField getJTextFieldHdr() {\r
650 if (jTextFieldHdr == null) {\r
651 jTextFieldHdr = new JTextField();\r
652 jTextFieldHdr.setBounds(new java.awt.Rectangle(218,75,305,21));\r
653 jTextFieldHdr.setPreferredSize(new java.awt.Dimension(260,20));\r
654 }\r
655 return jTextFieldHdr;\r
656 }\r
657\r
658 /**\r
659 This method initializes jButtonBrowse \r
660 \r
661 @return javax.swing.JButton \r
662 **/\r
663 private JButton getJButtonBrowse() {\r
664 if (jButtonBrowse == null) {\r
665 jButtonBrowse = new JButton();\r
666 jButtonBrowse.setBounds(new java.awt.Rectangle(527,75,90,20));\r
667 jButtonBrowse.setText("Browse");\r
668 jButtonBrowse.setPreferredSize(new java.awt.Dimension(99,20));\r
669 jButtonBrowse.addActionListener(new AbstractAction() {\r
670 \r
671 /**\r
672 * \r
673 */\r
674 private static final long serialVersionUID = 1L;\r
675\r
676 public void actionPerformed(ActionEvent arg0) {\r
677 //\r
678 // Select files from current pkg\r
679 //\r
680 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
681 JFileChooser chooser = new JFileChooser(dirPrefix);\r
682 File theFile = null;\r
683 String headerDest = null;\r
684 \r
685 chooser.setMultiSelectionEnabled(false);\r
686 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
687 int retval = chooser.showOpenDialog(frame);\r
688 if (retval == JFileChooser.APPROVE_OPTION) {\r
689\r
690 theFile = chooser.getSelectedFile();\r
691 String file = theFile.getPath();\r
692 if (!file.startsWith(dirPrefix)) {\r
693 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
694 return;\r
695 }\r
696 \r
697 \r
698 }\r
699 else {\r
700 return;\r
701 }\r
702 \r
703 headerDest = theFile.getPath();\r
704 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
705 jTextFieldHdr.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
706 \r
707 }\r
708\r
709 });\r
710 }\r
711 return jButtonBrowse;\r
712 }\r
713 \r
714 public void componentResized(ComponentEvent arg0) {\r
715 int intPreferredWidth = 500;\r
716 \r
717 resizeComponentWidth(this.jTextFieldAdd, this.getWidth(), intPreferredWidth);\r
718 resizeComponentWidth(this.jTextFieldHelp, this.getWidth(), intPreferredWidth);\r
719 resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth-10);\r
720 \r
721 }\r
722 /**\r
723 * This method initializes jTextFieldHelp \r
724 * \r
725 * @return javax.swing.JTextField \r
726 */\r
727 private JTextField getJTextFieldHelp() {\r
728 if (jTextFieldHelp == null) {\r
729 jTextFieldHelp = new JTextField();\r
730 jTextFieldHelp.setBounds(new java.awt.Rectangle(122,33,390,20));\r
731 jTextFieldHelp.setPreferredSize(new java.awt.Dimension(260,20));\r
732 }\r
733 return jTextFieldHelp;\r
734 }\r
735\r
736 /**\r
737 * This method initializes jTextField1RecInstName \r
738 * \r
739 * @return javax.swing.JTextField \r
740 */\r
741 private JTextField getJTextField1RecInstName() {\r
742 if (jTextField1RecInstName == null) {\r
743 jTextField1RecInstName = new JTextField();\r
744 jTextField1RecInstName.setBounds(new java.awt.Rectangle(218,110,291,20));\r
745 jTextField1RecInstName.setEnabled(true);\r
746 jTextField1RecInstName.setVisible(false);\r
747 }\r
748 return jTextField1RecInstName;\r
749 }\r
750\r
751 /**\r
752 * This method initializes jTextField2RecInstVer \r
753 * \r
754 * @return javax.swing.JTextField \r
755 */\r
756 private JTextField getJTextField2RecInstVer() {\r
757 if (jTextField2RecInstVer == null) {\r
758 jTextField2RecInstVer = new JTextField();\r
759 jTextField2RecInstVer.setBounds(new java.awt.Rectangle(218,135,292,20));\r
760 jTextField2RecInstVer.setEnabled(true);\r
761 }\r
762 return jTextField2RecInstVer;\r
763 }\r
764\r
765 private JScrollPane getJScrollPaneModules() {\r
766 if (jScrollPaneModules == null) {\r
767 jScrollPaneModules = new JScrollPane();\r
768 jScrollPaneModules.setBounds(new java.awt.Rectangle(218,245,293,73));\r
769 jScrollPaneModules.setPreferredSize(new java.awt.Dimension(320, 80));\r
770 jScrollPaneModules.setViewportView(getICheckBoxListSupportedModules());\r
771 }\r
772 return jScrollPaneModules;\r
773 }\r
774 \r
775 private ICheckBoxList getICheckBoxListSupportedModules() {\r
776 if (iCheckBoxListModules == null) {\r
777 iCheckBoxListModules = new ICheckBoxList();\r
778 iCheckBoxListModules.setBounds(new java.awt.Rectangle(218,246,292,73));\r
779 Vector<String> v = new Vector<String>();\r
780 v.add("BASE");\r
781 v.add("SEC");\r
782 v.add("PEI_CORE");\r
783 v.add("PEIM");\r
784 v.add("DXE_CORE");\r
785 v.add("DXE_DRIVER");\r
786 v.add("DXE_RUNTIME_DRIVER");\r
787 v.add("DXE_SAL_DRIVER");\r
788 v.add("DXE_SMM_DRIVER");\r
789 v.add("UEFI_DRIVER");\r
790 v.add("UEFI_APPLICATION");\r
791 v.add("USER_DEFINED");\r
792 iCheckBoxListModules.setAllItems(v);\r
793 }\r
794 return iCheckBoxListModules;\r
795 }\r
796 \r
797 private String vectorToString(Vector<String> v) {\r
798 String s = " ";\r
799 for (int i = 0; i < v.size(); ++i) {\r
800 s += v.get(i);\r
801 s += " ";\r
802 }\r
803 return s.trim();\r
804 }\r
805 \r
806 private JScrollPane getJScrollPane1Arch() {\r
807 if (jScrollPane1Arch == null) {\r
808 jScrollPane1Arch = new JScrollPane();\r
809 jScrollPane1Arch.setBounds(new java.awt.Rectangle(218,170,293,73));\r
810 jScrollPane1Arch.setPreferredSize(new java.awt.Dimension(320, 80));\r
811 jScrollPane1Arch.setViewportView(getICheckBoxList());\r
812 }\r
813 return jScrollPane1Arch;\r
814 }\r
815 /**\r
816 * This method initializes iCheckBoxList \r
817 * \r
818 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList \r
819 */\r
820 private ICheckBoxList getICheckBoxList() {\r
821 if (iCheckBoxList == null) {\r
822 iCheckBoxList = new ICheckBoxList();\r
823 iCheckBoxList.setBounds(new java.awt.Rectangle(218,171,292,66));\r
824 Vector<String> v = new Vector<String>();\r
825 v.add("IA32");\r
826 v.add("X64");\r
827 v.add("IPF");\r
828 v.add("EBC");\r
829 v.add("ARM");\r
830 v.add("PPC");\r
831 iCheckBoxList.setAllItems(v);\r
832 }\r
833 return iCheckBoxList;\r
834 }\r
835\r
836 /**\r
837 * This method initializes jComboBox \r
838 * \r
839 * @return javax.swing.JComboBox \r
840 */\r
841 private JComboBox getJComboBox() {\r
842 if (jComboBox == null) {\r
843 jComboBox = new JComboBox();\r
844 jComboBox.setPreferredSize(new java.awt.Dimension(31,20));\r
845 jComboBox.setSize(new java.awt.Dimension(290,20));\r
846 jComboBox.setLocation(new java.awt.Point(218,111));\r
847 jComboBox.addFocusListener(new java.awt.event.FocusAdapter() {\r
848 public void focusGained(java.awt.event.FocusEvent e) {\r
849 if (jTextFieldAdd.getText().length() == 0) {\r
850 return;\r
851 }\r
852 jComboBox.removeAllItems();\r
853 getLibInstances(jTextFieldAdd.getText());\r
854 Set<String> libNames = libNameGuidMap.keySet();\r
855 Iterator<String> si = libNames.iterator();\r
856 while(si.hasNext()) {\r
857 jComboBox.addItem(si.next());\r
858 }\r
859 }\r
860 });\r
861 \r
862 }\r
863 return jComboBox;\r
864 }\r
865\r
866 private void getLibInstances(String libClass){\r
867 libNameGuidMap.clear();\r
868 try {\r
869 GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
870 \r
871 Set<PackageIdentification> spi = GlobalData.getPackageList();\r
872 Iterator ispi = spi.iterator();\r
873 \r
874 while (ispi.hasNext()) {\r
875 PackageIdentification pi = (PackageIdentification) ispi.next();\r
876\r
877 Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
878 Iterator ismi = smi.iterator();\r
879 while (ismi.hasNext()) {\r
880 ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
881 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
882 SurfaceAreaQuery.setDoc(m);\r
883 String[] classProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
884 for (int i = 0; i < classProduced.length; ++i) {\r
885 if (classProduced[i].equals(libClass)) {\r
886 libNameGuidMap.put(mi.getName(), mi.getGuid());\r
887 }\r
888 }\r
889 }\r
890 }\r
891 }\r
892 catch(Exception e){\r
893 JOptionPane.showMessageDialog(frame, "Search Instances Fail.");\r
894 }\r
895 \r
896 }\r
897\r
898 private String nameToGuid(String name) {\r
899 String s = null;\r
900 if (!libNameGuidMap.containsKey(name)) {\r
901 return s;\r
902 }\r
903 \r
904 s = libNameGuidMap.get(name);\r
905 return s;\r
906 }\r
907 \r
908 private String guidToName(String guid){\r
909 String s = "";\r
910 if (!libNameGuidMap.containsValue(guid)) {\r
911 return s;\r
912 }\r
913 Set<String> key = libNameGuidMap.keySet();\r
914 Iterator<String> is = key.iterator();\r
915 while(is.hasNext()) {\r
916 s = is.next();\r
917 if (libNameGuidMap.get(s).equals(guid)) {\r
918 break;\r
919 }\r
920 }\r
921 return s;\r
922 }\r
923\r
924}\r
925\r
926\r