]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Fixed grammar and column widths (set min, preferred and max widths for version and...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
index 2ab4d65d2b9521f86f871929289c1b4721e214c7..e6a372a36e0b0e76e810949686928bef59efd79c 100644 (file)
@@ -14,6 +14,7 @@ import javax.swing.ListSelectionModel;
 import javax.swing.table.DefaultTableModel;\r
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
 import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
@@ -26,6 +27,7 @@ import java.util.HashMap;
 import java.util.Iterator;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.util.Vector;\r
 \r
 public class FpdFrameworkModules extends IInternalFrame {\r
 \r
@@ -33,32 +35,91 @@ public class FpdFrameworkModules extends IInternalFrame {
      * \r
      */\r
     private static final long serialVersionUID = 1L;\r
+\r
     static JFrame frame;\r
+\r
     private JSplitPane jSplitPane = null;\r
-    private JPanel jPanel = null;\r
-    private JPanel jPanel1 = null;\r
+\r
+    private JPanel jPanelTop = null;\r
+\r
+    private JPanel jPanelBottom = null;\r
+\r
     private JLabel jLabel = null;\r
-    private JScrollPane jScrollPane = null;\r
-    private JTable jTable = null;\r
-    private JPanel jPanel2 = null;\r
-    private JButton jButton = null;\r
-    private JLabel jLabel1 = null;\r
-    private JPanel jPanel3 = null;\r
-    private JScrollPane jScrollPane1 = null;\r
-    private JTable jTable1 = null;\r
-    private JButton jButton1 = null;\r
-    private JButton jButton2 = null;\r
-    private NonEditableTableModel model = null;\r
-    private NonEditableTableModel model1 = null;\r
-    \r
+\r
+    private JScrollPane jScrollPaneAllModules = null;\r
+\r
+    private JTable jTableAllModules = null;\r
+\r
+    private JPanel jPanelTopSouth = null;\r
+\r
+    private JButton jButtonAddModule = null;\r
+\r
+    private JLabel jLabelModulesAdded = null;\r
+\r
+    private JPanel jPanelBottomSouth = null;\r
+\r
+    private JScrollPane jScrollPaneFpdModules = null;\r
+\r
+    private JTable jTableFpdModules = null;\r
+\r
+    private JButton jButtonSettings = null;\r
+\r
+    private JButton jButtonRemoveModule = null;\r
+\r
+    private NonEditableTableModel modelAllModules = null;\r
+\r
+    private NonEditableTableModel modelFpdModules = null;\r
+\r
     private FpdModuleSA settingDlg = null;\r
-    \r
+\r
     private FpdFileContents ffc = null;\r
+\r
+    private OpeningPlatformType docConsole = null;\r
+\r
+    private Map<String, ArrayList<String>> fpdMsa = null;\r
+\r
+    private ArrayList<ModuleIdentification> miList = null;\r
+\r
+    private final int ModNameCol = 0;\r
+\r
+    private final int ModVerCol = 1;\r
+\r
+    private final int PkgNameCol = 2;\r
+\r
+    private final int PkgVerCol = 3;\r
+\r
+    private final int ArchCol = 4;\r
+\r
+    private final int Path4Col = 4;\r
+\r
+    private final int Path5Col = 5;\r
     \r
-    private Map<String, String> fpdMsa = null;\r
+    private final int ModNameMinWidth = 168;\r
     \r
-    private ArrayList<ModuleIdentification> miList = null;\r
+    private final int ModNamePrefWidth = 200;\r
 \r
+    private final int PkgNameMinWidth = 100;\r
+    \r
+    private final int PkgNamePrefWidth = 110;\r
+    \r
+    private final int PkgNameMaxWidth = 150;\r
+    \r
+    private final int VerMinWidth = 50;\r
+    \r
+    private final int VerMaxWidth = 80;\r
+    \r
+    private final int VerPrefWidth = 60;\r
+    \r
+    private final int PathPrefWidth = 320;\r
+    \r
+    private final int PathMinWidth = 280;\r
+    \r
+    private final int ArchPrefWidth = 80;\r
+    \r
+    private final int ArchMinWidth = 60;\r
+    \r
+    private final int ArchMaxWidth = 100;\r
+    \r
     /**\r
      * This method initializes jSplitPane      \r
      *         \r
@@ -69,8 +130,8 @@ public class FpdFrameworkModules extends IInternalFrame {
             jSplitPane = new JSplitPane();\r
             jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
             jSplitPane.setDividerLocation(250);\r
-            jSplitPane.setBottomComponent(getJPanel1());\r
-            jSplitPane.setTopComponent(getJPanel());\r
+            jSplitPane.setBottomComponent(getJPanelBottom());\r
+            jSplitPane.setTopComponent(getJPanelTop());\r
         }\r
         return jSplitPane;\r
     }\r
@@ -80,17 +141,17 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel() {\r
-        if (jPanel == null) {\r
+    private JPanel getJPanelTop() {\r
+        if (jPanelTop == null) {\r
             jLabel = new JLabel();\r
             jLabel.setText("Modules in Workspace");\r
-            jPanel = new JPanel();\r
-            jPanel.setLayout(new BorderLayout());\r
-            jPanel.add(jLabel, java.awt.BorderLayout.NORTH);\r
-            jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER);\r
-            jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);\r
+            jPanelTop = new JPanel();\r
+            jPanelTop.setLayout(new BorderLayout());\r
+            jPanelTop.add(jLabel, java.awt.BorderLayout.NORTH);\r
+            jPanelTop.add(getJScrollPaneAllModules(), java.awt.BorderLayout.CENTER);\r
+            jPanelTop.add(getJPanelTopSouth(), java.awt.BorderLayout.SOUTH);\r
         }\r
-        return jPanel;\r
+        return jPanelTop;\r
     }\r
 \r
     /**\r
@@ -98,17 +159,17 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel1() {\r
-        if (jPanel1 == null) {\r
-            jLabel1 = new JLabel();\r
-            jLabel1.setText("Modules Added");\r
-            jPanel1 = new JPanel();\r
-            jPanel1.setLayout(new BorderLayout());\r
-            jPanel1.add(jLabel1, java.awt.BorderLayout.NORTH);\r
-            jPanel1.add(getJPanel3(), java.awt.BorderLayout.SOUTH);\r
-            jPanel1.add(getJScrollPane1(), java.awt.BorderLayout.CENTER);\r
+    private JPanel getJPanelBottom() {\r
+        if (jPanelBottom == null) {\r
+            jLabelModulesAdded = new JLabel();\r
+            jLabelModulesAdded.setText("Modules Added");\r
+            jPanelBottom = new JPanel();\r
+            jPanelBottom.setLayout(new BorderLayout());\r
+            jPanelBottom.add(jLabelModulesAdded, java.awt.BorderLayout.NORTH);\r
+            jPanelBottom.add(getJPanelBottomSouth(), java.awt.BorderLayout.SOUTH);\r
+            jPanelBottom.add(getJScrollPaneFpdModules(), java.awt.BorderLayout.CENTER);\r
         }\r
-        return jPanel1;\r
+        return jPanelBottom;\r
     }\r
 \r
     /**\r
@@ -116,13 +177,13 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane() {\r
-        if (jScrollPane == null) {\r
-            jScrollPane = new JScrollPane();\r
-            jScrollPane.setPreferredSize(new java.awt.Dimension(600,200));\r
-            jScrollPane.setViewportView(getJTable());\r
+    private JScrollPane getJScrollPaneAllModules() {\r
+        if (jScrollPaneAllModules == null) {\r
+            jScrollPaneAllModules = new JScrollPane();\r
+            jScrollPaneAllModules.setPreferredSize(new java.awt.Dimension(600, 200));\r
+            jScrollPaneAllModules.setViewportView(getJTableAllModules());\r
         }\r
-        return jScrollPane;\r
+        return jScrollPaneAllModules;\r
     }\r
 \r
     /**\r
@@ -130,20 +191,41 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable() {\r
-        if (jTable == null) {\r
-            model = new NonEditableTableModel();\r
-            jTable = new JTable(model);\r
-            jTable.setRowHeight(20);\r
-            model.addColumn("ModuleName");\r
-            model.addColumn("ModuleGUID");\r
-            model.addColumn("ModuleVersion");\r
-            model.addColumn("PackageGUID");\r
-            model.addColumn("PackageVersion");\r
-            \r
-            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+    private JTable getJTableAllModules() {\r
+        if (jTableAllModules == null) {\r
+            modelAllModules = new NonEditableTableModel();\r
+            TableSorter sorter = new TableSorter(modelAllModules);\r
+            jTableAllModules = new JTable(sorter);\r
+            sorter.setTableHeader(jTableAllModules.getTableHeader());\r
+            jTableAllModules.setRowHeight(20);\r
+            modelAllModules.addColumn("<html>Module<br>Name</html>");\r
+            modelAllModules.addColumn("<html>Module<br>Version</html>");\r
+            modelAllModules.addColumn("<html>Package<br>Name</html>");\r
+            modelAllModules.addColumn("<html>Package<br>Version</html>");\r
+            modelAllModules.addColumn("Path");\r
+            javax.swing.table.TableColumn column = null;\r
+            column = jTableAllModules.getColumnModel().getColumn(ModNameCol);\r
+            column.setPreferredWidth(ModNamePrefWidth);\r
+            column.setMinWidth(ModNameMinWidth);\r
+            column = jTableAllModules.getColumnModel().getColumn(ModVerCol);\r
+            column.setPreferredWidth(VerPrefWidth);\r
+            column.setMaxWidth(VerMaxWidth);\r
+            column.setMinWidth(VerMinWidth);\r
+            column = jTableAllModules.getColumnModel().getColumn(PkgNameCol);\r
+            column.setPreferredWidth(PkgNamePrefWidth);\r
+            column.setMinWidth(PkgNameMinWidth);\r
+            column.setMaxWidth(PkgNameMaxWidth);\r
+            column = jTableAllModules.getColumnModel().getColumn(PkgVerCol);\r
+            column.setPreferredWidth(VerPrefWidth);\r
+            column.setMaxWidth(VerMaxWidth);\r
+            column.setMinWidth(VerMinWidth);\r
+            column = jTableAllModules.getColumnModel().getColumn(Path4Col);\r
+            column.setPreferredWidth(PathPrefWidth);\r
+            column.setMinWidth(PathMinWidth);\r
+\r
+            jTableAllModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
         }\r
-        return jTable;\r
+        return jTableAllModules;\r
     }\r
 \r
     /**\r
@@ -151,15 +233,15 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel2() {\r
-        if (jPanel2 == null) {\r
+    private JPanel getJPanelTopSouth() {\r
+        if (jPanelTopSouth == null) {\r
             FlowLayout flowLayout = new FlowLayout();\r
             flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
-            jPanel2 = new JPanel();\r
-            jPanel2.setLayout(flowLayout);\r
-            jPanel2.add(getJButton(), null);\r
+            jPanelTopSouth = new JPanel();\r
+            jPanelTopSouth.setLayout(flowLayout);\r
+            jPanelTopSouth.add(getJButtonAddModule(), null);\r
         }\r
-        return jPanel2;\r
+        return jPanelTopSouth;\r
     }\r
 \r
     /**\r
@@ -167,42 +249,94 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton() {\r
-        if (jButton == null) {\r
-            jButton = new JButton();\r
-            jButton.setPreferredSize(new java.awt.Dimension(130,20));\r
-            jButton.setText("Add a Module");\r
-            jButton.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonAddModule() {\r
+        if (jButtonAddModule == null) {\r
+            jButtonAddModule = new JButton();\r
+            jButtonAddModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
+            jButtonAddModule.setText("Add a Module");\r
+            jButtonAddModule.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    int selectedRow = jTable.getSelectedRow();\r
-                    if (selectedRow < 0){\r
+                    int selectedRow = jTableAllModules.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
                         return;\r
                     }\r
-                    \r
-                    String mg = (String)model.getValueAt(selectedRow, 1);\r
-                    String mv = (String)model.getValueAt(selectedRow, 2);\r
-                    String pg = (String)model.getValueAt(selectedRow, 3);\r
-                    String pv = (String)model.getValueAt(selectedRow, 4);\r
-                    if (fpdMsa.containsKey(mg + mv + pg + pv)) {\r
-                        JOptionPane.showMessageDialog(frame, "This Module Already Added.");\r
+\r
+                    TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
+                    selectedRow = sorter.modelIndex(selectedRow);\r
+                    String path = modelAllModules.getValueAt(selectedRow, Path4Col) + "";\r
+                    ModuleIdentification mi = miList.get(selectedRow);\r
+                    Vector<String> vArchs = null;\r
+                    try {\r
+                        vArchs = GlobalData.getModuleSupArchs(mi);\r
+                    }\r
+                    catch (Exception exp) {\r
+                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+                    }\r
+\r
+                    if (vArchs == null) {\r
+                        JOptionPane.showMessageDialog(frame, "No Supported Architectures specified in MSA file.");\r
+                        return;\r
+                    }\r
+\r
+                    String archsAdded = "";\r
+                    String mg = mi.getGuid();\r
+                    String mv = mi.getVersion();\r
+                    String pg = mi.getPackage().getGuid();\r
+                    String pv = mi.getPackage().getVersion();\r
+\r
+                    ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
+                    if (al == null) {\r
+                        al = new ArrayList<String>();\r
+                        fpdMsa.put(mg + mv + pg + pv, al);\r
+                    }\r
+                    for (int i = 0; i < al.size(); ++i) {\r
+                        vArchs.remove(al.get(i));\r
+                    }\r
+                    //\r
+                    // Archs this Module supported have already been added.\r
+                    //\r
+                    if (vArchs.size() == 0) {\r
+                        JOptionPane.showMessageDialog(frame, "This Module has already been added.");\r
                         return;\r
                     }\r
                     //ToDo put Arch instead of null\r
-                    fpdMsa.put(mg + mv + pg + pv, null);\r
-                    \r
-                    String[] row = {" ", mg, mv, pg, pv};\r
-                    ModuleIdentification mi = getModuleId(mg + " " + mv + " " + pg + " " + pv);\r
-                    if (mi != null) {\r
-                        row[0] = mi.getName();\r
-                        row[2] = mi.getVersion();\r
-                        row[4] = mi.getPackage().getVersion();\r
+                    boolean errorOccurred = false;\r
+                    for (int i = 0; i < vArchs.size(); ++i) {\r
+                        String arch = vArchs.get(i);\r
+                        al.add(arch);\r
+                        archsAdded += arch + " ";\r
+                        String[] row = { "", mv, "", pv, arch, path };\r
+\r
+                        if (mi != null) {\r
+                            row[ModNameCol] = mi.getName();\r
+                            row[PkgNameCol] = mi.getPackage().getName();\r
+\r
+                        }\r
+                        modelFpdModules.addRow(row);\r
+\r
+                        docConsole.setSaved(false);\r
+                        try {\r
+                            //ToDo : specify archs need to add.\r
+                            ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
+                        } catch (Exception exception) {\r
+                            JOptionPane.showMessageDialog(frame, "Adding " + row[ModNameCol] + " with SupArch " + arch\r
+                                                                 + ": " + exception.getMessage());\r
+                            errorOccurred = true;\r
+                        }\r
+                    }\r
+\r
+                    String s = "This Module with Architecture " + archsAdded;\r
+                    if (errorOccurred) {\r
+                        s += " was added with Error. Platform may NOT Build.";\r
+                    } else {\r
+                        s += " was added Successfully.";\r
                     }\r
-                    model1.addRow(row);\r
-                    ffc.addFrameworkModulesPcdBuildDefs(miList.get(selectedRow), null);\r
+                    JOptionPane.showMessageDialog(frame, s);\r
+                    jTableFpdModules.changeSelection(modelFpdModules.getRowCount() - 1, 0, false, false);\r
                 }\r
             });\r
         }\r
-        return jButton;\r
+        return jButtonAddModule;\r
     }\r
 \r
     /**\r
@@ -210,16 +344,16 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel3() {\r
-        if (jPanel3 == null) {\r
+    private JPanel getJPanelBottomSouth() {\r
+        if (jPanelBottomSouth == null) {\r
             FlowLayout flowLayout1 = new FlowLayout();\r
             flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
-            jPanel3 = new JPanel();\r
-            jPanel3.setLayout(flowLayout1);\r
-            jPanel3.add(getJButton1(), null);\r
-            jPanel3.add(getJButton2(), null);\r
+            jPanelBottomSouth = new JPanel();\r
+            jPanelBottomSouth.setLayout(flowLayout1);\r
+            jPanelBottomSouth.add(getJButtonSettings(), null);\r
+            jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
         }\r
-        return jPanel3;\r
+        return jPanelBottomSouth;\r
     }\r
 \r
     /**\r
@@ -227,13 +361,13 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane1() {\r
-        if (jScrollPane1 == null) {\r
-            jScrollPane1 = new JScrollPane();\r
-            jScrollPane1.setPreferredSize(new java.awt.Dimension(453,200));\r
-            jScrollPane1.setViewportView(getJTable1());\r
+    private JScrollPane getJScrollPaneFpdModules() {\r
+        if (jScrollPaneFpdModules == null) {\r
+            jScrollPaneFpdModules = new JScrollPane();\r
+            jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(453, 200));\r
+            jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
         }\r
-        return jScrollPane1;\r
+        return jScrollPaneFpdModules;\r
     }\r
 \r
     /**\r
@@ -241,21 +375,46 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable1() {\r
-        if (jTable1 == null) {\r
-            model1 = new NonEditableTableModel();\r
-            jTable1 = new JTable(model1);\r
-            jTable1.setRowHeight(20);\r
-            model1.addColumn("ModuleName");\r
-            model1.addColumn("ModuleGUID");\r
-            model1.addColumn("ModuleVersion");            \r
-            model1.addColumn("PackageGUID");\r
-            model1.addColumn("PackageVersion");\r
-//            model1.addColumn("SupportedArch");\r
-            \r
-            jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+    private JTable getJTableFpdModules() {\r
+        if (jTableFpdModules == null) {\r
+            modelFpdModules = new NonEditableTableModel();\r
+            TableSorter sorter = new TableSorter(modelFpdModules);\r
+            jTableFpdModules = new JTable(sorter);\r
+            sorter.setTableHeader(jTableFpdModules.getTableHeader());\r
+            jTableFpdModules.setRowHeight(20);\r
+            modelFpdModules.addColumn("<html>Module<br>Name</html>");\r
+            modelFpdModules.addColumn("<html>Module<br>Version</html>");\r
+            modelFpdModules.addColumn("<html>Package<br>Name</html>");\r
+            modelFpdModules.addColumn("<html>Package<br>Version</html>");\r
+            modelFpdModules.addColumn("<html>Supported<br>Architectures</html>");\r
+            modelFpdModules.addColumn("Path");\r
+            javax.swing.table.TableColumn column = null;\r
+            column = jTableFpdModules.getColumnModel().getColumn(ModNameCol);\r
+            column.setPreferredWidth(ModNamePrefWidth);\r
+            column.setMinWidth(ModNameMinWidth);\r
+            column = jTableFpdModules.getColumnModel().getColumn(ModVerCol);\r
+            column.setPreferredWidth(VerPrefWidth);\r
+            column.setMaxWidth(VerMaxWidth);\r
+            column.setMinWidth(VerMinWidth);\r
+            column = jTableFpdModules.getColumnModel().getColumn(PkgNameCol);\r
+            column.setPreferredWidth(PkgNamePrefWidth);\r
+            column.setMinWidth(PkgNameMinWidth);\r
+            column.setMaxWidth(PkgNameMaxWidth);\r
+            column = jTableFpdModules.getColumnModel().getColumn(PkgVerCol);\r
+            column.setPreferredWidth(VerPrefWidth);\r
+            column.setMaxWidth(VerMaxWidth);\r
+            column.setMinWidth(VerMinWidth);\r
+            column = jTableFpdModules.getColumnModel().getColumn(ArchCol);\r
+            column.setPreferredWidth(ArchPrefWidth);\r
+            column.setMaxWidth(ArchMaxWidth);\r
+            column.setMinWidth(ArchMinWidth);\r
+            column = jTableFpdModules.getColumnModel().getColumn(Path5Col);\r
+            column.setPreferredWidth(PathPrefWidth);\r
+            column.setMinWidth(PathMinWidth);\r
+\r
+            jTableFpdModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
         }\r
-        return jTable1;\r
+        return jTableFpdModules;\r
     }\r
 \r
     /**\r
@@ -263,31 +422,47 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton1() {\r
-        if (jButton1 == null) {\r
-            jButton1 = new JButton();\r
-            jButton1.setPreferredSize(new java.awt.Dimension(130,20));\r
-            jButton1.setText("Settings");\r
-            jButton1.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonSettings() {\r
+        if (jButtonSettings == null) {\r
+            jButtonSettings = new JButton();\r
+            jButtonSettings.setPreferredSize(new java.awt.Dimension(130,20));\r
+            jButtonSettings.setText("Settings");\r
+            jButtonSettings.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    int selectedRow = jTable1.getSelectedRow();\r
-                    if (selectedRow < 0){\r
+                    int selectedRow = jTableFpdModules.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
+                        return;\r
+                    }\r
+\r
+                    TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
+                    selectedRow = sorter.modelIndex(selectedRow);\r
+                    try {\r
+                        if (ffc.adjustPcd(selectedRow)) {\r
+                            docConsole.setSaved(false);\r
+                        }\r
+                    }\r
+                    catch (Exception exp) {\r
+                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
                         return;\r
                     }\r
+                    \r
                     if (settingDlg == null) {\r
                         settingDlg = new FpdModuleSA(ffc);\r
                     }\r
-                    \r
-                    String mg = model1.getValueAt(selectedRow, 1)+"";\r
-                    String mv = model1.getValueAt(selectedRow, 2)+"";\r
-                    String pg = model1.getValueAt(selectedRow, 3)+"";\r
-                    String pv = model1.getValueAt(selectedRow, 4)+"";\r
-                    settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv);\r
+\r
+                    String[] sa = new String[5];\r
+                    ffc.getFrameworkModuleInfo(selectedRow, sa);\r
+                    String mg = sa[ModNameCol];\r
+                    String mv = sa[ModVerCol];\r
+                    String pg = sa[PkgNameCol];\r
+                    String pv = sa[PkgVerCol];\r
+                    String arch = sa[ArchCol];\r
+                    settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, selectedRow, docConsole);\r
                     settingDlg.setVisible(true);\r
                 }\r
             });\r
         }\r
-        return jButton1;\r
+        return jButtonSettings;\r
     }\r
 \r
     /**\r
@@ -295,28 +470,51 @@ public class FpdFrameworkModules extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton2() {\r
-        if (jButton2 == null) {\r
-            jButton2 = new JButton();\r
-            jButton2.setPreferredSize(new java.awt.Dimension(130,20));\r
-            jButton2.setText("Remove Module");\r
-            jButton2.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonRemoveModule() {\r
+        if (jButtonRemoveModule == null) {\r
+            jButtonRemoveModule = new JButton();\r
+            jButtonRemoveModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
+            jButtonRemoveModule.setText("Remove Module");\r
+            jButtonRemoveModule.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    int selectedRow = jTable1.getSelectedRow();\r
-                    if (selectedRow < 0){\r
+                    int selectedRow = jTableFpdModules.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
                         return;\r
                     }\r
-                    String mg = model1.getValueAt(selectedRow, 1).toString();\r
-                    String mv = model1.getValueAt(selectedRow, 2).toString();\r
-                    String pg = model1.getValueAt(selectedRow, 3).toString();\r
-                    String pv = model1.getValueAt(selectedRow, 4).toString();\r
-                    model1.removeRow(selectedRow);\r
-                    fpdMsa.remove(mg+mv+pg+pv);\r
+\r
+                    TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
+                    selectedRow = sorter.modelIndex(selectedRow);\r
+\r
+                    String[] sa = new String[5];\r
+                    ffc.getFrameworkModuleInfo(selectedRow, sa);\r
+                    String mg = sa[ModNameCol];\r
+                    String mv = sa[ModVerCol];\r
+                    String pg = sa[PkgNameCol];\r
+                    String pv = sa[PkgVerCol];\r
+                    String arch = sa[ArchCol];\r
+                    ModuleIdentification mi = GlobalData.getModuleId(sa[ModNameCol] + " " + sa[ModVerCol] + " "\r
+                                                                     + sa[PkgNameCol] + " " + sa[PkgVerCol] + " "\r
+                                                                     + sa[ArchCol]);\r
+                    mv = mi.getVersion();\r
+                    pv = mi.getPackage().getVersion();\r
+                    modelFpdModules.removeRow(selectedRow);\r
+                    if (arch == null) {\r
+                        // if no arch specified in ModuleSA\r
+                        fpdMsa.remove(mg + mv + pg + pv);\r
+                    } else {\r
+                        ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
+                        al.remove(arch);\r
+                        if (al.size() == 0) {\r
+                            fpdMsa.remove(mg + mv + pg + pv);\r
+                        }\r
+                    }\r
+\r
+                    docConsole.setSaved(false);\r
                     ffc.removeModuleSA(selectedRow);\r
                 }\r
             });\r
         }\r
-        return jButton2;\r
+        return jButtonRemoveModule;\r
     }\r
 \r
     /**\r
@@ -335,73 +533,103 @@ public class FpdFrameworkModules extends IInternalFrame {
         initialize();\r
     }\r
 \r
-    public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd){\r
+    public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
         this();\r
         init(fpd);\r
-        \r
+\r
     }\r
-    \r
+\r
+    public FpdFrameworkModules(OpeningPlatformType opt) {\r
+        this(opt.getXmlFpd());\r
+        docConsole = opt;\r
+    }\r
+\r
     private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
         try {\r
             GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
         }\r
         catch(Exception e){\r
-            JOptionPane.showMessageDialog(frame, "FrameworkDatabase Corrupted.");\r
+            JOptionPane.showMessageDialog(frame, "Error occurred when getting module data.");\r
         }\r
-        \r
-        if (ffc == null){\r
+\r
+        if (ffc == null) {\r
             ffc = new FpdFileContents(fpd);\r
             ffc.initDynPcdMap();\r
         }\r
-        \r
+\r
         if (fpdMsa == null) {\r
-            fpdMsa = new HashMap<String, String>();\r
+            fpdMsa = new HashMap<String, ArrayList<String>>();\r
         }\r
-        \r
+\r
         if (ffc.getFrameworkModulesCount() > 0) {\r
             String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
             ffc.getFrameworkModulesInfo(saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
-                ModuleIdentification mi = getModuleId(saa[i][1]+ " "+saa[i][2]+" "+saa[i][3]+" "+saa[i][4]);\r
+                ModuleIdentification mi = GlobalData.getModuleId(saa[i][ModNameCol] + " " + saa[i][ModVerCol] + " "\r
+                                                                 + saa[i][PkgNameCol] + " " + saa[i][PkgVerCol]);\r
+                String[] row = { "", "", "", "", "", "" };\r
                 if (mi != null) {\r
-                    saa[i][0] = mi.getName();\r
-                    saa[i][2] = mi.getVersion();\r
-                    saa[i][4] = mi.getPackage().getVersion();\r
+                    row[ModNameCol] = mi.getName();\r
+                    row[ModVerCol] = mi.getVersion();\r
+                    row[PkgNameCol] = mi.getPackage().getName();\r
+                    row[PkgVerCol] = mi.getPackage().getVersion();\r
+                    row[ArchCol] = saa[i][ArchCol];\r
+                    try {\r
+                        row[Path5Col] = GlobalData.getMsaFile(mi).getPath().substring(\r
+                                                                                      System.getenv("WORKSPACE")\r
+                                                                                            .length() + 1);\r
+                    } catch (Exception e) {\r
+                        JOptionPane.showMessageDialog(frame, "Show FPD Modules:" + e.getMessage());\r
+                    }\r
+                }\r
+                modelFpdModules.addRow(row);\r
+                ArrayList<String> al = fpdMsa.get(saa[i][ModNameCol] + row[ModVerCol] + saa[i][PkgNameCol]\r
+                                                  + row[PkgVerCol]);\r
+                if (al == null) {\r
+                    al = new ArrayList<String>();\r
+                    fpdMsa.put(saa[i][ModNameCol] + row[ModVerCol] + saa[i][PkgNameCol] + row[PkgVerCol], al);\r
                 }\r
-                model1.addRow(saa[i]);\r
-                fpdMsa.put(saa[i][1]+saa[i][2]+saa[i][3]+saa[i][4], saa[i][0]);\r
+                al.add(saa[i][Path4Col]);\r
+\r
             }\r
         }\r
-        \r
+\r
         showAllModules();\r
-        \r
+\r
     }\r
-    \r
+\r
     private void showAllModules() {\r
-        \r
+\r
         if (miList == null) {\r
             miList = new ArrayList<ModuleIdentification>();\r
         }\r
         Set<PackageIdentification> spi = GlobalData.getPackageList();\r
         Iterator ispi = spi.iterator();\r
-        \r
-        while(ispi.hasNext()) {\r
-            PackageIdentification pi = (PackageIdentification)ispi.next();\r
-            String[] s = {"", "", "", "", ""};\r
-            s[3] = pi.getGuid();\r
-            s[4] = pi.getVersion();\r
+\r
+        while (ispi.hasNext()) {\r
+            PackageIdentification pi = (PackageIdentification) ispi.next();\r
+            String[] s = { "", "", "", "", "" };\r
+\r
             Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
             Iterator ismi = smi.iterator();\r
-            while(ismi.hasNext()) {\r
-                ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
-                s[0] = mi.getName();\r
-                s[1] = mi.getGuid();\r
-                s[2] = mi.getVersion();\r
-                model.addRow(s);\r
+            while (ismi.hasNext()) {\r
+                ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
+                s[ModNameCol] = mi.getName();\r
+                s[ModVerCol] = mi.getVersion();\r
+                s[PkgNameCol] = pi.getName();\r
+                s[PkgVerCol] = pi.getVersion();\r
+                try {\r
+                    s[Path4Col] = GlobalData.getMsaFile(mi).getPath()\r
+                                            .substring(System.getenv("WORKSPACE").length() + 1);\r
+                } catch (Exception e) {\r
+                    JOptionPane.showMessageDialog(frame, "Show All Modules:" + e.getMessage());\r
+                }\r
+                modelAllModules.addRow(s);\r
                 miList.add(mi);\r
             }\r
         }\r
     }\r
+\r
     /**\r
      * This method initializes this\r
      * \r
@@ -412,38 +640,10 @@ public class FpdFrameworkModules extends IInternalFrame {
         this.setTitle("Framework Modules");\r
         this.setContentPane(getJSplitPane());\r
         this.setVisible(true);\r
-        \r
-    }\r
-    \r
-    private ModuleIdentification getModuleId(String key){\r
-        //\r
-        // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.\r
-        //\r
-        String[] keyPart = key.split(" ");\r
-        Set<PackageIdentification> spi = GlobalData.getPackageList();\r
-        Iterator ispi = spi.iterator();\r
-        \r
-        while(ispi.hasNext()) {\r
-            PackageIdentification pi = (PackageIdentification)ispi.next();\r
-            if ( !pi.getGuid().equals(keyPart[2])){ \r
-//                            || !pi.getVersion().equals(keyPart[3])){\r
-                continue;\r
-            }\r
-            Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
-            Iterator ismi = smi.iterator();\r
-            while(ismi.hasNext()) {\r
-                ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
-                if (mi.getGuid().equals(keyPart[0])){\r
-//                                && mi.getVersion().equals(keyPart[1])){\r
 \r
-                    return mi;\r
-                }\r
-            }\r
-        }\r
-        return null;\r
     }\r
 \r
-}  //  @jve:decl-index=0:visual-constraint="10,10"\r
+} //  @jve:decl-index=0:visual-constraint="10,10"\r
 \r
 class NonEditableTableModel extends DefaultTableModel {\r
     /**\r