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