ee0a1e645c9120478fdfc47b43264bf560afc257
[people/mcb30/edk2.git] / edk2 / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
1 package org.tianocore.frameworkwizard.platform.ui;\r
2 \r
3 import java.awt.BorderLayout;\r
4 \r
5 import javax.swing.JFrame;\r
6 import javax.swing.JOptionPane;\r
7 import javax.swing.JPanel;\r
8 import javax.swing.JSplitPane;\r
9 import javax.swing.JLabel;\r
10 import javax.swing.JScrollPane;\r
11 import javax.swing.JTable;\r
12 import javax.swing.JButton;\r
13 import javax.swing.ListSelectionModel;\r
14 import javax.swing.table.DefaultTableModel;\r
15 \r
16 import org.tianocore.PlatformSurfaceAreaDocument;\r
17 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
18 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
19 import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
20 import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
21 import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
22 \r
23 import java.awt.FlowLayout;\r
24 import java.io.File;\r
25 import java.util.ArrayList;\r
26 import java.util.HashMap;\r
27 import java.util.Iterator;\r
28 import java.util.Map;\r
29 import java.util.Set;\r
30 import java.util.Vector;\r
31 \r
32 public class FpdFrameworkModules extends IInternalFrame {\r
33 \r
34     /**\r
35      * Initialize Globals\r
36      */\r
37     private static final long serialVersionUID = 1L;\r
38 \r
39     static JFrame frame;\r
40 \r
41     private JSplitPane jSplitPane = null;\r
42 \r
43     private JPanel jPanelTop = null;\r
44 \r
45     private JPanel jPanelBottom = null;\r
46 \r
47     private JLabel jLabel = null;\r
48 \r
49     private JScrollPane jScrollPaneAllModules = null;\r
50 \r
51     private JTable jTableAllModules = null;\r
52 \r
53     private JPanel jPanelTopSouth = null;\r
54 \r
55     private JButton jButtonAddModule = null;\r
56 \r
57     private JLabel jLabelModulesAdded = null;\r
58 \r
59     private JPanel jPanelBottomSouth = null;\r
60 \r
61     private JScrollPane jScrollPaneFpdModules = null;\r
62 \r
63     private JTable jTableFpdModules = null;\r
64 \r
65     private JButton jButtonSettings = null;\r
66 \r
67     private JButton jButtonRemoveModule = null;\r
68 \r
69     private NonEditableTableModel modelAllModules = null;\r
70 \r
71     private NonEditableTableModel modelFpdModules = null;\r
72 \r
73     private FpdModuleSA settingDlg = null;\r
74 \r
75     private FpdFileContents ffc = null;\r
76 \r
77     private OpeningPlatformType docConsole = null;\r
78 \r
79     private Map<String, ArrayList<String>> fpdMsa = null;\r
80 \r
81     private ArrayList<ModuleIdentification> miList = null;\r
82     \r
83     /**\r
84      * Column settings for displaying all modules in workspace\r
85      */\r
86     private final int modNameColForAllModTable = 0;\r
87     \r
88     private final int pkgNameColForAllModTable = 1;\r
89     \r
90     private final int pathColForAllModTable = 2;\r
91     \r
92     private final int typeColForAllModTable = 3;\r
93     \r
94     private final int pkgVerColForAllModTable = 5;\r
95     \r
96     private final int modVerColForAllModTable = 4;\r
97     \r
98     /**\r
99      * Column settings for display modules in the FPD file\r
100      */\r
101     private final int modNameColForFpdModTable = 0;\r
102     \r
103     private final int pkgNameColForFpdModTable = 1;\r
104     \r
105     private final int pathColForFpdModTable = 2;\r
106     \r
107     private final int archColForFpdModTable = 3;\r
108     \r
109     private final int pkgVerColForFpdModTable = 6;\r
110 \r
111     private final int modVerColForFpdModTable = 5;\r
112     \r
113     private final int typeColForFpdModTable = 4;\r
114     \r
115     /**\r
116      * FpdFileContents structure\r
117      */\r
118     private final int ffcModGuid = 0;\r
119     \r
120     private final int ffcModVer = 1;\r
121     \r
122     private final int ffcPkgGuid = 2;\r
123     \r
124     private final int ffcPkgVer = 3;\r
125     \r
126     private final int ffcModArch = 4;\r
127     \r
128     /**\r
129      * Set Column Widths, Only the PATH should not have a max width.\r
130      */\r
131     private final int modNameMinWidth = 168;\r
132     \r
133     private final int modNamePrefWidth = 200;\r
134     \r
135     private final int modNameMaxWidth = 350;\r
136 \r
137     private final int pkgNameMinWidth = 100;\r
138     \r
139     private final int pkgNamePrefWidth = 130;\r
140     \r
141     private final int pkgNameMaxWidth = 150;\r
142     \r
143     private final int verMinWidth = 60;\r
144     \r
145     private final int verMaxWidth = 80;\r
146     \r
147     private final int verPrefWidth = 70;\r
148     \r
149     private final int pathPrefWidth = 320;\r
150     \r
151     private final int pathMinWidth = 280;\r
152     \r
153     private final int archPrefWidth = 80;\r
154     \r
155     private final int archMinWidth = 60;\r
156     \r
157     private final int archMaxWidth = 100;\r
158     \r
159     private final int typePrefWidth = 145;\r
160     \r
161     private final int typeMinWidth = 100;\r
162     \r
163     private final int typeMaxWidth = 155;\r
164     \r
165     /**\r
166      * This method initializes jSplitPane\r
167      * \r
168      * This is the main edit window\r
169      *  \r
170      * @return javax.swing.JSplitPane jSplitPane        \r
171      */\r
172     private JSplitPane getJSplitPane() {\r
173         if (jSplitPane == null) {\r
174             jSplitPane = new JSplitPane();\r
175             jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
176             jSplitPane.setDividerLocation(250);\r
177             jSplitPane.setBottomComponent(getJPanelBottom());\r
178             jSplitPane.setTopComponent(getJPanelTop());\r
179         }\r
180         return jSplitPane;\r
181     }\r
182 \r
183     /**\r
184      * This method initializes jPanelTop\r
185      * \r
186      * This panel contains the All Modules Table        \r
187      *  \r
188      * @return javax.swing.JPanel       jPanelTop\r
189      */\r
190     private JPanel getJPanelTop() {\r
191         if (jPanelTop == null) {\r
192             jLabel = new JLabel();\r
193             jLabel.setText("Modules in Workspace");\r
194             jPanelTop = new JPanel();\r
195             jPanelTop.setLayout(new BorderLayout());\r
196             jPanelTop.add(jLabel, java.awt.BorderLayout.NORTH);\r
197             jPanelTop.add(getJScrollPaneAllModules(), java.awt.BorderLayout.CENTER);\r
198             jPanelTop.add(getJPanelTopSouth(), java.awt.BorderLayout.SOUTH);\r
199         }\r
200         return jPanelTop;\r
201     }\r
202 \r
203     /**\r
204      * This method initializes jPanelBottom\r
205      *  \r
206      * This panel contains the FPD Modules Table\r
207      * \r
208      * @return javax.swing.JPanel       jPanelBottom\r
209      */\r
210     private JPanel getJPanelBottom() {\r
211         if (jPanelBottom == null) {\r
212             jLabelModulesAdded = new JLabel();\r
213             jLabelModulesAdded.setText("Modules Added");\r
214             jPanelBottom = new JPanel();\r
215             jPanelBottom.setLayout(new BorderLayout());\r
216             jPanelBottom.add(jLabelModulesAdded, java.awt.BorderLayout.NORTH);\r
217             jPanelBottom.add(getJPanelBottomSouth(), java.awt.BorderLayout.SOUTH);\r
218             jPanelBottom.add(getJScrollPaneFpdModules(), java.awt.BorderLayout.CENTER);\r
219         }\r
220         return jPanelBottom;\r
221     }\r
222 \r
223     /**\r
224      * This method initializes jScrollPaneAllModules    \r
225      *  \r
226      * @return javax.swing.JScrollPane  jScrollPaneAllModules\r
227      */\r
228     private JScrollPane getJScrollPaneAllModules() {\r
229         if (jScrollPaneAllModules == null) {\r
230             jScrollPaneAllModules = new JScrollPane();\r
231             jScrollPaneAllModules.setPreferredSize(new java.awt.Dimension(600, 200));\r
232             jScrollPaneAllModules.setViewportView(getJTableAllModules());\r
233         }\r
234         return jScrollPaneAllModules;\r
235     }\r
236 \r
237     /**\r
238      * This method initializes jTableAllModules\r
239      *  \r
240      * @return javax.swing.JTable       jTableAllModules\r
241      */\r
242     private JTable getJTableAllModules() {\r
243         if (jTableAllModules == null) {\r
244             modelAllModules = new NonEditableTableModel();\r
245             TableSorter sorter = new TableSorter(modelAllModules);\r
246             jTableAllModules = new JTable(sorter);\r
247             sorter.setTableHeader(jTableAllModules.getTableHeader());\r
248             jTableAllModules.setRowHeight(20);\r
249             modelAllModules.addColumn("<html>Module<br>Name</html>");\r
250             modelAllModules.addColumn("<html>Package<br>Name</html>");\r
251             modelAllModules.addColumn("Path");\r
252             modelAllModules.addColumn("<html>Module<br>Type</html>");\r
253             modelAllModules.addColumn("<html>Module<br>Version</html>");\r
254             modelAllModules.addColumn("<html>Package<br>Version</html>");\r
255             \r
256             javax.swing.table.TableColumn column = null;\r
257             column = jTableAllModules.getColumnModel().getColumn(modNameColForAllModTable);\r
258             column.setPreferredWidth(modNamePrefWidth);\r
259             column.setMinWidth(modNameMinWidth);\r
260             column.setMaxWidth(modNameMaxWidth);\r
261             column = jTableAllModules.getColumnModel().getColumn(modVerColForAllModTable);\r
262             column.setPreferredWidth(verPrefWidth);\r
263             column.setMaxWidth(verMaxWidth);\r
264             column.setMinWidth(verMinWidth);\r
265             column = jTableAllModules.getColumnModel().getColumn(pkgNameColForAllModTable);\r
266             column.setPreferredWidth(pkgNamePrefWidth);\r
267             column.setMinWidth(pkgNameMinWidth);\r
268             column.setMaxWidth(pkgNameMaxWidth);\r
269             column = jTableAllModules.getColumnModel().getColumn(pkgVerColForAllModTable);\r
270             column.setPreferredWidth(verPrefWidth);\r
271             column.setMaxWidth(verMaxWidth);\r
272             column.setMinWidth(verMinWidth);\r
273             column = jTableAllModules.getColumnModel().getColumn(typeColForAllModTable);\r
274             column.setPreferredWidth(typePrefWidth);\r
275             column.setMaxWidth(typeMaxWidth);\r
276             column.setMinWidth(typeMinWidth);\r
277             column = jTableAllModules.getColumnModel().getColumn(pathColForAllModTable);\r
278             column.setPreferredWidth(pathPrefWidth);\r
279             column.setMinWidth(pathMinWidth);\r
280 \r
281             jTableAllModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
282 \r
283         }\r
284         return jTableAllModules;\r
285     }\r
286 \r
287     /**\r
288      * This method initializes jPanelTopSouth\r
289      * \r
290      * This panel contains the ADD button\r
291      * \r
292      * @return javax.swing.JPanel   jPanelTopSouth\r
293      */\r
294     private JPanel getJPanelTopSouth() {\r
295         if (jPanelTopSouth == null) {\r
296             FlowLayout flowLayout = new FlowLayout();\r
297             flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
298             jPanelTopSouth = new JPanel();\r
299             jPanelTopSouth.setLayout(flowLayout);\r
300             jPanelTopSouth.add(getJButtonAddModule(), null);\r
301         }\r
302         return jPanelTopSouth;\r
303     }\r
304 \r
305     /**\r
306      * This method initializes jButtonAddModule \r
307      *  \r
308      * @return javax.swing.JButton      jButtonAddModule\r
309      */\r
310     private JButton getJButtonAddModule() {\r
311         if (jButtonAddModule == null) {\r
312             jButtonAddModule = new JButton();\r
313             jButtonAddModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
314             jButtonAddModule.setText("Add a Module");\r
315             jButtonAddModule.addActionListener(new java.awt.event.ActionListener() {\r
316                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
317                     int selectedRow = jTableAllModules.getSelectedRow();\r
318                     if (selectedRow < 0) {\r
319                         return;\r
320                     }\r
321 \r
322                     TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
323                     selectedRow = sorter.modelIndex(selectedRow);\r
324                     String path = modelAllModules.getValueAt(selectedRow, pathColForAllModTable) + "";\r
325                     ModuleIdentification mi = miList.get(selectedRow);\r
326                     Vector<String> vArchs = null;\r
327                     try {\r
328                         vArchs = GlobalData.getModuleSupArchs(mi);\r
329                     }\r
330                     catch (Exception exp) {\r
331                         JOptionPane.showMessageDialog(frame, exp.getMessage());\r
332                     }\r
333 \r
334                     if (vArchs == null) {\r
335                         JOptionPane.showMessageDialog(frame, "No Supported Architectures specified in MSA file.");\r
336                         return;\r
337                     }\r
338 \r
339                     String archsAdded = "";\r
340                     String mg = mi.getGuid();\r
341                     String mv = mi.getVersion();\r
342                     String pg = mi.getPackage().getGuid();\r
343                     String pv = mi.getPackage().getVersion();\r
344                     String mType = mi.getModuleType();\r
345 \r
346                     ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
347                     if (al == null) {\r
348                         //\r
349                         // if existing ModuleSA does not specify version info.\r
350                         //\r
351                         al = fpdMsa.get(mg + "null" + pg + "null");\r
352                         if (al == null) {\r
353                             al = fpdMsa.get(mg + "null" + pg + pv);\r
354                             if (al == null){\r
355                                 al = fpdMsa.get(mg + mv + pg + "null");\r
356                                 if (al == null) {\r
357                                     al = new ArrayList<String>();\r
358                                     fpdMsa.put(mg + mv + pg + pv, al);    \r
359                                 }\r
360                             }\r
361                         }\r
362                     }\r
363                     //\r
364                     // filter from module SupArchs what archs has been added.\r
365                     //\r
366                     for (int i = 0; i < al.size(); ++i) {\r
367                         vArchs.remove(al.get(i));\r
368                     }\r
369                     //\r
370                     // check whether archs conform to SupArch of platform.\r
371                     //\r
372                     Vector<Object> platformSupArch = new Vector<Object>();\r
373                     ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
374                     vArchs.retainAll(platformSupArch);\r
375                     //\r
376                     // Archs this Module supported have already been added.\r
377                     //\r
378                     if (vArchs.size() == 0) {\r
379                         JOptionPane.showMessageDialog(frame, "This Module has already been added.");\r
380                         return;\r
381                     }\r
382                     //ToDo put Arch instead of null\r
383                     boolean errorOccurred = false;\r
384                     for (int i = 0; i < vArchs.size(); ++i) {\r
385                         String arch = vArchs.get(i);\r
386                         al.add(arch);\r
387                         archsAdded += arch + " ";\r
388                         String[] row = { "", "", "", "", "", "", "" };\r
389 \r
390                         if (mi != null) {\r
391                             row[modNameColForFpdModTable] = mi.getName();\r
392                             row[pkgNameColForFpdModTable] = mi.getPackage().getName();\r
393                             row[pathColForFpdModTable] = path;\r
394                             row[archColForFpdModTable] = arch;\r
395                             row[pkgVerColForFpdModTable] = pv;\r
396                             row[modVerColForFpdModTable] = mv;\r
397                             row[typeColForFpdModTable] = mType;\r
398 \r
399                         }\r
400                         modelFpdModules.addRow(row);\r
401 \r
402                         docConsole.setSaved(false);\r
403                         try {\r
404                             //ToDo : specify archs need to add.\r
405                             ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
406                         } catch (Exception exception) {\r
407                             JOptionPane.showMessageDialog(frame, "Adding " + row[modNameColForFpdModTable] + " with Supporting Architectures: " + arch\r
408                                                                  + ": " + exception.getMessage());\r
409                             errorOccurred = true;\r
410                         }\r
411                     }\r
412 \r
413                     String s = "This Module with Architecture " + archsAdded;\r
414                     if (errorOccurred) {\r
415                         s += " was added with Error. Platform may NOT Build.";\r
416                     } else {\r
417                         s += " was added Successfully.";\r
418                     }\r
419                     JOptionPane.showMessageDialog(frame, s);\r
420                     jTableFpdModules.changeSelection(modelFpdModules.getRowCount() - 1, 0, false, false);\r
421                 }\r
422             });\r
423         }\r
424         return jButtonAddModule;\r
425     }\r
426 \r
427     /**\r
428      * This method initializes jPanelBottomSouth\r
429      * \r
430      * This panel contains the Settings and Remove Buttons\r
431      *  \r
432      * @return javax.swing.JPanel       jPanelBottomSouth\r
433      */\r
434     private JPanel getJPanelBottomSouth() {\r
435         if (jPanelBottomSouth == null) {\r
436             FlowLayout flowLayout1 = new FlowLayout();\r
437             flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
438             jPanelBottomSouth = new JPanel();\r
439             jPanelBottomSouth.setLayout(flowLayout1);\r
440             jPanelBottomSouth.add(getJButtonSettings(), null);\r
441             jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
442         }\r
443         return jPanelBottomSouth;\r
444     }\r
445 \r
446     /**\r
447      * This method initializes jScrollPaneFpdModules\r
448      *  \r
449      * @return javax.swing.JScrollPane  jScrollPaneFpdModules\r
450      */\r
451     private JScrollPane getJScrollPaneFpdModules() {\r
452         if (jScrollPaneFpdModules == null) {\r
453             jScrollPaneFpdModules = new JScrollPane();\r
454             jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(453, 200));\r
455             jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
456         }\r
457         return jScrollPaneFpdModules;\r
458     }\r
459 \r
460     /**\r
461      * This method initializes jTableFpdModules\r
462      *  \r
463      * @return javax.swing.JTable       jTableFpdModules\r
464      */\r
465     private JTable getJTableFpdModules() {\r
466         if (jTableFpdModules == null) {\r
467             modelFpdModules = new NonEditableTableModel();\r
468             TableSorter sorter = new TableSorter(modelFpdModules);\r
469             jTableFpdModules = new JTable(sorter);\r
470             sorter.setTableHeader(jTableFpdModules.getTableHeader());\r
471             jTableFpdModules.setRowHeight(20);\r
472             modelFpdModules.addColumn("<html>Module<br>Name</html>");\r
473             modelFpdModules.addColumn("<html>Package<br>Name</html>");\r
474             modelFpdModules.addColumn("Path");\r
475             modelFpdModules.addColumn("<html>Supported<br>Architectures</html>");\r
476             modelFpdModules.addColumn("<html>Module<br>Type</html>");\r
477             modelFpdModules.addColumn("<html>Module<br>Version</html>");\r
478             modelFpdModules.addColumn("<html>Package<br>Version</html>");\r
479 \r
480             \r
481             javax.swing.table.TableColumn column = null;\r
482             column = jTableFpdModules.getColumnModel().getColumn(modNameColForFpdModTable);\r
483             column.setPreferredWidth(modNamePrefWidth);\r
484             column.setMinWidth(modNameMinWidth);\r
485             column.setMaxWidth(modNameMaxWidth);\r
486             column = jTableFpdModules.getColumnModel().getColumn(modVerColForFpdModTable);\r
487             column.setPreferredWidth(verPrefWidth);\r
488             column.setMaxWidth(verMaxWidth);\r
489             column.setMinWidth(verMinWidth);\r
490             column = jTableFpdModules.getColumnModel().getColumn(pkgNameColForFpdModTable);\r
491             column.setPreferredWidth(pkgNamePrefWidth);\r
492             column.setMinWidth(pkgNameMinWidth);\r
493             column.setMaxWidth(pkgNameMaxWidth);\r
494             column = jTableFpdModules.getColumnModel().getColumn(pkgVerColForFpdModTable);\r
495             column.setPreferredWidth(verPrefWidth);\r
496             column.setMaxWidth(verMaxWidth);\r
497             column.setMinWidth(verMinWidth);\r
498             column = jTableFpdModules.getColumnModel().getColumn(archColForFpdModTable);\r
499             column.setPreferredWidth(archPrefWidth);\r
500             column.setMaxWidth(archMaxWidth);\r
501             column.setMinWidth(archMinWidth);\r
502             column = jTableFpdModules.getColumnModel().getColumn(pathColForFpdModTable);\r
503             column.setPreferredWidth(pathPrefWidth);\r
504             column.setMinWidth(pathMinWidth);\r
505             column = jTableFpdModules.getColumnModel().getColumn(typeColForFpdModTable);\r
506             column.setPreferredWidth(typePrefWidth);\r
507             column.setMaxWidth(typeMaxWidth);\r
508             column.setMinWidth(typeMinWidth);\r
509 \r
510             jTableFpdModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
511 \r
512         }\r
513         return jTableFpdModules;\r
514     }\r
515 \r
516     /**\r
517      * This method initializes jButtonSettings\r
518      *  \r
519      * @return javax.swing.JButton      jButtonSettings\r
520      */\r
521     private JButton getJButtonSettings() {\r
522         if (jButtonSettings == null) {\r
523             jButtonSettings = new JButton();\r
524             jButtonSettings.setPreferredSize(new java.awt.Dimension(130,20));\r
525             jButtonSettings.setText("Settings");\r
526             jButtonSettings.addActionListener(new java.awt.event.ActionListener() {\r
527                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
528                     int selectedRow = jTableFpdModules.getSelectedRow();\r
529                     if (selectedRow < 0) {\r
530                         return;\r
531                     }\r
532 \r
533                     TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
534                     selectedRow = sorter.modelIndex(selectedRow);\r
535                     try {\r
536                         if (ffc.adjustPcd(selectedRow)) {\r
537                             docConsole.setSaved(false);\r
538                         }\r
539                     }\r
540                     catch (Exception exp) {\r
541                         JOptionPane.showMessageDialog(frame, exp.getMessage());\r
542                         return;\r
543                     }\r
544                     \r
545                     if (settingDlg == null) {\r
546                         settingDlg = new FpdModuleSA(ffc);\r
547                     }\r
548 \r
549                     String[] sa = new String[5];\r
550                     ffc.getFrameworkModuleInfo(selectedRow, sa);\r
551                     String mg = sa[ffcModGuid];\r
552                     String mv = sa[ffcModVer];\r
553                     String pg = sa[ffcPkgGuid];\r
554                     String pv = sa[ffcPkgVer];\r
555                     String arch = sa[ffcModArch];\r
556                     settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, selectedRow, docConsole);\r
557                     settingDlg.setVisible(true);\r
558                 }\r
559             });\r
560         }\r
561         return jButtonSettings;\r
562     }\r
563 \r
564     /**\r
565      * This method initializes jButtonRemoveModule\r
566      *  \r
567      * @return javax.swing.JButton      jButtonRemoveModule\r
568      */\r
569     private JButton getJButtonRemoveModule() {\r
570         if (jButtonRemoveModule == null) {\r
571             jButtonRemoveModule = new JButton();\r
572             jButtonRemoveModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
573             jButtonRemoveModule.setText("Remove Module");\r
574             jButtonRemoveModule.addActionListener(new java.awt.event.ActionListener() {\r
575                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
576                     int selectedRow = jTableFpdModules.getSelectedRow();\r
577                     if (selectedRow < 0) {\r
578                         return;\r
579                     }\r
580 \r
581                     TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
582                     selectedRow = sorter.modelIndex(selectedRow);\r
583 \r
584                     String[] sa = new String[5];\r
585                     ffc.getFrameworkModuleInfo(selectedRow, sa);\r
586                     String mg = sa[ffcModGuid];\r
587                     String mv = sa[ffcModVer];\r
588                     String pg = sa[ffcPkgGuid];\r
589                     String pv = sa[ffcPkgVer];\r
590                     String arch = sa[ffcModArch];\r
591                     ModuleIdentification mi = GlobalData.getModuleId(mg + " " + mv + " " + pg + " " + pv + " " + arch);\r
592                     mv = mi.getVersion();\r
593                     pv = mi.getPackage().getVersion();\r
594                     modelFpdModules.removeRow(selectedRow);\r
595                     if (arch == null) {\r
596                         // if no arch specified in ModuleSA\r
597                         fpdMsa.remove(mg + mv + pg + pv);\r
598                         \r
599                     } else {\r
600                         ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
601                         al.remove(arch);\r
602                         if (al.size() == 0) {\r
603                             fpdMsa.remove(mg + mv + pg + pv);\r
604                         }\r
605                     }\r
606 \r
607                     docConsole.setSaved(false);\r
608                     ffc.removeModuleSA(selectedRow);\r
609                 }\r
610             });\r
611         }\r
612         return jButtonRemoveModule;\r
613     }\r
614 \r
615     /**\r
616      * \r
617      * @param args\r
618      */\r
619     public static void main(String[] args) {\r
620         // Set the pane visable\r
621         new FpdFrameworkModules().setVisible(true);\r
622     }\r
623 \r
624     /**\r
625      * This is the default constructor\r
626      */\r
627     public FpdFrameworkModules() {\r
628         super();\r
629         initialize();\r
630     }\r
631 \r
632     public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
633         this();\r
634         init(fpd);\r
635 \r
636     }\r
637 \r
638     public FpdFrameworkModules(OpeningPlatformType opt) {\r
639         this(opt.getXmlFpd());\r
640         docConsole = opt;\r
641     }\r
642 \r
643     private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
644         try {\r
645             GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
646         }\r
647         catch(Exception e){\r
648             JOptionPane.showMessageDialog(frame, "Error occurred when getting module data.");\r
649         }\r
650 \r
651         if (ffc == null) {\r
652             ffc = new FpdFileContents(fpd);\r
653             ffc.initDynPcdMap();\r
654         }\r
655 \r
656         if (fpdMsa == null) {\r
657             fpdMsa = new HashMap<String, ArrayList<String>>();\r
658         }\r
659 \r
660         if (ffc.getFrameworkModulesCount() > 0) {\r
661             String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
662             ffc.getFrameworkModulesInfo(saa);\r
663             for (int i = 0; i < saa.length; ++i) {\r
664                 ModuleIdentification mi = GlobalData.getModuleId(saa[i][ffcModGuid] + " " + saa[i][ffcModVer] + " "\r
665                                                                  + saa[i][ffcPkgGuid] + " " + saa[i][ffcPkgVer]);\r
666                 String[] row = { "", "", "", "", "", "", "" };\r
667                 if (mi != null) {\r
668                     row[modNameColForFpdModTable] = mi.getName();\r
669                     row[modVerColForFpdModTable] = mi.getVersion();\r
670                     row[typeColForFpdModTable] = mi.getModuleType();\r
671                     row[pkgNameColForFpdModTable] = mi.getPackage().getName();\r
672                     row[pkgVerColForFpdModTable] = mi.getPackage().getVersion();\r
673                     row[archColForFpdModTable] = saa[i][ffcModArch];\r
674                     try {\r
675                         row[pathColForFpdModTable] = GlobalData.getMsaFile(mi).getPath().substring(\r
676                                                                                       System.getenv("WORKSPACE")\r
677                                                                                             .length() + 1);\r
678                     } catch (Exception e) {\r
679                         JOptionPane.showMessageDialog(frame, "Show FPD Modules:" + e.getMessage());\r
680                     }\r
681                     \r
682                     modelFpdModules.addRow(row);\r
683                     String fpdMsaKey = saa[i][ffcModGuid] + row[modVerColForFpdModTable]\r
684                                                                 + saa[i][ffcPkgGuid] + row[pkgVerColForFpdModTable];\r
685                     ArrayList<String> al = fpdMsa.get(fpdMsaKey);\r
686                     if (al == null) {\r
687                         al = new ArrayList<String>();\r
688                         fpdMsa.put(fpdMsaKey, al);\r
689                     }\r
690                     al.add(saa[i][ffcModArch]);\r
691                 }\r
692                 \r
693 \r
694             }\r
695             TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
696             sorter.setSortingStatus(modNameColForFpdModTable, TableSorter.ASCENDING);\r
697         }\r
698 \r
699         showAllModules();\r
700 \r
701     }\r
702 \r
703     private void showAllModules() {\r
704 \r
705         if (miList == null) {\r
706             miList = new ArrayList<ModuleIdentification>();\r
707         }\r
708         Set<PackageIdentification> spi = GlobalData.getPackageList();\r
709         Iterator ispi = spi.iterator();\r
710 \r
711         while (ispi.hasNext()) {\r
712             PackageIdentification pi = (PackageIdentification) ispi.next();\r
713             String[] s = { "", "", "", "", "", "" };\r
714 \r
715             Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
716             Iterator ismi = smi.iterator();\r
717             while (ismi.hasNext()) {\r
718                 ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
719                 s[modNameColForAllModTable] = mi.getName();\r
720                 s[modVerColForAllModTable] = mi.getVersion();\r
721                 s[typeColForAllModTable] = mi.getModuleType();\r
722                 s[pkgNameColForAllModTable] = pi.getName();\r
723                 s[pkgVerColForAllModTable] = pi.getVersion();\r
724                 try {\r
725                     s[pathColForAllModTable] = GlobalData.getMsaFile(mi).getPath()\r
726                                             .substring(System.getenv("WORKSPACE").length() + 1);\r
727                 } catch (Exception e) {\r
728                     JOptionPane.showMessageDialog(frame, "Show All Modules:" + e.getMessage());\r
729                 }\r
730                 modelAllModules.addRow(s);\r
731                 miList.add(mi);\r
732             }\r
733         }\r
734         \r
735         TableSorter sorter = (TableSorter)jTableAllModules.getModel();\r
736         sorter.setSortingStatus(modNameColForAllModTable, TableSorter.ASCENDING);\r
737     }\r
738 \r
739     /**\r
740      * This method initializes this\r
741      * \r
742      * @return void\r
743      */\r
744     private void initialize() {\r
745         this.setSize(633, 533);\r
746         this.setTitle("Framework Modules");\r
747         this.setContentPane(getJSplitPane());\r
748         this.setVisible(true);\r
749 \r
750     }\r
751 \r
752 } //  @jve:decl-index=0:visual-constraint="10,10"\r
753 \r
754 class NonEditableTableModel extends DefaultTableModel {\r
755     /**\r
756      * \r
757      */\r
758     private static final long serialVersionUID = 1L;\r
759 \r
760     public boolean isCellEditable(int row, int col) {\r
761         return false;\r
762     }\r
763 }\r