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