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