]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java
do not generate version attributes when saving module order information in FV if...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFlash.java
index bdcb193819986442e220b8aa006b53e99cbbe482..e97004c3ca03877765d277320987b0c6440869b9 100644 (file)
@@ -25,12 +25,11 @@ import javax.swing.ListSelectionModel;
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
 import org.tianocore.frameworkwizard.common.DataValidation;\r
-import org.tianocore.frameworkwizard.common.GlobalData;\r
+import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
 import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
-import org.tianocore.frameworkwizard.platform.ui.FpdFrameworkModules;\r
 import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
 \r
 import java.awt.FlowLayout;\r
@@ -39,10 +38,11 @@ import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;\r
 import java.awt.event.ItemEvent;\r
 import java.awt.event.ItemListener;\r
+import java.awt.event.MouseAdapter;\r
+import java.awt.event.MouseEvent;\r
 import java.io.BufferedReader;\r
 import java.io.File;\r
 import java.io.FileReader;\r
-import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.LinkedHashMap;\r
@@ -105,10 +105,10 @@ public class FpdFlash extends IInternalFrame {
     private JLabel jLabelFvImageNames = null;\r
     private JLabel jLabelFvParaName = null;\r
     private JTextField jTextFieldFvParaName = null;\r
-    private JButton jButtonFvParaAdd = null;\r
+    private JButton jButtonFvNameAdd = null;\r
     private JScrollPane jScrollPaneFvImageNames = null;\r
     private JTable jTableFvImageNames = null;\r
-    private JButton jButtonFvParaDel = null;\r
+    private JButton jButtonFvNameDel = null;\r
     private JPanel jPanelFvImageOpts = null;\r
     private JButton jButtonAddFvImage = null;\r
     private JScrollPane jScrollPaneFvInfo = null;\r
@@ -145,7 +145,7 @@ public class FpdFlash extends IInternalFrame {
     private JLabel jLabelFvAdditional = null;\r
     private JScrollPane jScrollPaneFvInFdf = null;\r
     private JTable jTableFvInFdf = null;\r
-    private NonEditableTableModel fvInFdfTableModel = null;  //  @jve:decl-index=0:visual-constraint=""\r
+    private IDefaultTableModel fvInFdfTableModel = null;  //  @jve:decl-index=0:visual-constraint=""\r
     private JButton jButtonFvInFdfOptions = null;\r
     private JScrollPane jScrollPaneFvAdditional = null;\r
     private JTable jTableFvAdditional = null;\r
@@ -587,6 +587,7 @@ public class FpdFlash extends IInternalFrame {
             jComboBoxFvParaType = new JComboBox();\r
             jComboBoxFvParaType.addItem("Attributes");\r
             jComboBoxFvParaType.addItem("Components");\r
+            jComboBoxFvParaType.setSelectedIndex(0);\r
             jComboBoxFvParaType.setPreferredSize(new java.awt.Dimension(180,20));\r
             jComboBoxFvParaType.addItemListener(new ItemListener() {\r
 \r
@@ -634,13 +635,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButtonFvParaAdd() {\r
-        if (jButtonFvParaAdd == null) {\r
-            jButtonFvParaAdd = new JButton();\r
-            jButtonFvParaAdd.setPreferredSize(new Dimension(80, 20));\r
-            jButtonFvParaAdd.setEnabled(true);\r
-            jButtonFvParaAdd.setText("Add");\r
-            jButtonFvParaAdd.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvNameAdd() {\r
+        if (jButtonFvNameAdd == null) {\r
+            jButtonFvNameAdd = new JButton();\r
+            jButtonFvNameAdd.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvNameAdd.setEnabled(true);\r
+            jButtonFvNameAdd.setText("Add");\r
+            jButtonFvNameAdd.addActionListener(new AbstractAction() {\r
                 /**\r
                  * \r
                  */\r
@@ -649,26 +650,34 @@ public class FpdFlash extends IInternalFrame {
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     if (jTextFieldFvParaName.getText().length() > 0){\r
                         String[] row = {jTextFieldFvParaName.getText()};                        \r
-                        fvImageNameTableModel.addRow(row);\r
-                        if (jTableFvInfo.getSelectedRow() < 0) {\r
+                        int selectedRow = jTableFvInfo.getSelectedRow();\r
+                        if (selectedRow < 0) {\r
                             return;\r
                         }\r
                         \r
-                        String fvNameList = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 0)+"";\r
-                        String type = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 1)+"";\r
+                        String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+"";\r
+                        String type = jTableFvInfo.getValueAt(selectedRow, 1)+"";\r
                         int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
                         \r
                         if (fvImagePos < 0) {\r
                           // new FvImage.\r
+                            ffc.genFvImagesFvImage(row, jComboBoxFvParaType.getSelectedItem()+"", null);  \r
                         }\r
                         else {\r
-                          //append Fv name.  \r
+                          //append Fv name.\r
+                          ffc.addFvImageNamesInFvImage(fvImagePos, row);  \r
                         }\r
+                        docConsole.setSaved(false);\r
+                        fvImageNameTableModel.addRow(row);\r
+                        fvNameList += " ";\r
+                        fvNameList += row[0];\r
+                        jTableFvInfo.setValueAt(fvNameList.trim(), selectedRow, 0);\r
+                        jTableFvImageNames.changeSelection(jTableFvImageNames.getRowCount() - 1, 0, false, false);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButtonFvParaAdd;\r
+        return jButtonFvNameAdd;\r
     }\r
 \r
 \r
@@ -694,37 +703,11 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JTable getJTableFvImageNames() {\r
         if (jTableFvImageNames == null) {\r
-            fvImageNameTableModel = new DefaultTableModel();\r
+            fvImageNameTableModel = new IDefaultTableModel();\r
             jTableFvImageNames = new JTable(fvImageNameTableModel);\r
             jTableFvImageNames.setRowHeight(20);\r
             fvImageNameTableModel.addColumn("FV Image Name");\r
             \r
-            jTableFvImageNames.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
-                public void valueChanged(ListSelectionEvent e) {\r
-                    if (e.getValueIsAdjusting()) {\r
-                        return;\r
-                    }\r
-                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
-                    if (lsm.isSelectionEmpty()) {\r
-                        return;\r
-                    } else {\r
-                        int selectedRow = lsm.getMinSelectionIndex();\r
-                        String oldFvName = jTableFvImageNames.getValueAt(selectedRow, 0)+"";\r
-                    }\r
-                }\r
-            });\r
-            \r
-            jTableFvImageNames.getModel().addTableModelListener(new TableModelListener() {\r
-                public void tableChanged(TableModelEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-                    int row = arg0.getFirstRow();\r
-                    int col = arg0.getColumn();\r
-                    TableModel m = (TableModel) arg0.getSource();\r
-                    \r
-                    if (arg0.getType() == TableModelEvent.UPDATE) {\r
-                    }\r
-                }\r
-            });\r
         }\r
         return jTableFvImageNames;\r
     }\r
@@ -735,13 +718,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButtonFvParaDel() {\r
-        if (jButtonFvParaDel == null) {\r
-            jButtonFvParaDel = new JButton();\r
-            jButtonFvParaDel.setPreferredSize(new Dimension(80, 20));\r
-            jButtonFvParaDel.setEnabled(true);\r
-            jButtonFvParaDel.setText("Delete");\r
-            jButtonFvParaDel.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvNameDel() {\r
+        if (jButtonFvNameDel == null) {\r
+            jButtonFvNameDel = new JButton();\r
+            jButtonFvNameDel.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvNameDel.setEnabled(true);\r
+            jButtonFvNameDel.setText("Delete");\r
+            jButtonFvNameDel.addActionListener(new AbstractAction() {\r
                 /**\r
                  * \r
                  */\r
@@ -749,16 +732,58 @@ public class FpdFlash extends IInternalFrame {
 \r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     if (jTableFvImageNames.getSelectedRow() >= 0){\r
-                                   \r
+                        int selectedRow = jTableFvInfo.getSelectedRow();\r
+                        if (selectedRow < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String selectedFvName = jTableFvImageNames.getValueAt(jTableFvImageNames.getSelectedRow(), 0)+"";\r
+                        String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+"";\r
+                        String type = jTableFvInfo.getValueAt(selectedRow, 1)+"";\r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
+                        \r
+                        if (fvImagePos < 0) {\r
+                            return;  \r
+                        }\r
+                        else {\r
+                          //delete Fv name.\r
+                            ffc.updateFvImageNamesInFvImage(fvImagePos, selectedFvName, null);\r
+                        }\r
+                        docConsole.setSaved(false);\r
+                        String newList = removeFvNameFromList(fvNameList, selectedFvName);\r
+                        jTableFvInfo.setValueAt(newList, selectedRow, 0);           \r
                         fvImageNameTableModel.removeRow(jTableFvImageNames.getSelectedRow());\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButtonFvParaDel;\r
-    }\r
-\r
-\r
+        return jButtonFvNameDel;\r
+    }\r
+\r
+  private String removeFvNameFromList (String list, String name) {\r
+      String[] nameArray = list.split(" ");\r
+      int occursAt = -1;\r
+      for (int i = 0; i < nameArray.length; ++i) {\r
+          if (nameArray[i].equals(name)) {\r
+              occursAt = i;\r
+              break;\r
+          }\r
+      }\r
+      \r
+      if (occursAt == -1) {\r
+          return list;\r
+      }\r
+      \r
+      String newList = " ";\r
+      for (int j = 0; j < nameArray.length; ++j) {\r
+          if (j != occursAt) {\r
+              newList += nameArray[j];\r
+              newList += " ";\r
+          }\r
+      }\r
+      \r
+      return newList.trim();\r
+  }\r
 \r
                        \r
   private JPanel getJPanelFvImageOpts() {\r
@@ -818,33 +843,24 @@ public class FpdFlash extends IInternalFrame {
                 private static final long serialVersionUID = 1L;\r
 \r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFvInfo.isEditing()) {\r
-                        jTableFvInfo.getCellEditor().stopCellEditing();\r
-                    }\r
-                    if (jTableFvImageOpts.isEditing()) {\r
-                        jTableFvImageOpts.getCellEditor().stopCellEditing();\r
-                    }\r
-                    if (jTableFvImageNames.getRowCount()== 0){\r
-                        return;\r
-                    }\r
-                    String imageName = " ";\r
-                    for (int i = 0; i < jTableFvImageNames.getRowCount(); ++i){\r
-                        imageName += (String)jTableFvImageNames.getValueAt(i, 0);\r
-                        imageName += " ";\r
-                    }\r
-                    imageName = imageName.trim();\r
                     \r
-                    \r
-                    \r
-                    LinkedHashMap<String, String> m = null;\r
-//                    if (jCheckBoxFvImageOpts.isSelected()) {\r
-                        m = new LinkedHashMap<String, String>();\r
-                        getOptionNameValue(m);\r
+//                    String imageName = " ";\r
+//                    for (int i = 0; i < jTableFvImageNames.getRowCount(); ++i){\r
+//                        imageName += (String)jTableFvImageNames.getValueAt(i, 0);\r
+//                        imageName += " ";\r
 //                    }\r
-                    ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m);\r
-                    docConsole.setSaved(false);\r
-                    Object[] row = {imageName, jComboBoxFvParaType.getSelectedItem()};\r
-                    fvImageParaTableModel.addRow(row); \r
+//                    imageName = imageName.trim();\r
+                    \r
+//                    LinkedHashMap<String, String> m = null;\r
+//                    m = new LinkedHashMap<String, String>();\r
+//                    getOptionNameValue(m);\r
+//                    ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m);\r
+//                    docConsole.setSaved(false);\r
+                    fvImageNameTableModel.setRowCount(0);\r
+                    fvOptionTableModel.setRowCount(0);\r
+                    Object[] row = {"", jComboBoxFvParaType.getSelectedItem()};\r
+                    fvImageParaTableModel.addRow(row);\r
+                    jTableFvInfo.changeSelection(jTableFvInfo.getRowCount() - 1, 0, false, false);\r
                 }\r
             });\r
         }\r
@@ -897,9 +913,12 @@ public class FpdFlash extends IInternalFrame {
                         jComboBoxFvParaType.setSelectedItem(type);\r
                         String[] fvNames = fvNameList.split(" ");\r
                         fvImageNameTableModel.setRowCount(0);\r
+                        fvOptionTableModel.setRowCount(0);\r
                         for (int i = 0; i < fvNames.length; ++i) {\r
                             String[] row = { fvNames[i] };\r
-                            fvImageNameTableModel.addRow(row);\r
+                            if (row[0].length() > 0) {\r
+                                fvImageNameTableModel.addRow(row);\r
+                            }\r
                         }\r
                         \r
                         int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
@@ -909,7 +928,6 @@ public class FpdFlash extends IInternalFrame {
                         LinkedHashMap<String, String> optionMap = new LinkedHashMap<String, String>();\r
                         ffc.getFvImagesFvImageOptions(fvImagePos, optionMap);\r
                         if (optionMap.size() > 0){\r
-                            fvOptionTableModel.setRowCount(0);\r
                             Set<String> key = optionMap.keySet();\r
                             Iterator<String> i = key.iterator();\r
                             while (i.hasNext()) {\r
@@ -947,9 +965,15 @@ public class FpdFlash extends IInternalFrame {
                 public void actionPerformed(ActionEvent arg0) {\r
                     // TODO Auto-generated method stub\r
                     if (jTableFvInfo.getSelectedRow() >= 0 ) {\r
-                        ffc.removeFvImagesFvImage(jTableFvInfo.getSelectedRow());\r
+                        String fvNameList = fvImageParaTableModel.getValueAt(jTableFvInfo.getSelectedRow(), 0)+"";\r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, jComboBoxFvParaType.getSelectedItem()+"");\r
+                        \r
+                        ffc.removeFvImagesFvImage(fvImagePos);\r
                         fvImageParaTableModel.removeRow(jTableFvInfo.getSelectedRow());\r
                         docConsole.setSaved(false);\r
+                        \r
+                        fvImageNameTableModel.setRowCount(0);\r
+                        fvOptionTableModel.setRowCount(0);\r
                     }\r
                 }\r
                 \r
@@ -1158,7 +1182,7 @@ public class FpdFlash extends IInternalFrame {
             JOptionPane.showMessageDialog(frame, "FDF file does NOT contain valid Erase Polarity.");\r
         }\r
         else {\r
-            ffc.setTypedFvImageNameValue("Attributes", "ErasePolarity", erasePolarity);\r
+            ffc.setTypedFvImageNameValue("Attributes", "EFI_ERASE_POLARITY", erasePolarity);\r
         }\r
         \r
         // BugBug: assume all blocks have same size;\r
@@ -1298,8 +1322,26 @@ public class FpdFlash extends IInternalFrame {
 \r
                 public void actionPerformed(ActionEvent e) {\r
                     if (jTextFieldFvImageOptName.getText().length() > 0 && jTextFieldFvImageOptValue.getText().length() > 0){\r
-                        String[] row = {jTextFieldFvImageOptName.getText(), jTextFieldFvImageOptValue.getText()};                        \r
+                        int selectedRow = jTableFvInfo.getSelectedRow();\r
+                        if (selectedRow < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+"";\r
+                        String type = jTableFvInfo.getValueAt(selectedRow, 1)+"";\r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
+                        String[] row = {jTextFieldFvImageOptName.getText(), jTextFieldFvImageOptValue.getText()};\r
+                        \r
+                        if (fvImagePos < 0) {\r
+                            return;\r
+                        }\r
+                        else {\r
+                            //append options to FvImage.\r
+                            ffc.setFvImagesFvImageNameValue(fvImagePos, row[0], row[1]);\r
+                        }\r
+                        docConsole.setSaved(false);\r
                         fvOptionTableModel.addRow(row);\r
+                        jTableFvImageOpts.changeSelection(jTableFvImageOpts.getRowCount() - 1, 0, false, false);\r
                     }\r
                 }\r
             });\r
@@ -1326,7 +1368,22 @@ public class FpdFlash extends IInternalFrame {
 \r
                 public void actionPerformed(ActionEvent e) {\r
                     if (jTableFvImageOpts.getSelectedRow() >= 0){\r
-                        fvOptionTableModel.removeRow(jTableFvProp.getSelectedRow());\r
+                        int selectedRow = jTableFvInfo.getSelectedRow();\r
+                        if (selectedRow < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+"";\r
+                        String type = jTableFvInfo.getValueAt(selectedRow, 1)+"";\r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
+                        if (fvImagePos < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String optName = fvOptionTableModel.getValueAt(jTableFvImageOpts.getSelectedRow(), 0)+"";\r
+                        ffc.removeFvImageNameValue(fvImagePos, optName);\r
+                        docConsole.setSaved(false);\r
+                        fvOptionTableModel.removeRow(jTableFvImageOpts.getSelectedRow());\r
                     }\r
                 }\r
             });\r
@@ -1355,7 +1412,7 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JTable getJTableFvImageOpts() {\r
         if (jTableFvImageOpts == null) {\r
-            fvOptionTableModel = new DefaultTableModel();\r
+            fvOptionTableModel = new IDefaultTableModel();\r
             fvOptionTableModel.addColumn("Name");\r
             fvOptionTableModel.addColumn("Value");\r
             jTableFvImageOpts = new JTable(fvOptionTableModel);\r
@@ -1592,9 +1649,9 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return org.tianocore.frameworkwizard.platform.ui.NonEditableTableModel \r
      */\r
-    private NonEditableTableModel getFvInFdfTableModel() {\r
+    private IDefaultTableModel getFvInFdfTableModel() {\r
         if (fvInFdfTableModel == null) {\r
-            fvInFdfTableModel = new NonEditableTableModel();\r
+            fvInFdfTableModel = new IDefaultTableModel();\r
             fvInFdfTableModel.addColumn("FV Name");\r
             fvInFdfTableModel.addColumn("Size");\r
             fvInFdfTableModel.addColumn("Corresponding File Name");\r
@@ -1735,7 +1792,7 @@ public class FpdFlash extends IInternalFrame {
                                 jTabbedPane.addTab(newFvName, new ModuleOrderPane(newFvName, ""));\r
                                 // Add FvImageNames in Flash\r
                                 String[] fvNames = {newFvName};\r
-                                ffc.AddFvImageFvImageNames(fvNames);\r
+                                ffc.addFvImageFvImageNames(fvNames);\r
                             }\r
                             docConsole.setSaved(false);\r
                             oldFvName = newFvName;\r
@@ -1980,8 +2037,8 @@ public class FpdFlash extends IInternalFrame {
         if (jPanelBgFvName == null) {\r
             jPanelBgFvName = new JPanel();\r
             jPanelBgFvName.setPreferredSize(new java.awt.Dimension(80,55));\r
-            jPanelBgFvName.add(getJButtonFvParaAdd(), null);\r
-            jPanelBgFvName.add(getJButtonFvParaDel(), null);\r
+            jPanelBgFvName.add(getJButtonFvNameAdd(), null);\r
+            jPanelBgFvName.add(getJButtonFvNameDel(), null);\r
         }\r
         return jPanelBgFvName;\r
     }\r
@@ -2248,7 +2305,108 @@ public class FpdFlash extends IInternalFrame {
         }\r
 \r
     }\r
-        \r
+    \r
+//    class ModuleSAInfo {\r
+//        private int rowNumber = -1;\r
+//        private String moduleGuid = null;\r
+//        private String moduleVersion = null;\r
+//        private String packageGuid = null;\r
+//        private String packageVersion = null;\r
+//        private String arch = null;\r
+//        \r
+//        public ModuleSAInfo (String mg, String mv, String pg, String pv, String a) {\r
+//            moduleGuid = mg;\r
+//            moduleVersion = mv;\r
+//            packageGuid = pg;\r
+//            packageVersion = pv;\r
+//            arch = a;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the arch.\r
+//         */\r
+//        public String getArch() {\r
+//            return arch;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param arch The arch to set.\r
+//         */\r
+//        public void setArch(String arch) {\r
+//            this.arch = arch;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the moduleGuid.\r
+//         */\r
+//        public String getModuleGuid() {\r
+//            return moduleGuid;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param moduleGuid The moduleGuid to set.\r
+//         */\r
+//        public void setModuleGuid(String moduleGuid) {\r
+//            this.moduleGuid = moduleGuid;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the moduleVersion.\r
+//         */\r
+//        public String getModuleVersion() {\r
+//            return moduleVersion;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param moduleVersion The moduleVersion to set.\r
+//         */\r
+//        public void setModuleVersion(String moduleVersion) {\r
+//            this.moduleVersion = moduleVersion;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the packageGuid.\r
+//         */\r
+//        public String getPackageGuid() {\r
+//            return packageGuid;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param packageGuid The packageGuid to set.\r
+//         */\r
+//        public void setPackageGuid(String packageGuid) {\r
+//            this.packageGuid = packageGuid;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the packageVersion.\r
+//         */\r
+//        public String getPackageVersion() {\r
+//            return packageVersion;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param packageVersion The packageVersion to set.\r
+//         */\r
+//        public void setPackageVersion(String packageVersion) {\r
+//            this.packageVersion = packageVersion;\r
+//        }\r
+//\r
+//        /**\r
+//         * @return Returns the rowNumber.\r
+//         */\r
+//        public int getRowNumber() {\r
+//            return rowNumber;\r
+//        }\r
+//\r
+//        /**\r
+//         * @param rowNumber The rowNumber to set.\r
+//         */\r
+//        public void setRowNumber(int rowNumber) {\r
+//            this.rowNumber = rowNumber;\r
+//        }\r
+//    }\r
+    \r
     private class ModuleOrderPane extends JPanel {\r
 \r
         /**\r
@@ -2269,10 +2427,10 @@ public class FpdFlash extends IInternalFrame {
         private JButton jButtonDown = null;\r
         private JButton jButtonOk = null;\r
         private JButton jButtonCancel = null;\r
-        private NonEditableTableModel modInFvTableModel = null;\r
-        private NonEditableTableModel fpdModTableModel = null;\r
-        private HashMap<String, ModuleIdentification> mGuidToModuleId = null;\r
-        private ArrayList<String> listModGuidInFv = null;\r
+        private IDefaultTableModel modInFvTableModel = null;\r
+        private IDefaultTableModel fpdModTableModel = null;\r
+//        private ArrayList<ModuleSAInfo> listTableModInFvModuleSAInfo = null;\r
+//        private ArrayList<ModuleSAInfo> listTableFpdModulesModuleSAInfo = null;\r
         private String title = null;\r
         private String outputFileName = null;\r
         \r
@@ -2280,8 +2438,8 @@ public class FpdFlash extends IInternalFrame {
             super(new BorderLayout());\r
             title = tabTitle;\r
             outputFileName = file;\r
-            mGuidToModuleId = new HashMap<String, ModuleIdentification>();\r
-            listModGuidInFv = new ArrayList<String>();\r
+//            listTableModInFvModuleSAInfo = new ArrayList<ModuleSAInfo>();\r
+//            listTableFpdModulesModuleSAInfo = new ArrayList<ModuleSAInfo>();\r
             add(getJPanelModOrderN(), java.awt.BorderLayout.NORTH);\r
             add(getJPanelModOrderS(), java.awt.BorderLayout.SOUTH);\r
             add(getJPanelModOrderC(), java.awt.BorderLayout.CENTER);\r
@@ -2293,34 +2451,40 @@ public class FpdFlash extends IInternalFrame {
             int size = ffc.getUserExtsIncModCount(fvName);\r
             \r
             if (size != -1) {\r
-                String[][] saa = new String[size][2];\r
+                String[][] saa = new String[size][5];\r
                 ffc.getUserExtsIncMods(fvName, saa);\r
 \r
                 for (int i = 0; i < size; ++i) {\r
-                    listModGuidInFv.add(saa[i][0].toLowerCase());\r
-                    String name = getModuleName(saa[i][0]);\r
-                    String[] row = { name };\r
+                    String moduleKey = saa[i][0] + " " + saa[i][1] + " " + saa[i][2] + " " + saa[i][3];\r
+                    ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+                    String name = "N/A";\r
+                    if (mi != null) {\r
+                        name = mi.getName();\r
+                    }\r
+                    String[] row = { name, saa[i][0] , saa[i][1], saa[i][2] , saa[i][3], saa[i][4] };\r
                     modInFvTableModel.addRow(row);\r
                 }\r
             }\r
             //\r
             // From ModuleSAs, get module guids with FvBinding = fvName.\r
             //\r
-            Vector<String> vGuid = new Vector<String>();\r
-            ffc.getFrameworkModuleGuid(fvName, vGuid);\r
+            Vector<String[]> vModuleSA = new Vector<String[]>();\r
+            ffc.getFrameworkModuleSAByFvBinding(fvName, vModuleSA);\r
             //\r
             // If BuildOptions->UserExtensions already contain these module info,\r
             // no need to add them into table again.\r
             //\r
-            Iterator<String> iter = vGuid.iterator();\r
+            Iterator<String[]> iter = vModuleSA.iterator();\r
             while (iter.hasNext()){\r
-                String guid = iter.next();\r
-//                String moduleName = getModuleName(guid);\r
-//                if (existedInTable(moduleName, modInFvTableModel)) {\r
-//                    vGuid.remove(guid);\r
-//                }\r
-                if (!listModGuidInFv.contains(guid.toLowerCase())) {\r
-                    String[] row = {getModuleName(guid)};\r
+                String[] sa = iter.next();\r
+                if (!moduleInfoInTable (sa, modInFvTableModel)) {\r
+                    String moduleKey = sa[0] + " " + sa[1] + " " + sa[2] + " " + sa[3];\r
+                    ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+                    String name = "N/A";\r
+                    if (mi != null) {\r
+                        name = mi.getName();\r
+                    }\r
+                    String[] row = { name, sa[0] , sa[1], sa[2] , sa[3], sa[4] };\r
                     modInFvTableModel.addRow(row);\r
                 }\r
             }\r
@@ -2333,11 +2497,16 @@ public class FpdFlash extends IInternalFrame {
             ffc.getFrameworkModulesInfo(saa);\r
             \r
             for (int i = 0; i < size; ++i) {\r
-                String name = getModuleName(saa[i][0]);\r
-                if (existedInTable(name, modInFvTableModel) || existedInTable(name, fpdModTableModel)) {\r
+                if (moduleInfoInTable(saa[i], modInFvTableModel) || moduleInfoInTable(saa[i], fpdModTableModel)) {\r
                     continue;\r
                 }\r
-                String[] row = {name};\r
+                String moduleKey = saa[i][0] + " " + saa[i][1] + " " + saa[i][2] + " " + saa[i][3];\r
+                ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+                String name = "N/A";\r
+                if (mi != null) {\r
+                    name = mi.getName();\r
+                }\r
+                String[] row = { name, saa[i][0] , saa[i][1], saa[i][2] , saa[i][3], saa[i][4] };\r
                 fpdModTableModel.addRow(row);\r
             }\r
             \r
@@ -2345,29 +2514,35 @@ public class FpdFlash extends IInternalFrame {
             sorter.setSortState(0, TableSorter.ASCENDING);\r
         }\r
         \r
-        private String getModuleName (String guid) {\r
-            \r
-            for (int i = 0; i < GlobalData.vModuleList.size(); ++i) {\r
-                ModuleIdentification mi = GlobalData.vModuleList.get(i);\r
-                String mg = mi.getGuid();\r
-                if (mg == null) {\r
-                    continue;\r
-                }\r
-                if (mg.equalsIgnoreCase(guid)) {\r
-                    mGuidToModuleId.put(guid.toLowerCase(), mi);\r
-                    return mi.getName();\r
-                }\r
-            }\r
-            \r
-            return "";\r
-        }\r
         \r
-        private boolean existedInTable (String name, DefaultTableModel model) {\r
+        private boolean moduleInfoInTable (String[] moduleInfo, DefaultTableModel model) {\r
+            boolean matched = false;\r
             int size = model.getDataVector().size();\r
             for (int i = 0; i < size; ++i) {\r
-                if (((Vector)model.getDataVector().elementAt(i)).contains(name)) {\r
+                Vector rowData = (Vector)model.getDataVector().elementAt(i);\r
+                for (int j = 1; j < rowData.size(); ++j) {\r
+                    if (rowData.elementAt(j) == null && moduleInfo[j-1] == null) {\r
+                        matched = true;\r
+                    }\r
+                    else if (rowData.elementAt(j).equals("null") && moduleInfo[j-1] == null) {\r
+                        matched = true;\r
+                    }\r
+                    else if (rowData.elementAt(j) == null && moduleInfo[j-1].equals("null")) {\r
+                        matched = true;\r
+                    }\r
+                    else if (rowData.elementAt(j) != null && rowData.elementAt(j).toString().equalsIgnoreCase(moduleInfo[j-1])) {\r
+                        matched = true;\r
+                    }\r
+                    else {\r
+                        matched = false;\r
+                        break;\r
+                    }\r
+                }\r
+                \r
+                if (matched) {\r
                     return true;\r
                 }\r
+                \r
             }\r
             return false;\r
         }\r
@@ -2439,12 +2614,78 @@ public class FpdFlash extends IInternalFrame {
          */\r
         private JTable getJTableModInFv() {\r
             if (jTableModInFv == null) {\r
-                modInFvTableModel = new NonEditableTableModel();\r
+                modInFvTableModel = new IDefaultTableModel();\r
+                \r
+                jTableModInFv = new JTable(modInFvTableModel){\r
+                    /**\r
+                     * \r
+                     */\r
+                    private static final long serialVersionUID = 4903583933542581721L;\r
+\r
+                    public String getToolTipText(MouseEvent e) {\r
+                        String tip = null;\r
+                        java.awt.Point p = e.getPoint();\r
+                        int rowIndex = rowAtPoint(p);\r
+//                        int colIndex = columnAtPoint(p);\r
+//                        int realColumnIndex = convertColumnIndexToModel(colIndex);\r
+\r
+                        TableModel model = getModel();\r
+                        String mg = (String) model.getValueAt(rowIndex, 1);\r
+                        String mv = (String) model.getValueAt(rowIndex, 2);\r
+                        String pg = (String) model.getValueAt(rowIndex, 3);\r
+                        String pv = (String) model.getValueAt(rowIndex, 4);\r
+                        String arch = (String) model.getValueAt(rowIndex, 5);\r
+                        ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv);\r
+                        if (mi != null) {\r
+                            tip = "Path: " + mi.getPath() + "; Arch: " + arch + ";";\r
+                        }\r
+                        else {\r
+                            tip = "No Module Path Information."; \r
+                        }\r
+                             \r
+                        return tip;\r
+                    }\r
+\r
+                };\r
                 modInFvTableModel.addColumn("Module Orders in FV");\r
-                jTableModInFv = new JTable(modInFvTableModel);\r
+                modInFvTableModel.addColumn("mg");\r
+                modInFvTableModel.addColumn("mv");\r
+                modInFvTableModel.addColumn("pg");\r
+                modInFvTableModel.addColumn("pv");\r
+                modInFvTableModel.addColumn("arch");\r
+                \r
+                for (int i = 1; i < 6; ++i) {\r
+                    jTableModInFv.removeColumn(jTableModInFv.getColumnModel().getColumn(jTableModInFv.getColumnCount()-1));\r
+                }\r
+                \r
                 jTableModInFv.setRowHeight(20);\r
                 jTableModInFv.setShowGrid(false);\r
-                \r
+                jTableModInFv.setAutoCreateColumnsFromModel(false);\r
+                jTableModInFv.addMouseListener(new MouseAdapter() {\r
+\r
+                    /* (non-Javadoc)\r
+                     * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)\r
+                     */\r
+                    @Override\r
+                    public void mouseClicked(MouseEvent arg0) {\r
+                        if (arg0.getButton() == MouseEvent.BUTTON3) {\r
+                            java.awt.Point p = arg0.getPoint();\r
+                            int rowIndex = jTableModInFv.rowAtPoint(p);\r
+                            TableModel model = jTableModInFv.getModel();\r
+                            String mg = (String) model.getValueAt(rowIndex, 1);\r
+                            String mv = (String) model.getValueAt(rowIndex, 2);\r
+                            String pg = (String) model.getValueAt(rowIndex, 3);\r
+                            String pv = (String) model.getValueAt(rowIndex, 4);\r
+                            ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv);\r
+                            String details = "PackageGuid: " + pg + "; ModuleVer:" + mv + "; PkgVer:" + pv;\r
+                            if (mi != null) {\r
+                                details = "In Package " + mi.getPackageId().getName() + "; ModuleVer:" + mv + "; PkgVer:" + pv;\r
+                            }\r
+                            JOptionPane.showMessageDialog(frame, details);\r
+                        }\r
+                    }\r
+                    \r
+                });\r
             }\r
             return jTableModInFv;\r
         }\r
@@ -2491,12 +2732,78 @@ public class FpdFlash extends IInternalFrame {
          */\r
         private JTable getJTableFpdModules() {\r
             if (jTableFpdModules == null) {\r
-                fpdModTableModel = new NonEditableTableModel();\r
+                fpdModTableModel = new IDefaultTableModel();\r
                 TableSorter sorter = new TableSorter(fpdModTableModel);\r
-                jTableFpdModules = new JTable(sorter);\r
+                jTableFpdModules = new JTable(sorter){\r
+                    /**\r
+                     * \r
+                     */\r
+                    private static final long serialVersionUID = -4666296888377637808L;\r
+\r
+                    public String getToolTipText(MouseEvent e) {\r
+                        String tip = null;\r
+                        java.awt.Point p = e.getPoint();\r
+                        int rowIndex = rowAtPoint(p);\r
+//                        int colIndex = columnAtPoint(p);\r
+//                        int realColumnIndex = convertColumnIndexToModel(colIndex);\r
+\r
+                        TableModel model = getModel();\r
+                        String mg = (String) model.getValueAt(rowIndex, 1);\r
+                        String mv = (String) model.getValueAt(rowIndex, 2);\r
+                        String pg = (String) model.getValueAt(rowIndex, 3);\r
+                        String pv = (String) model.getValueAt(rowIndex, 4);\r
+                        String arch = (String) model.getValueAt(rowIndex, 5);\r
+                        ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv);\r
+                        if (mi != null) {\r
+                            tip = "Path: " + mi.getPath() + "; Arch: " + arch + ";";\r
+                        }\r
+                        else {\r
+                            tip = "No Module Path Information."; \r
+                        }\r
+                             \r
+                        return tip;\r
+                    }\r
+\r
+                };\r
+                \r
+                fpdModTableModel.addColumn("Modules in Platform");\r
+                fpdModTableModel.addColumn("mg");\r
+                fpdModTableModel.addColumn("mv");\r
+                fpdModTableModel.addColumn("pg");\r
+                fpdModTableModel.addColumn("pv");\r
+                fpdModTableModel.addColumn("arch");\r
+                \r
+                for (int i = 1; i < 6; ++i) {\r
+                    jTableFpdModules.removeColumn(jTableFpdModules.getColumnModel().getColumn(jTableFpdModules.getColumnCount()-1));\r
+                }\r
                 jTableFpdModules.setRowHeight(20);\r
                 jTableFpdModules.setShowGrid(false);\r
-                fpdModTableModel.addColumn("Modules in Platform");\r
+                jTableFpdModules.setAutoCreateColumnsFromModel(false);\r
+                jTableFpdModules.addMouseListener(new MouseAdapter() {\r
+\r
+                    /* (non-Javadoc)\r
+                     * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)\r
+                     */\r
+                    @Override\r
+                    public void mouseClicked(MouseEvent arg0) {\r
+                        if (arg0.getButton() == MouseEvent.BUTTON3) {\r
+                            java.awt.Point p = arg0.getPoint();\r
+                            int rowIndex = jTableFpdModules.rowAtPoint(p);\r
+                            TableModel model = jTableFpdModules.getModel();\r
+                            String mg = (String) model.getValueAt(rowIndex, 1);\r
+                            String mv = (String) model.getValueAt(rowIndex, 2);\r
+                            String pg = (String) model.getValueAt(rowIndex, 3);\r
+                            String pv = (String) model.getValueAt(rowIndex, 4);\r
+                            ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv);\r
+                            String details = "PackageGuid: " + pg + "; ModuleVer:" + mv + "; PkgVer:" + pv;\r
+                            if (mi != null) {\r
+                                details = "In Package " + mi.getPackageId().getName() + "; ModuleVer:" + mv + "; PkgVer:" + pv;\r
+                            }\r
+                            JOptionPane.showMessageDialog(frame, details);\r
+                        }\r
+                    }\r
+                    \r
+                });\r
 \r
             }\r
             return jTableFpdModules;\r
@@ -2535,7 +2842,7 @@ public class FpdFlash extends IInternalFrame {
         private JButton getJButtonInsert() {\r
             if (jButtonInsert == null) {\r
                 jButtonInsert = new JButton();\r
-                jButtonInsert.setText("<<");\r
+                jButtonInsert.setText("<");\r
                 jButtonInsert.setPreferredSize(new java.awt.Dimension(60,20));\r
                 jButtonInsert.addActionListener(new java.awt.event.ActionListener() {\r
                     public void actionPerformed(java.awt.event.ActionEvent e) {\r
@@ -2545,8 +2852,17 @@ public class FpdFlash extends IInternalFrame {
                         }\r
                         \r
                         int rowInModel = ((TableSorter)jTableFpdModules.getModel()).getModelRowIndex(selectedRowRight);\r
+                        String name = fpdModTableModel.getValueAt(rowInModel, 0)+"";\r
+                        String mg = fpdModTableModel.getValueAt(rowInModel, 1)+"";\r
+                        String mv = fpdModTableModel.getValueAt(rowInModel, 2)+"";\r
+                        String pg = fpdModTableModel.getValueAt(rowInModel, 3)+"";\r
+                        String pv = fpdModTableModel.getValueAt(rowInModel, 4)+"";\r
+                        String arch = fpdModTableModel.getValueAt(rowInModel, 5)+"";\r
+                        String[] row = {name, mg, mv, pg, pv, arch};\r
+                        if (name.length() == 0 || name.equals("N/A")) {\r
+                            return;\r
+                        }\r
                         \r
-                        String[] row = {jTableFpdModules.getValueAt(selectedRowRight, 0)+""};\r
                         int selectedRowLeft = jTableModInFv.getSelectedRow();\r
                         if (selectedRowLeft < 0) {\r
                             modInFvTableModel.addRow(row);\r
@@ -2572,7 +2888,7 @@ public class FpdFlash extends IInternalFrame {
             if (jButtonRemove == null) {\r
                 jButtonRemove = new JButton();\r
                 jButtonRemove.setPreferredSize(new java.awt.Dimension(60,20));\r
-                jButtonRemove.setText(">>");\r
+                jButtonRemove.setText(">");\r
                 jButtonRemove.addActionListener(new java.awt.event.ActionListener() {\r
                     public void actionPerformed(java.awt.event.ActionEvent e) {\r
                         int selectedRowLeft = jTableModInFv.getSelectedRow();\r
@@ -2580,7 +2896,17 @@ public class FpdFlash extends IInternalFrame {
                             return;\r
                         }\r
                         \r
-                        String[] row = {jTableModInFv.getValueAt(selectedRowLeft, 0)+""};\r
+                        String name = modInFvTableModel.getValueAt(selectedRowLeft, 0)+"";\r
+                        String mg = modInFvTableModel.getValueAt(selectedRowLeft, 1)+"";\r
+                        String mv = modInFvTableModel.getValueAt(selectedRowLeft, 2)+"";\r
+                        String pg = modInFvTableModel.getValueAt(selectedRowLeft, 3)+"";\r
+                        String pv = modInFvTableModel.getValueAt(selectedRowLeft, 4)+"";\r
+                        String arch = modInFvTableModel.getValueAt(selectedRowLeft, 5)+"";\r
+                        String[] row = {name, mg, mv, pg, pv, arch};\r
+                        if (name.length() == 0 || name.equals("N/A")) {\r
+                            return;\r
+                        }\r
+                        \r
                         fpdModTableModel.addRow(row);\r
                         int viewIndex = ((TableSorter) jTableFpdModules.getModel()).getViewIndexArray()[jTableFpdModules\r
                                                                                                                         .getRowCount() - 1];\r
@@ -2637,23 +2963,22 @@ public class FpdFlash extends IInternalFrame {
                         //\r
                         Vector<String[]> vModInFv = new Vector<String[]>();\r
                         for (int i = 0; i < jTableModInFv.getRowCount(); ++i) {\r
-                            String moduleName = jTableModInFv.getValueAt(i, 0)+"";\r
-                            if (moduleName.length() == 0) {\r
+                            String moduleName = modInFvTableModel.getValueAt(i, 0)+"";\r
+                            if (moduleName.length() == 0 || moduleName.equals("N/A")) {\r
                                 continue;\r
                             }\r
-                            ModuleIdentification mi = null;\r
-                            Set<String> key = mGuidToModuleId.keySet();\r
-                            Iterator<String> iter = key.iterator();\r
-                            while (iter.hasNext()) {\r
-                                String guid = iter.next();\r
-                                mi = mGuidToModuleId.get(guid);\r
-                                if (mi.getName().equals(moduleName)) {\r
-                                    String[] sa = {guid, WorkspaceProfile.getModuleBaseName(mi)};\r
-                                    vModInFv.add(sa);\r
-                                    ffc.updateFvBindingInModuleSA (mi, title);\r
-                                    break;\r
-                                }\r
-                            }\r
+                            \r
+                            String mg = modInFvTableModel.getValueAt(i, 1)+"";\r
+                            String mv = modInFvTableModel.getValueAt(i, 2)+"";\r
+                            String pg = modInFvTableModel.getValueAt(i, 3)+"";\r
+                            String pv = modInFvTableModel.getValueAt(i, 4)+"";\r
+                            String arch = modInFvTableModel.getValueAt(i, 5)+"";\r
+                           \r
+                            String moduleInfo = mg + " " + mv + " " + pg + " " + pv + " " + arch;\r
+                                \r
+                            String[] sa = { mg, mv, pg, pv, arch};\r
+                            vModInFv.add(sa);\r
+                            ffc.updateFvBindingInModuleSA(moduleInfo, title);\r
                             \r
                         }\r
                         ffc.removeBuildOptionsUserExtensions(title);\r