]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Add ModuleSA BuildOptions
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
CommitLineData
a13899c5 1package org.tianocore.frameworkwizard.platform.ui;\r
2\r
3import java.awt.BorderLayout;\r
4\r
a13899c5 5import javax.swing.JFrame;\r
6import javax.swing.JOptionPane;\r
7import javax.swing.JPanel;\r
8import javax.swing.JDialog;\r
9import javax.swing.JTabbedPane;\r
10import javax.swing.JLabel;\r
11import javax.swing.JScrollPane;\r
12import javax.swing.JTable;\r
a13899c5 13import javax.swing.JTextArea;\r
14import javax.swing.JSplitPane;\r
15import javax.swing.JButton;\r
16import javax.swing.ListSelectionModel;\r
17import javax.swing.event.ListSelectionEvent;\r
18import javax.swing.event.ListSelectionListener;\r
19import javax.swing.event.TableModelEvent;\r
20import javax.swing.event.TableModelListener;\r
21import javax.swing.table.DefaultTableModel;\r
a13899c5 22import javax.swing.table.TableModel;\r
23\r
24import org.apache.xmlbeans.XmlObject;\r
25import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
26import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
27import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
28import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
29\r
30import java.awt.FlowLayout;\r
31import java.awt.event.ActionEvent;\r
32import java.awt.event.ActionListener;\r
33import java.util.ArrayList;\r
34import java.util.HashMap;\r
35import java.util.Iterator;\r
36import java.util.ListIterator;\r
37import java.util.Map;\r
38import java.util.Set;\r
1800d80f 39import java.util.Vector;\r
40\r
6a09eb19 41import javax.swing.JTextField;\r
a13899c5 42\r
43public class FpdModuleSA extends JDialog implements ActionListener {\r
44\r
44053733 45 /**\r
46 * \r
47 */\r
48 private static final long serialVersionUID = 1L;\r
a13899c5 49 static JFrame frame;\r
50 private JPanel jContentPane = null;\r
51 private JTabbedPane jTabbedPane = null;\r
52 private JPanel jPanel = null;\r
53 private JPanel jPanel1 = null;\r
54 private JLabel jLabel = null;\r
55 private JScrollPane jScrollPane = null;\r
56 private JTable jTable = null;\r
57 private JPanel jPanel2 = null;\r
58 private JScrollPane jScrollPane1 = null;\r
59 private JTextArea jTextArea = null;\r
60 private JPanel jPanel3 = null;\r
61 private JSplitPane jSplitPane = null;\r
62 private JPanel jPanel4 = null;\r
63 private JPanel jPanel5 = null;\r
64 private JLabel jLabel1 = null;\r
65 private JLabel jLabel2 = null;\r
66 private JScrollPane jScrollPane2 = null;\r
67 private JTable jTable1 = null;\r
68 private JScrollPane jScrollPane3 = null;\r
69 private JTable jTable2 = null;\r
70 private JScrollPane jScrollPane4 = null;\r
71 private JTable jTable3 = null;\r
72 private JPanel jPanel6 = null;\r
73 private JPanel jPanel7 = null;\r
74 private JScrollPane jScrollPane5 = null;\r
75 private JTextArea jTextArea1 = null;\r
76 private JLabel jLabel3 = null;\r
77 private JLabel jLabel4 = null;\r
78 private JButton jButton = null;\r
79 private JButton jButton1 = null;\r
80 private JLabel jLabel5 = null;\r
81 private JButton jButton2 = null;\r
82 private JButton jButton3 = null;\r
83 private PartialEditableTableModel model = null;\r
84 private LibraryTableModel model1 = null;\r
85 private LibraryTableModel model2 = null;\r
86 private LibraryTableModel model3 = null;\r
1800d80f 87 private DefaultTableModel optionsTableModel = null;\r
a13899c5 88 private FpdFileContents ffc = null;\r
89 private String moduleKey = null;\r
a13899c5 90 private HashMap<String, ArrayList<String>> classInstanceMap = null;\r
91 private ArrayList<String> classProduced = null;\r
a13899c5 92 private HashMap<String, ArrayList<String>> classConsumed = null;\r
6a09eb19 93 private JPanel jPanel8 = null;\r
94 private JLabel jLabel6 = null;\r
95 private JTextField jTextField = null;\r
96 private JLabel jLabel7 = null;\r
97 private JTextField jTextField1 = null;\r
98 private JLabel jLabel8 = null;\r
99 private JTextField jTextField2 = null;\r
100 private JScrollPane jScrollPane6 = null;\r
101 private JTable jTable4 = null;\r
1800d80f 102 private JButton jButton4 = null;\r
103 private JButton jButton5 = null;\r
a13899c5 104 /**\r
105 * This is the default constructor\r
106 */\r
107 public FpdModuleSA() {\r
108 super();\r
109 initialize();\r
110 }\r
111 public FpdModuleSA(FpdFileContents ffc) {\r
112 this();\r
113 this.ffc = ffc;\r
114 }\r
115 \r
116 public void setKey(String k){\r
117 this.moduleKey = k;\r
118 }\r
119\r
120 /**\r
121 init will be called each time FpdModuleSA object is to be shown.\r
122 @param key Module information.\r
123 **/\r
124 public void init(String key) {\r
125 //\r
126 // display pcd for key.\r
127 //\r
128 model.setRowCount(0);\r
129 int pcdCount = ffc.getPcdDataCount(key);\r
130 if (pcdCount != 0) {\r
131 String[][] saa = new String[pcdCount][6];\r
132 ffc.getPcdData(key, saa);\r
133 for (int i = 0; i < saa.length; ++i) {\r
134 model.addRow(saa[i]);\r
135 }\r
136 }\r
137 \r
138 //\r
139 // display lib instances already selected for key\r
140 //\r
141 model1.setRowCount(0);\r
142 int instanceCount = ffc.getLibraryInstancesCount(key);\r
143 if (instanceCount != 0) {\r
144 String[][] saa = new String[instanceCount][5];\r
145 ffc.getLibraryInstances(key, saa);\r
146 for (int i = 0; i < saa.length; ++i) {\r
147 if (getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]) != null) {\r
148 saa[i][0] = getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]).getName();\r
149 }\r
150 \r
151 model1.addRow(saa[i]);\r
152 }\r
153 }\r
154 //\r
155 // display library classes that need to be resolved. also potential instances for them.\r
156 //\r
157 resolveLibraryInstances(key);\r
1800d80f 158 //\r
159 // display module SA options\r
160 //\r
161 String fvBinding = ffc.getFvBinding(key);\r
162 if (fvBinding != null) {\r
163 jTextField.setText(fvBinding);\r
164 }\r
165 String fileGuid = ffc.getFfsFileNameGuid(key);\r
166 if (fileGuid != null) {\r
167 jTextField1.setText(fileGuid);\r
168 }\r
169 String ffsKey = ffc.getFfsFormatKey(key);\r
170 if (ffsKey != null) {\r
171 jTextField2.setText(ffsKey);\r
172 }\r
a13899c5 173 }\r
174 \r
175 private void resolveLibraryInstances(String key) {\r
176 ModuleIdentification mi = getModuleId(key);\r
177 PackageIdentification[] depPkgList = null;\r
178 try{\r
179 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
180 SurfaceAreaQuery.setDoc(m);\r
181 //\r
182 // Get dependency pkg list into which we will search lib instances.\r
183 //\r
184 depPkgList = SurfaceAreaQuery.getDependencePkg(null);\r
185 //\r
186 // Get the lib class consumed, produced by this module itself.\r
187 //\r
188 String[] classConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
189 \r
190 if (this.classConsumed == null) {\r
191 this.classConsumed = new HashMap<String, ArrayList<String>>();\r
192 }\r
193 \r
194 for(int i = 0; i < classConsumed.length; ++i){\r
195 ArrayList<String> consumedBy = this.classConsumed.get(classConsumed[i]);\r
196 if (consumedBy == null) {\r
197 consumedBy = new ArrayList<String>();\r
198 }\r
199 consumedBy.add(key);\r
200 this.classConsumed.put(classConsumed[i], consumedBy);\r
201 }\r
202 \r
203 String[] classProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
204 if (this.classProduced == null) {\r
205 this.classProduced = new ArrayList<String>();\r
206 }\r
207 for(int i = 0; i < classProduced.length; ++i){\r
208 if (!this.classProduced.contains(classProduced[i])){\r
209 this.classProduced.add(classProduced[i]);\r
210 }\r
211 }\r
212 //\r
213 // Get classes unresolved\r
214 //\r
215// Iterator<String> lip = this.classProduced.listIterator();\r
216// while(lip.hasNext()){\r
217// String clsProduced = lip.next();\r
218// this.classConsumed.remove(clsProduced);\r
219//\r
220// }\r
221 //\r
222 // find potential instances in all dependency pkgs for classes still in classConsumed.\r
223 //\r
224 if (classInstanceMap == null){\r
225 classInstanceMap = new HashMap<String, ArrayList<String>>();\r
226 }\r
227 Iterator<String> lic = this.classConsumed.keySet().iterator();\r
228 while(lic.hasNext()){\r
229 String cls = lic.next();\r
230 if (this.classProduced.contains(cls) || classInstanceMap.containsKey(cls)) {\r
231 continue;\r
232 }\r
233 ArrayList<String> instances = getInstancesForClass(cls, depPkgList);\r
234 if (instances.size() == 0){\r
235 JOptionPane.showMessageDialog(frame, "No Applicable Instance for Library Class " + \r
236 cls + ", Platform Build will Fail.");\r
237 }\r
238 classInstanceMap.put(cls, instances);\r
239 \r
240 }\r
241 \r
242 showClassToResolved();\r
243 }\r
244 catch(Exception e) {\r
245 e.printStackTrace();\r
246 }\r
247 }\r
248 \r
249 private ArrayList<String> getInstancesForClass(String cls, PackageIdentification[] depPkgList) throws Exception{\r
250 ArrayList<String> al = new ArrayList<String>();\r
251 \r
252 for (int i = 0; i < depPkgList.length; ++i) {\r
253 Set<ModuleIdentification> smi = GlobalData.getModules(depPkgList[i]);\r
254 Iterator ismi = smi.iterator();\r
255 while(ismi.hasNext()) {\r
256 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
257 \r
258 String[] clsProduced = getClassProduced(mi);\r
259 \r
260 boolean isPotential = false;\r
261 for (int j = 0; j < clsProduced.length; ++j) {\r
262 if (clsProduced[j] == null) {\r
263 continue;\r
264 }\r
265 if (clsProduced[j].equals(cls)){\r
266 isPotential = true;\r
267 }\r
268 if (classProduced.contains(clsProduced[j])) {\r
269 isPotential = false;\r
270 break;\r
271 }\r
272 }\r
273 if (isPotential) {\r
274 al.add(mi.getGuid() + " " + mi.getVersion() + " " + \r
275 depPkgList[i].getGuid() + " " + depPkgList[i].getVersion());\r
276 }\r
277 }\r
278 }\r
279 \r
280 return al;\r
281 }\r
282 \r
283 private void removeInstance(String key) {\r
284 ModuleIdentification mi = getModuleId(key); \r
285 //\r
286 // remove pcd information of instance from current ModuleSA\r
287 //\r
288 ffc.removePcdDataFromLibraryInstance(moduleKey, key);\r
289 //\r
290 // remove class produced by this instance and add back these produced class to be bound.\r
291 //\r
292 String[] clsProduced = getClassProduced(mi);\r
293 for (int i = 0; i < clsProduced.length; ++i) {\r
294 \r
295 classProduced.remove(clsProduced[i]);\r
296 }\r
297 //\r
298 // remove class consumed by this instance. we do not need to bound it now.\r
299 //\r
300 String[] clsConsumed = getClassConsumed(mi);\r
301 for (int i = 0; i < clsConsumed.length; ++i) {\r
302 ArrayList<String> al = classConsumed.get(clsConsumed[i]);\r
303 \r
304 if (al == null ) {\r
305 classConsumed.remove(clsConsumed[i]);\r
306 continue;\r
307 }\r
308 al.remove(key);\r
309 if (al.size() == 0) {\r
310 classConsumed.remove(clsConsumed[i]);\r
311 }\r
312 \r
313 }\r
314\r
315 showClassToResolved();\r
316 \r
317 }\r
318 \r
319 private ModuleIdentification getModuleId(String key){\r
320 //\r
321 // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.\r
322 //\r
323 String[] keyPart = key.split(" ");\r
324 Set<PackageIdentification> spi = GlobalData.getPackageList();\r
325 Iterator ispi = spi.iterator();\r
326 \r
327 while(ispi.hasNext()) {\r
328 PackageIdentification pi = (PackageIdentification)ispi.next();\r
329 if ( !pi.getGuid().equals(keyPart[2]) || !pi.getVersion().equals(keyPart[3])){\r
330 continue;\r
331 }\r
332 Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
333 Iterator ismi = smi.iterator();\r
334 while(ismi.hasNext()) {\r
335 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
336 if (mi.getGuid().equals(keyPart[0]) && mi.getVersion().equals(keyPart[1])){\r
337 return mi;\r
338 }\r
339 }\r
340 }\r
341 return null;\r
342 }\r
343 \r
344 private String[] getClassProduced(ModuleIdentification mi){\r
345 \r
346 try{\r
347 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
348 SurfaceAreaQuery.setDoc(m);\r
349 String[] clsProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
350 return clsProduced;\r
351 \r
352 }catch (Exception e) {\r
353 e.printStackTrace();\r
354 }\r
355 return new String[0];\r
356 \r
357 }\r
358 \r
359 private String[] getClassConsumed(ModuleIdentification mi){\r
360 \r
361 String[] clsConsumed = null;\r
362 try{\r
363 Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
364 SurfaceAreaQuery.setDoc(m);\r
365 clsConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
366 \r
367 }catch (Exception e) {\r
368 e.printStackTrace();\r
369 }\r
370 return clsConsumed;\r
371 }\r
372 \r
373 private void showClassToResolved(){\r
374 model2.setRowCount(0);\r
375 if (classConsumed.size() == 0) {\r
376 return;\r
377 }\r
378 Iterator<String> li = classConsumed.keySet().iterator();\r
379 while(li.hasNext()){\r
380 \r
381 String[] s = {li.next()};\r
382 if (classConsumed.get(s[0]) == null) {\r
383 continue;\r
384 }\r
385 if (classConsumed.get(s[0]).size() == 0) {\r
386 continue;\r
387 }\r
388 if (!classProduced.contains(s[0])){\r
389 model2.addRow(s);\r
390 }\r
391 }\r
392 model3.setRowCount(0);\r
393 }\r
394 /**\r
395 * This method initializes this\r
396 * \r
397 * @return void\r
398 */\r
399 private void initialize() {\r
400 this.setSize(664, 515);\r
401 this.setModal(true);\r
402 this.setTitle("Module Settings");\r
403 this.setContentPane(getJContentPane());\r
404 }\r
405\r
406 /**\r
407 * This method initializes jContentPane\r
408 * \r
409 * @return javax.swing.JPanel\r
410 */\r
411 private JPanel getJContentPane() {\r
412 if (jContentPane == null) {\r
413 jContentPane = new JPanel();\r
414 jContentPane.setLayout(new BorderLayout());\r
415 jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
416 jContentPane.add(getJPanel3(), java.awt.BorderLayout.SOUTH);\r
417 }\r
418 return jContentPane;\r
419 }\r
420\r
421 /**\r
422 * This method initializes jTabbedPane \r
423 * \r
424 * @return javax.swing.JTabbedPane \r
425 */\r
426 private JTabbedPane getJTabbedPane() {\r
427 if (jTabbedPane == null) {\r
428 jTabbedPane = new JTabbedPane();\r
429 jTabbedPane.addTab("PCD Build Definition", null, getJPanel(), null);\r
6a09eb19 430 jTabbedPane.addTab("Module SA Options", null, getJPanel8(), null);\r
a13899c5 431 jTabbedPane.addTab("Libraries", null, getJPanel1(), null);\r
432 }\r
433 return jTabbedPane;\r
434 }\r
435\r
436 /**\r
437 * This method initializes jPanel \r
438 * \r
439 * @return javax.swing.JPanel \r
440 */\r
441 private JPanel getJPanel() {\r
442 if (jPanel == null) {\r
443 jLabel = new JLabel();\r
444 jLabel.setText("PcdData");\r
445 jPanel = new JPanel();\r
446 jPanel.setLayout(new BorderLayout());\r
447 jPanel.add(jLabel, java.awt.BorderLayout.NORTH);\r
448 jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER);\r
449 jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);\r
450 jPanel.addComponentListener(new java.awt.event.ComponentAdapter() {\r
451 public void componentShown(java.awt.event.ComponentEvent e) {\r
452 init(moduleKey);\r
453 }\r
454 });\r
455 \r
456 }\r
457 return jPanel;\r
458 }\r
459\r
460 /**\r
461 * This method initializes jPanel1 \r
462 * \r
463 * @return javax.swing.JPanel \r
464 */\r
465 private JPanel getJPanel1() {\r
466 if (jPanel1 == null) {\r
467 jPanel1 = new JPanel();\r
468 jPanel1.setLayout(new BorderLayout());\r
469 jPanel1.add(getJSplitPane(), java.awt.BorderLayout.NORTH);\r
470 jPanel1.add(getJPanel6(), java.awt.BorderLayout.SOUTH);\r
471 jPanel1.add(getJPanel7(), java.awt.BorderLayout.CENTER);\r
472 jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() {\r
473 public void componentShown(java.awt.event.ComponentEvent e) {\r
474 }\r
475 });\r
476 }\r
477 return jPanel1;\r
478 }\r
479\r
480 /**\r
481 * This method initializes jScrollPane \r
482 * \r
483 * @return javax.swing.JScrollPane \r
484 */\r
485 private JScrollPane getJScrollPane() {\r
486 if (jScrollPane == null) {\r
487 jScrollPane = new JScrollPane();\r
488 jScrollPane.setViewportView(getJTable());\r
489 }\r
490 return jScrollPane;\r
491 }\r
492\r
493 /**\r
494 * This method initializes jTable \r
495 * \r
496 * @return javax.swing.JTable \r
497 */\r
498 private JTable getJTable() {\r
499 if (jTable == null) {\r
500 model = new PartialEditableTableModel();\r
501 jTable = new JTable(model);\r
502 model.addColumn("CName");\r
503 model.addColumn("TokenSpaceGUID");\r
504 model.addColumn("ItemType");\r
505 model.addColumn("Token");\r
506 model.addColumn("DataType");\r
507 model.addColumn("DefaultValue");\r
508 \r
509 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
510 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
511 public void valueChanged(ListSelectionEvent e) {\r
44053733 512 \r
a13899c5 513 if (e.getValueIsAdjusting()){\r
514 return;\r
515 }\r
516 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
517 if (lsm.isSelectionEmpty()) {\r
518 return;\r
519 }\r
520 else{\r
44053733 521// int selectedRow = lsm.getMinSelectionIndex();\r
a13899c5 522 \r
523 \r
524 }\r
525 }\r
526 });\r
527 \r
528 jTable.getModel().addTableModelListener(new TableModelListener() {\r
529 public void tableChanged(TableModelEvent arg0) {\r
530 // TODO Auto-generated method stub\r
531 int row = arg0.getFirstRow();\r
532 TableModel m = (TableModel)arg0.getSource();\r
533 if (arg0.getType() == TableModelEvent.INSERT) {\r
534 //\r
535 // Set combo box values for item type according to pcd values added.\r
536 //\r
537 \r
538 }\r
539 if (arg0.getType() == TableModelEvent.UPDATE){\r
540 //ToDo Data Validition check.\r
541 \r
542 }\r
543 }\r
544 });\r
545 }\r
546 return jTable;\r
547 }\r
548\r
549 /**\r
550 * This method initializes jPanel2 \r
551 * \r
552 * @return javax.swing.JPanel \r
553 */\r
554 private JPanel getJPanel2() {\r
555 if (jPanel2 == null) {\r
556 jLabel5 = new JLabel();\r
557 jLabel5.setText("PCD Description");\r
558 jPanel2 = new JPanel();\r
559 jPanel2.add(jLabel5, null);\r
560 jPanel2.add(getJScrollPane1(), null);\r
561 }\r
562 return jPanel2;\r
563 }\r
564\r
565 /**\r
566 * This method initializes jScrollPane1 \r
567 * \r
568 * @return javax.swing.JScrollPane \r
569 */\r
570 private JScrollPane getJScrollPane1() {\r
571 if (jScrollPane1 == null) {\r
572 jScrollPane1 = new JScrollPane();\r
573 jScrollPane1.setPreferredSize(new java.awt.Dimension(500,100));\r
574 jScrollPane1.setViewportView(getJTextArea());\r
575 }\r
576 return jScrollPane1;\r
577 }\r
578\r
579 /**\r
580 * This method initializes jTextArea \r
581 * \r
582 * @return javax.swing.JTextArea \r
583 */\r
584 private JTextArea getJTextArea() {\r
585 if (jTextArea == null) {\r
586 jTextArea = new JTextArea();\r
587 jTextArea.setEditable(false);\r
588 }\r
589 return jTextArea;\r
590 }\r
591\r
592 /**\r
593 * This method initializes jPanel3 \r
594 * \r
595 * @return javax.swing.JPanel \r
596 */\r
597 private JPanel getJPanel3() {\r
598 if (jPanel3 == null) {\r
599 FlowLayout flowLayout = new FlowLayout();\r
600 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
601 jPanel3 = new JPanel();\r
602 jPanel3.setLayout(flowLayout);\r
603 jPanel3.add(getJButton2(), null);\r
604 jPanel3.add(getJButton3(), null);\r
605 }\r
606 return jPanel3;\r
607 }\r
608\r
609 /**\r
610 * This method initializes jSplitPane \r
611 * \r
612 * @return javax.swing.JSplitPane \r
613 */\r
614 private JSplitPane getJSplitPane() {\r
615 if (jSplitPane == null) {\r
616 jSplitPane = new JSplitPane();\r
617 jSplitPane.setDividerLocation(200);\r
618 jSplitPane.setLeftComponent(getJPanel4());\r
619 jSplitPane.setRightComponent(getJPanel5());\r
620 jSplitPane.setPreferredSize(new java.awt.Dimension(202,200));\r
621 }\r
622 return jSplitPane;\r
623 }\r
624\r
625 /**\r
626 * This method initializes jPanel4 \r
627 * \r
628 * @return javax.swing.JPanel \r
629 */\r
630 private JPanel getJPanel4() {\r
631 if (jPanel4 == null) {\r
632 jLabel1 = new JLabel();\r
633 jLabel1.setText("Library Classes Consumed");\r
634 jPanel4 = new JPanel();\r
635 jPanel4.add(jLabel1, null);\r
636 jPanel4.add(getJScrollPane3(), null);\r
637 }\r
638 return jPanel4;\r
639 }\r
640\r
641 /**\r
642 * This method initializes jPanel5 \r
643 * \r
644 * @return javax.swing.JPanel \r
645 */\r
646 private JPanel getJPanel5() {\r
647 if (jPanel5 == null) {\r
648 jLabel2 = new JLabel();\r
649 jLabel2.setText("Instances Available");\r
650 jPanel5 = new JPanel();\r
651 jPanel5.add(jLabel2, null);\r
652 jPanel5.add(getJScrollPane4(), null);\r
653 }\r
654 return jPanel5;\r
655 }\r
656\r
657 /**\r
658 * This method initializes jScrollPane2 \r
659 * \r
660 * @return javax.swing.JScrollPane \r
661 */\r
662 private JScrollPane getJScrollPane2() {\r
663 if (jScrollPane2 == null) {\r
664 jScrollPane2 = new JScrollPane();\r
665 jScrollPane2.setPreferredSize(new java.awt.Dimension(453,150));\r
666 jScrollPane2.setViewportView(getJTable1());\r
667 }\r
668 return jScrollPane2;\r
669 }\r
670\r
671 /**\r
672 * This method initializes jTable1 \r
673 * \r
674 * @return javax.swing.JTable \r
675 */\r
676 private JTable getJTable1() {\r
677 if (jTable1 == null) {\r
678 model1 = new LibraryTableModel();\r
679 model1.addColumn("Name");\r
680 model1.addColumn("ModuleGUID");\r
681 model1.addColumn("ModuleVersion");\r
682 model1.addColumn("PackageGUID");\r
683 model1.addColumn("PackageVersion");\r
684 jTable1 = new JTable(model1);\r
685 \r
686 jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
687 jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
688 public void valueChanged(ListSelectionEvent e) {\r
689 int selectedRow1 = -1;\r
690 if (e.getValueIsAdjusting()){\r
691 return;\r
692 }\r
693 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
694 if (lsm.isSelectionEmpty()) {\r
695 return;\r
696 }\r
697 else{\r
698 selectedRow1 = lsm.getMinSelectionIndex();\r
699 \r
700 \r
701 }\r
702 }\r
703 });\r
704 \r
705 \r
706 }\r
707 return jTable1;\r
708 }\r
709\r
710 /**\r
711 * This method initializes jScrollPane3 \r
712 * \r
713 * @return javax.swing.JScrollPane \r
714 */\r
715 private JScrollPane getJScrollPane3() {\r
716 if (jScrollPane3 == null) {\r
717 jScrollPane3 = new JScrollPane();\r
718 jScrollPane3.setPreferredSize(new java.awt.Dimension(200,170));\r
719 jScrollPane3.setViewportView(getJTable2());\r
720 }\r
721 return jScrollPane3;\r
722 }\r
723\r
724 /**\r
725 * This method initializes jTable2 \r
726 * \r
727 * @return javax.swing.JTable \r
728 */\r
729 private JTable getJTable2() {\r
730 if (jTable2 == null) {\r
731 model2 = new LibraryTableModel();\r
732 model2.addColumn("LibraryClass");\r
733 jTable2 = new JTable(model2);\r
734 \r
735 jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
736 jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
737 public void valueChanged(ListSelectionEvent e) {\r
738 if (e.getValueIsAdjusting()){\r
739 return;\r
740 }\r
741 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
742 if (lsm.isSelectionEmpty()) {\r
743 return;\r
744 }\r
745 else{\r
746 int selectedRow2 = lsm.getMinSelectionIndex();\r
747 if (selectedRow2 < 0) {\r
748 return;\r
749 }\r
750 //\r
751 // display potential lib instances according to class selection\r
752 //\r
753 model3.setRowCount(0);\r
754 String cls = model2.getValueAt(selectedRow2, 0).toString();\r
755 ArrayList<String> al = classInstanceMap.get(cls);\r
756 ListIterator<String> li = al.listIterator();\r
757 while(li.hasNext()) {\r
758 String instance = li.next();\r
759 String[] s = {"", "", "", "", ""};\r
760 if (getModuleId(instance) != null) {\r
761 s[0] = getModuleId(instance).getName();\r
762 }\r
763 \r
764 String[] instancePart = instance.split(" ");\r
765 for (int i = 0; i < instancePart.length; ++i){\r
766 s[i+1] = instancePart[i];\r
767 }\r
768 model3.addRow(s);\r
769 }\r
770 \r
771 }\r
772 }\r
773 });\r
774 }\r
775 return jTable2;\r
776 }\r
777\r
778 /**\r
779 * This method initializes jScrollPane4 \r
780 * \r
781 * @return javax.swing.JScrollPane \r
782 */\r
783 private JScrollPane getJScrollPane4() {\r
784 if (jScrollPane4 == null) {\r
785 jScrollPane4 = new JScrollPane();\r
786 jScrollPane4.setPreferredSize(new java.awt.Dimension(450,170));\r
787 jScrollPane4.setViewportView(getJTable3());\r
788 }\r
789 return jScrollPane4;\r
790 }\r
791\r
792 /**\r
793 * This method initializes jTable3 \r
794 * \r
795 * @return javax.swing.JTable \r
796 */\r
797 private JTable getJTable3() {\r
798 if (jTable3 == null) {\r
799 model3 = new LibraryTableModel();\r
800 model3.addColumn("Name");\r
801 model3.addColumn("ModuleGUID");\r
802 model3.addColumn("ModuleVersion");\r
803 model3.addColumn("PackageGUID");\r
804 model3.addColumn("PackageVersion");\r
805 jTable3 = new JTable(model3);\r
806 \r
807 jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
808 jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
809 public void valueChanged(ListSelectionEvent e) {\r
810 int selectedRow3 = -1;\r
811 if (e.getValueIsAdjusting()){\r
812 return;\r
813 }\r
814 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
815 if (lsm.isSelectionEmpty()) {\r
816 return;\r
817 }\r
818 else{\r
819 selectedRow3 = lsm.getMinSelectionIndex();\r
820 \r
821 \r
822 }\r
823 }\r
824 });\r
825 }\r
826 return jTable3;\r
827 }\r
828\r
829 /**\r
830 * This method initializes jPanel6 \r
831 * \r
832 * @return javax.swing.JPanel \r
833 */\r
834 private JPanel getJPanel6() {\r
835 if (jPanel6 == null) {\r
836 jPanel6 = new JPanel();\r
837 }\r
838 return jPanel6;\r
839 }\r
840\r
841 /**\r
842 * This method initializes jPanel7 \r
843 * \r
844 * @return javax.swing.JPanel \r
845 */\r
846 private JPanel getJPanel7() {\r
847 if (jPanel7 == null) {\r
848 jLabel4 = new JLabel();\r
849 jLabel4.setText("Instance Description");\r
850 jLabel3 = new JLabel();\r
851 jLabel3.setText("Selected Instances");\r
852 jPanel7 = new JPanel();\r
853 jPanel7.add(jLabel4, null);\r
854 jPanel7.add(getJScrollPane5(), null);\r
855 jPanel7.add(getJButton(), null);\r
856 jPanel7.add(getJButton1(), null);\r
857 jPanel7.add(jLabel3, null);\r
858 jPanel7.add(getJScrollPane2(), null);\r
859 }\r
860 return jPanel7;\r
861 }\r
862\r
863 /**\r
864 * This method initializes jScrollPane5 \r
865 * \r
866 * @return javax.swing.JScrollPane \r
867 */\r
868 private JScrollPane getJScrollPane5() {\r
869 if (jScrollPane5 == null) {\r
870 jScrollPane5 = new JScrollPane();\r
871 jScrollPane5.setPreferredSize(new java.awt.Dimension(300,50));\r
872 jScrollPane5.setViewportView(getJTextArea1());\r
873 }\r
874 return jScrollPane5;\r
875 }\r
876\r
877 /**\r
878 * This method initializes jTextArea1 \r
879 * \r
880 * @return javax.swing.JTextArea \r
881 */\r
882 private JTextArea getJTextArea1() {\r
883 if (jTextArea1 == null) {\r
884 jTextArea1 = new JTextArea();\r
885 jTextArea1.setEditable(false);\r
886 }\r
887 return jTextArea1;\r
888 }\r
889\r
890 /**\r
891 * This method initializes jButton \r
892 * \r
893 * @return javax.swing.JButton \r
894 */\r
895 private JButton getJButton() {\r
896 if (jButton == null) {\r
897 jButton = new JButton();\r
898 jButton.setPreferredSize(new java.awt.Dimension(80,20));\r
899 jButton.setText("Add");\r
900 jButton.addActionListener(new java.awt.event.ActionListener() {\r
901 public void actionPerformed(java.awt.event.ActionEvent e) {\r
902 int row = jTable3.getSelectedRow();\r
903 if (row < 0) {\r
904 return;\r
905 }\r
906 Object[] s = {model3.getValueAt(row, 0), model3.getValueAt(row, 1),\r
907 model3.getValueAt(row, 2), model3.getValueAt(row, 3),\r
908 model3.getValueAt(row, 4)};\r
909 model1.addRow(s);\r
910 String instanceValue = model3.getValueAt(row, 1) + " " + \r
911 model3.getValueAt(row, 2) + " " +\r
912 model3.getValueAt(row, 3) + " " +\r
913 model3.getValueAt(row, 4);\r
914 //\r
915 // Add pcd information of selected instance to current moduleSA\r
916 //\r
917 ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey));\r
918 \r
919 resolveLibraryInstances(instanceValue);\r
920 }\r
921 });\r
922 }\r
923 return jButton;\r
924 }\r
925\r
926 /**\r
927 * This method initializes jButton1 \r
928 * \r
929 * @return javax.swing.JButton \r
930 */\r
931 private JButton getJButton1() {\r
932 if (jButton1 == null) {\r
933 jButton1 = new JButton();\r
934 jButton1.setPreferredSize(new java.awt.Dimension(80,20));\r
935 jButton1.setText("Delete");\r
936 jButton1.addActionListener(new java.awt.event.ActionListener() {\r
937 public void actionPerformed(java.awt.event.ActionEvent e) {\r
938 int row = jTable1.getSelectedRow();\r
939 if (row < 0) {\r
940 return;\r
941 }\r
942 removeInstance(model1.getValueAt(row, 1) + " " + \r
943 model1.getValueAt(row, 2) + " " +\r
944 model1.getValueAt(row, 3) + " " +\r
945 model1.getValueAt(row, 4));\r
946 model1.removeRow(row);\r
947 \r
948 }\r
949 });\r
950 }\r
951 return jButton1;\r
952 }\r
953\r
954 /**\r
955 * This method initializes jButton2 \r
956 * \r
957 * @return javax.swing.JButton \r
958 */\r
959 private JButton getJButton2() {\r
960 if (jButton2 == null) {\r
961 jButton2 = new JButton();\r
962 jButton2.setPreferredSize(new java.awt.Dimension(80,20));\r
963 jButton2.setText("Ok");\r
964 jButton2.addActionListener(this);\r
965 }\r
966 return jButton2;\r
967 }\r
968\r
969 /**\r
970 * This method initializes jButton3 \r
971 * \r
972 * @return javax.swing.JButton \r
973 */\r
974 private JButton getJButton3() {\r
975 if (jButton3 == null) {\r
976 jButton3 = new JButton();\r
977 jButton3.setPreferredSize(new java.awt.Dimension(80,20));\r
978 jButton3.setText("Cancel");\r
979 jButton3.setVisible(false);\r
980 }\r
981 return jButton3;\r
982 }\r
983 public void actionPerformed(ActionEvent arg0) {\r
984\r
985 if (arg0.getSource() == jButton2) {\r
986 ffc.removeLibraryInstances(moduleKey);\r
987 for (int i = 0; i < model1.getRowCount(); ++i) {\r
988 String mg = model1.getValueAt(i, 1)+"";\r
989 String mv = model1.getValueAt(i, 2)+"";\r
990 String pg = model1.getValueAt(i, 3)+"";\r
991 String pv = model1.getValueAt(i, 4)+"";\r
992 ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey);\r
993 }\r
994 this.setVisible(false);\r
995 }\r
996 }\r
6a09eb19 997 /**\r
998 * This method initializes jPanel8 \r
999 * \r
1000 * @return javax.swing.JPanel \r
1001 */\r
1002 private JPanel getJPanel8() {\r
1003 if (jPanel8 == null) {\r
1004 jLabel8 = new JLabel();\r
1005 jLabel8.setText("FFS Format Key");\r
1006 jLabel7 = new JLabel();\r
1007 jLabel7.setText("FFS File GUID");\r
1008 jLabel6 = new JLabel();\r
1009 jLabel6.setText("FV Binding");\r
1010 jPanel8 = new JPanel();\r
1011 jPanel8.add(jLabel6, null);\r
1012 jPanel8.add(getJTextField(), null);\r
1013 jPanel8.add(jLabel7, null);\r
1014 jPanel8.add(getJTextField1(), null);\r
1015 jPanel8.add(jLabel8, null);\r
1016 jPanel8.add(getJTextField2(), null);\r
1017 jPanel8.add(getJScrollPane6(), null);\r
1800d80f 1018 jPanel8.add(getJButton4(), null);\r
1019 jPanel8.add(getJButton5(), null);\r
6a09eb19 1020 }\r
1021 return jPanel8;\r
1022 }\r
1023 /**\r
1024 * This method initializes jTextField \r
1025 * \r
1026 * @return javax.swing.JTextField \r
1027 */\r
1028 private JTextField getJTextField() {\r
1029 if (jTextField == null) {\r
1030 jTextField = new JTextField();\r
1031 jTextField.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1032 jTextField.addFocusListener(new java.awt.event.FocusAdapter() {\r
1033 public void focusLost(java.awt.event.FocusEvent e) {\r
1034 ffc.setFvBinding(moduleKey, jTextField.getText());\r
1035 }\r
1036 });\r
6a09eb19 1037 }\r
1038 return jTextField;\r
1039 }\r
1040 /**\r
1041 * This method initializes jTextField1 \r
1042 * \r
1043 * @return javax.swing.JTextField \r
1044 */\r
1045 private JTextField getJTextField1() {\r
1046 if (jTextField1 == null) {\r
1047 jTextField1 = new JTextField();\r
1048 jTextField1.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1049 jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {\r
1050 public void focusLost(java.awt.event.FocusEvent e) {\r
1051 ffc.setFfsFileNameGuid(moduleKey, jTextField1.getText());\r
1052 }\r
1053 });\r
6a09eb19 1054 }\r
1055 return jTextField1;\r
1056 }\r
1057 /**\r
1058 * This method initializes jTextField2 \r
1059 * \r
1060 * @return javax.swing.JTextField \r
1061 */\r
1062 private JTextField getJTextField2() {\r
1063 if (jTextField2 == null) {\r
1064 jTextField2 = new JTextField();\r
1065 jTextField2.setPreferredSize(new java.awt.Dimension(100,20));\r
1800d80f 1066 jTextField2.addFocusListener(new java.awt.event.FocusAdapter() {\r
1067 public void focusLost(java.awt.event.FocusEvent e) {\r
1068 ffc.setFfsFormatKey(moduleKey, jTextField2.getText());\r
1069 }\r
1070 });\r
6a09eb19 1071 }\r
1072 return jTextField2;\r
1073 }\r
1074 /**\r
1075 * This method initializes jScrollPane6 \r
1076 * \r
1077 * @return javax.swing.JScrollPane \r
1078 */\r
1079 private JScrollPane getJScrollPane6() {\r
1080 if (jScrollPane6 == null) {\r
1081 jScrollPane6 = new JScrollPane();\r
1082 jScrollPane6.setPreferredSize(new java.awt.Dimension(600,200));\r
1083 jScrollPane6.setViewportView(getJTable4());\r
1084 }\r
1085 return jScrollPane6;\r
1086 }\r
1087 /**\r
1088 * This method initializes jTable4 \r
1089 * \r
1090 * @return javax.swing.JTable \r
1091 */\r
1092 private JTable getJTable4() {\r
1093 if (jTable4 == null) {\r
1800d80f 1094 optionsTableModel = new DefaultTableModel();\r
1095 optionsTableModel.addColumn("BuildTargets");\r
1096 optionsTableModel.addColumn("ToolChainFamily");\r
1097 optionsTableModel.addColumn("TagName");\r
1098 optionsTableModel.addColumn("ToolCode");\r
1099 optionsTableModel.addColumn("SupportedArchs");\r
1100 optionsTableModel.addColumn("Contents");\r
1101 jTable4 = new JTable(optionsTableModel);\r
1102 jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
1103 jTable4.getModel().addTableModelListener(new TableModelListener() {\r
1104 public void tableChanged(TableModelEvent arg0) {\r
1105 // TODO Auto-generated method stub\r
1106 int row = arg0.getFirstRow();\r
1107 TableModel m = (TableModel)arg0.getSource();\r
1108 \r
1109 if (arg0.getType() == TableModelEvent.UPDATE){\r
1110 //ToDo Data Validition check.\r
1111 String targets = m.getValueAt(row, 0) + "";\r
1112 Vector<Object> targetName = new Vector<Object>();\r
1113 String[] sArray = targets.split(" ");\r
1114 for (int i = 0; i < sArray.length; ++i) {\r
1115 targetName.add(sArray[i]);\r
1116 }\r
1117 String toolChain = m.getValueAt(row, 1) + "";\r
1118 String tagName = m.getValueAt(row, 2) + "";\r
1119 String toolCode = m.getValueAt(row, 3) + "";\r
1120 String archs = m.getValueAt(row, 4) + "";\r
1121 Vector<Object> supArch = new Vector<Object>();\r
1122 String[] sArray1 = archs.split(" ");\r
1123 for (int i = 0; i < sArray1.length; ++i) {\r
1124 supArch.add(sArray1[i]);\r
1125 }\r
1126 if (supArch.size() == 0) {\r
1127 supArch.add("IA32");\r
1128 }\r
1129 String contents = m.getValueAt(row, 5) + "";\r
1130 \r
1131 ffc.updateModuleSAOptionsOpt(moduleKey, row, targetName, toolChain, tagName, toolCode, supArch, contents);\r
1132 }\r
1133 }\r
1134 });\r
6a09eb19 1135 }\r
1136 return jTable4;\r
1137 }\r
1800d80f 1138 /**\r
1139 * This method initializes jButton4 \r
1140 * \r
1141 * @return javax.swing.JButton \r
1142 */\r
1143 private JButton getJButton4() {\r
1144 if (jButton4 == null) {\r
1145 jButton4 = new JButton();\r
1146 jButton4.setPreferredSize(new java.awt.Dimension(80,20));\r
1147 jButton4.setText("New");\r
1148 jButton4.addActionListener(new java.awt.event.ActionListener() {\r
1149 public void actionPerformed(java.awt.event.ActionEvent e) {\r
1150 String[] row = {"", "", "", "", "IA32", ""};\r
1151 optionsTableModel.addRow(row);\r
1152 Vector<Object> v = new Vector<Object>();\r
1153 Vector<Object> v1 = new Vector<Object>();\r
1154 v1.add("IA32");\r
1155 ffc.genModuleSAOptionsOpt(moduleKey, v, "", "", "", v1, "");\r
1156 }\r
1157 });\r
1158 }\r
1159 return jButton4;\r
1160 }\r
1161 /**\r
1162 * This method initializes jButton5 \r
1163 * \r
1164 * @return javax.swing.JButton \r
1165 */\r
1166 private JButton getJButton5() {\r
1167 if (jButton5 == null) {\r
1168 jButton5 = new JButton();\r
1169 jButton5.setPreferredSize(new java.awt.Dimension(80,20));\r
1170 jButton5.setText("Delete");\r
1171 jButton5.addActionListener(new java.awt.event.ActionListener() {\r
1172 public void actionPerformed(java.awt.event.ActionEvent e) {\r
1173 if (jTable4.getSelectedRow() < 0) {\r
1174 return;\r
1175 }\r
1176 \r
1177 ffc.removeModuleSAOptionsOpt(moduleKey, jTable4.getSelectedRow());\r
1178 optionsTableModel.removeRow(jTable4.getSelectedRow());\r
1179 }\r
1180 });\r
1181 }\r
1182 return jButton5;\r
1183 }\r
a13899c5 1184\r
1185} // @jve:decl-index=0:visual-constraint="10,10"\r
1186\r
1187class PartialEditableTableModel extends DefaultTableModel {\r
44053733 1188 /**\r
1189 * \r
1190 */\r
1191 private static final long serialVersionUID = 1L;\r
1192\r
a13899c5 1193 public boolean isCellEditable(int row, int col) {\r
1194 switch (col){\r
1195 case 2:\r
1196 return true;\r
1197 default:\r
1198 return false; \r
1199 }\r
1200 \r
1201 }\r
1202}\r
1203\r
1204class LibraryTableModel extends DefaultTableModel {\r
44053733 1205 /**\r
1206 * \r
1207 */\r
1208 private static final long serialVersionUID = 1L;\r
1209\r
a13899c5 1210 public boolean isCellEditable(int row, int col) {\r
1211 return false;\r
1212 }\r
1213}\r