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