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