]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
1. Make SPD editor tables bigger.and table now focus the entry added.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
index e5a4e885744fb5d10a5346ddfe90d80c783ced9a..48573115222c365c4b7df70c77700ad8427d38cc 100644 (file)
@@ -1,6 +1,8 @@
 package org.tianocore.frameworkwizard.platform.ui;\r
 \r
 import java.awt.BorderLayout;\r
+import java.awt.Dimension;\r
+import java.awt.Toolkit;\r
 \r
 import javax.swing.JFrame;\r
 import javax.swing.JOptionPane;\r
@@ -36,6 +38,11 @@ import java.util.Iterator;
 import java.util.ListIterator;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.util.Vector;\r
+\r
+import javax.swing.JTextField;\r
+import java.awt.GridLayout;\r
+import javax.swing.JComboBox;\r
 \r
 public class FpdModuleSA extends JDialog implements ActionListener {\r
 \r
@@ -81,11 +88,35 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private LibraryTableModel model1 = null;\r
     private LibraryTableModel model2 = null;\r
     private LibraryTableModel model3 = null;\r
+    private DefaultTableModel optionsTableModel = null;\r
     private FpdFileContents ffc = null;\r
     private String moduleKey = null;\r
     private HashMap<String, ArrayList<String>> classInstanceMap = null;\r
     private ArrayList<String> classProduced = null;\r
     private HashMap<String, ArrayList<String>> classConsumed = null;\r
+    private JPanel jPanel8 = null;\r
+    private JLabel jLabel6 = null;\r
+    private JTextField jTextField = null;\r
+    private JLabel jLabel7 = null;\r
+    private JTextField jTextField1 = null;\r
+    private JLabel jLabel8 = null;\r
+    private JTextField jTextField2 = null;\r
+    private JScrollPane jScrollPane6 = null;\r
+    private JTable jTable4 = null;\r
+    private JButton jButton4 = null;\r
+    private JButton jButton5 = null;\r
+    private JPanel jPanel9 = null;\r
+    private JPanel jPanel10 = null;\r
+    private JPanel jPanel11 = null;\r
+    private JPanel jPanel12 = null;\r
+    private JLabel jLabel9 = null;\r
+    private JComboBox jComboBox = null;\r
+    private JLabel jLabel10 = null;\r
+    private JTextField jTextField3 = null;\r
+    private JLabel jLabel11 = null;\r
+    private JTextField jTextField4 = null;\r
+    private JButton jButton6 = null;\r
+    private JComboBox jComboBox1 = null;\r
     /**\r
      * This is the default constructor\r
      */\r
@@ -100,26 +131,34 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     \r
     public void setKey(String k){\r
         this.moduleKey = k;\r
+        jTabbedPane.setSelectedIndex(0);\r
+        initPcdBuildDefinition(k);\r
     }\r
 \r
     /**\r
       init will be called each time FpdModuleSA object is to be shown.\r
       @param key Module information.\r
      **/\r
-    public void init(String key) {\r
+    public void initPcdBuildDefinition(String key) {\r
         //\r
         // display pcd for key.\r
         //\r
         model.setRowCount(0);\r
         int pcdCount = ffc.getPcdDataCount(key);\r
         if (pcdCount != 0) {\r
-            String[][] saa = new String[pcdCount][6];\r
+            String[][] saa = new String[pcdCount][7];\r
             ffc.getPcdData(key, saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
                 model.addRow(saa[i]);\r
             }\r
         }\r
-        \r
+    }\r
+    \r
+    public void initLibraries(String key) {\r
+        //\r
+        // display library classes that need to be resolved. also potential instances for them.\r
+        //\r
+        resolveLibraryInstances(key);\r
         //\r
         // display lib instances already selected for key\r
         //\r
@@ -129,17 +168,39 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             String[][] saa = new String[instanceCount][5];\r
             ffc.getLibraryInstances(key, saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
-                if (getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]) != null) {\r
-                    saa[i][0] = getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]).getName();\r
+                ModuleIdentification mi = getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
+                if (mi != null) {\r
+                    saa[i][0] = mi.getName();\r
+                    saa[i][2] = mi.getVersion();\r
+                    saa[i][4] = mi.getPackage().getVersion();\r
+                    //\r
+                    // re-evaluate lib instance usage when adding a already-selected lib instance.\r
+                    //\r
+                    resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
+                    model1.addRow(saa[i]);\r
                 }\r
                 \r
-                model1.addRow(saa[i]);\r
+                \r
             }\r
         }\r
+    }\r
+    \r
+    public void initModuleSAOptions(String key) {\r
         //\r
-        // display library classes that need to be resolved. also potential instances for them.\r
+        // display module SA options\r
         //\r
-        resolveLibraryInstances(key);\r
+        String fvBinding = ffc.getFvBinding(key);\r
+        if (fvBinding != null) {\r
+            jTextField.setText(fvBinding);\r
+        }\r
+        String fileGuid = ffc.getFfsFileNameGuid(key);\r
+        if (fileGuid != null) {\r
+            jTextField1.setText(fileGuid);\r
+        }\r
+        String ffsKey = ffc.getFfsFormatKey(key);\r
+        if (ffsKey != null) {\r
+            jTextField2.setText(ffsKey);\r
+        }\r
     }\r
     \r
     private void resolveLibraryInstances(String key) {\r
@@ -255,7 +316,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         //\r
         // remove pcd information of instance from current ModuleSA\r
         //\r
-        ffc.removePcdDataFromLibraryInstance(moduleKey, key);\r
+        ffc.removePcdData(moduleKey, mi);\r
         //\r
         // remove class produced by this instance and add back these produced class to be bound.\r
         //\r
@@ -296,14 +357,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         \r
         while(ispi.hasNext()) {\r
             PackageIdentification pi = (PackageIdentification)ispi.next();\r
-            if ( !pi.getGuid().equals(keyPart[2]) || !pi.getVersion().equals(keyPart[3])){\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]) && mi.getVersion().equals(keyPart[1])){\r
+                if (mi.getGuid().equals(keyPart[0])){\r
+//                                && mi.getVersion().equals(keyPart[1])){\r
                     return mi;\r
                 }\r
             }\r
@@ -368,6 +431,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private void initialize() {\r
         this.setSize(664, 515);\r
+        this.centerWindow();\r
         this.setModal(true);\r
         this.setTitle("Module Settings");\r
         this.setContentPane(getJContentPane());\r
@@ -397,6 +461,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         if (jTabbedPane == null) {\r
             jTabbedPane = new JTabbedPane();\r
             jTabbedPane.addTab("PCD Build Definition", null, getJPanel(), null);\r
+            jTabbedPane.addTab("Module SA Options", null, getJPanel8(), null);\r
             jTabbedPane.addTab("Libraries", null, getJPanel1(), null);\r
         }\r
         return jTabbedPane;\r
@@ -418,7 +483,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);\r
             jPanel.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
-                    init(moduleKey);\r
+                    initPcdBuildDefinition(moduleKey);\r
                 }\r
             });\r
             \r
@@ -440,6 +505,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             jPanel1.add(getJPanel7(), java.awt.BorderLayout.CENTER);\r
             jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
+                    initLibraries(moduleKey);\r
                 }\r
             });\r
         }\r
@@ -468,10 +534,13 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         if (jTable == null) {\r
             model = new PartialEditableTableModel();\r
             jTable = new JTable(model);\r
+            jTable.setRowHeight(20);\r
+            jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
             model.addColumn("CName");\r
             model.addColumn("TokenSpaceGUID");\r
             model.addColumn("ItemType");\r
             model.addColumn("Token");\r
+            model.addColumn("MaxDatumSize");\r
             model.addColumn("DataType");\r
             model.addColumn("DefaultValue");\r
                         \r
@@ -487,26 +556,69 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         return;\r
                     }\r
                     else{\r
-//                        int selectedRow = lsm.getMinSelectionIndex();\r
-                        \r
+                        int selectedRow = lsm.getMinSelectionIndex();\r
+                        String cName = jTable.getValueAt(selectedRow, 0)+"";\r
+                        String[] pcdInfo = {"", ""};\r
+                        getPcdInfo(cName, pcdInfo);\r
+                        jTextArea.setText(pcdInfo[0]);\r
+                        initComboBox(pcdInfo[1]);\r
+                        jComboBox.setSelectedItem(pcdInfo[1]);\r
+                        jTextField3.setEnabled(true);\r
+                        jTextField3.setVisible(true);\r
+                        jTextField3.setText(jTable.getValueAt(selectedRow, 4)+"");\r
+                        jTextField4.setEnabled(true);\r
+                        jTextField4.setText(jTable.getValueAt(selectedRow, 6)+"");\r
+                        if (jTable.getValueAt(selectedRow, 5).equals("VOID*")) {\r
+                            if (pcdInfo[1].equals("FEATURE_FLAG")) {\r
+                                jTextField3.setVisible(false);\r
+                            }\r
+                            else if (pcdInfo[1].equals("FIXED_AT_BUILD")) {\r
+                                try{\r
+                                    jTextField3.setEnabled(false);\r
+                                    jTextField3.setText(ffc.setMaxSizeForPointer(jTable.getValueAt(selectedRow, 6)+"")+"");\r
+                                }\r
+                                catch(Exception except){\r
+                                    JOptionPane.showMessageDialog(frame, "Unacceptable PCD Value: " + except.getMessage());\r
+                                }\r
+                            }\r
+                            else{\r
+                                jTextField3.setText(jTable.getValueAt(selectedRow, 4)+"");\r
+                            }\r
+                        }\r
+                        else {\r
+                            jTextField3.setEnabled(false);\r
+                        }\r
                         \r
+                        if (!jTable.getValueAt(selectedRow, 2).equals("DYNAMIC") && !jTable.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) {\r
+                            jTextField4.setText(jTable.getValueAt(selectedRow, 6)+"");\r
+                            if (jTable.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){\r
+                                jTextField4.setVisible(false);\r
+                                jComboBox1.setVisible(true);\r
+                                jComboBox1.setSelectedItem(jTable.getValueAt(selectedRow, 6)+"");\r
+                            }\r
+                            else{\r
+                                jTextField4.setVisible(true);\r
+                                jTextField4.setEnabled(true);\r
+                                jComboBox1.setVisible(false);\r
+                            }\r
+                        }\r
+                        else{\r
+                            jTextField4.setEnabled(false);\r
+                        }\r
                     }\r
+                    \r
+                    \r
                 }\r
             });\r
             \r
             jTable.getModel().addTableModelListener(new TableModelListener() {\r
                 public void tableChanged(TableModelEvent arg0) {\r
                     // TODO Auto-generated method stub\r
-                    int row = arg0.getFirstRow();\r
-                    TableModel m = (TableModel)arg0.getSource();\r
-                    if (arg0.getType() == TableModelEvent.INSERT) {\r
-                        //\r
-                        // Set combo box values for item type according to pcd values added.\r
-                        //\r
-                        \r
-                    }\r
+//                    int row = arg0.getFirstRow();\r
+//                    TableModel m = (TableModel)arg0.getSource();\r
+                    \r
                     if (arg0.getType() == TableModelEvent.UPDATE){\r
-                        //ToDo Data Validition check.\r
+                        //update xml doc here.\r
                         \r
                     }\r
                 }\r
@@ -514,6 +626,38 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         }\r
         return jTable;\r
     }\r
+    \r
+    private void initComboBox(String originalType) {\r
+        jComboBox.removeAllItems();\r
+        jComboBox.addItem(originalType);\r
+        if (originalType.equals("PATCHABLE_IN_MODULE")) {\r
+            jComboBox.addItem("FIXED_AT_BUILD");\r
+        }\r
+        if (originalType.equals("DYNAMIC")) {\r
+            jComboBox.addItem("FIXED_AT_BUILD");\r
+            jComboBox.addItem("PATCHABLE_IN_MODULE");\r
+        }\r
+    }\r
+    \r
+    private void getPcdInfo(String cName, String[] sa) {\r
+        String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5];\r
+        ffc.getLibraryInstances(moduleKey, saa);\r
+        \r
+        try{\r
+            if (ffc.getPcdBuildDataInfo(getModuleId(moduleKey), cName, sa)) {\r
+                return;\r
+            }\r
+            for (int j = 0; j < saa.length; ++j) {\r
+                if (ffc.getPcdBuildDataInfo(getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),\r
+                                            cName, sa)) {\r
+                    return;\r
+                }\r
+            }\r
+        }\r
+        catch(Exception e) {\r
+            JOptionPane.showMessageDialog(this, "Get PCD details fail: " + e.getMessage());\r
+        }\r
+    }\r
 \r
     /**\r
      * This method initializes jPanel2 \r
@@ -525,8 +669,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             jLabel5 = new JLabel();\r
             jLabel5.setText("PCD Description");\r
             jPanel2 = new JPanel();\r
+            jPanel2.setPreferredSize(new java.awt.Dimension(607,200));\r
             jPanel2.add(jLabel5, null);\r
             jPanel2.add(getJScrollPane1(), null);\r
+            jPanel2.add(getJPanel9(), null);\r
         }\r
         return jPanel2;\r
     }\r
@@ -651,26 +797,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             model1.addColumn("PackageGUID");\r
             model1.addColumn("PackageVersion");\r
             jTable1 = new JTable(model1);\r
-            \r
+            jTable1.setRowHeight(20);\r
+            jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
             jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
-                public void valueChanged(ListSelectionEvent e) {\r
-                    int selectedRow1 = -1;\r
-                    if (e.getValueIsAdjusting()){\r
-                        return;\r
-                    }\r
-                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
-                    if (lsm.isSelectionEmpty()) {\r
-                        return;\r
-                    }\r
-                    else{\r
-                        selectedRow1 = lsm.getMinSelectionIndex();\r
-                        \r
-                        \r
-                    }\r
-                }\r
-            });\r
-            \r
             \r
         }\r
         return jTable1;\r
@@ -700,7 +829,8 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             model2 = new LibraryTableModel();\r
             model2.addColumn("LibraryClass");\r
             jTable2 = new JTable(model2);\r
-            \r
+            jTable2.setRowHeight(20);\r
+            jTable2.setShowGrid(false);\r
             jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
@@ -772,25 +902,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             model3.addColumn("PackageGUID");\r
             model3.addColumn("PackageVersion");\r
             jTable3 = new JTable(model3);\r
-            \r
+            jTable3.setRowHeight(20);\r
+            jTable3.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
             jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
-                public void valueChanged(ListSelectionEvent e) {\r
-                    int selectedRow3 = -1;\r
-                    if (e.getValueIsAdjusting()){\r
-                        return;\r
-                    }\r
-                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
-                    if (lsm.isSelectionEmpty()) {\r
-                        return;\r
-                    }\r
-                    else{\r
-                        selectedRow3 = lsm.getMinSelectionIndex();\r
-                        \r
-                        \r
-                    }\r
-                }\r
-            });\r
+            \r
         }\r
         return jTable3;\r
     }\r
@@ -880,11 +995,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                     model3.getValueAt(row, 2) + " " +\r
                     model3.getValueAt(row, 3) + " " +\r
                     model3.getValueAt(row, 4);\r
+                    ffc.genLibraryInstance(model3.getValueAt(row, 1)+"", model3.getValueAt(row, 2)+"", model3.getValueAt(row, 3)+"", model3.getValueAt(row, 4)+"", moduleKey);\r
                     //\r
                     // Add pcd information of selected instance to current moduleSA\r
                     //\r
-                    ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey));\r
-                    \r
+                    try{\r
+                        ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey));\r
+                    }\r
+                    catch (Exception exception) {\r
+                        JOptionPane.showMessageDialog(frame, "PCD Insertion Fail. " + exception.getMessage());\r
+                    }\r
                     resolveLibraryInstances(instanceValue);\r
                 }\r
             });\r
@@ -912,6 +1032,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                                    model1.getValueAt(row, 2) + " " +\r
                                    model1.getValueAt(row, 3) + " " +\r
                                    model1.getValueAt(row, 4));\r
+                    ffc.removeLibraryInstance(moduleKey, row);\r
                     model1.removeRow(row);\r
                     \r
                 }\r
@@ -952,17 +1073,453 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     public void actionPerformed(ActionEvent arg0) {\r
 \r
         if (arg0.getSource() == jButton2) {\r
-            ffc.removeLibraryInstances(moduleKey);\r
-            for (int i = 0; i < model1.getRowCount(); ++i) {\r
-                String mg = model1.getValueAt(i, 1)+"";\r
-                String mv = model1.getValueAt(i, 2)+"";\r
-                String pg = model1.getValueAt(i, 3)+"";\r
-                String pv = model1.getValueAt(i, 4)+"";\r
-                ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey);\r
-            }\r
+//            ffc.removeLibraryInstances(moduleKey);\r
+//            for (int i = 0; i < model1.getRowCount(); ++i) {\r
+//                String mg = model1.getValueAt(i, 1)+"";\r
+//                String mv = model1.getValueAt(i, 2)+"";\r
+//                String pg = model1.getValueAt(i, 3)+"";\r
+//                String pv = model1.getValueAt(i, 4)+"";\r
+//                ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey);\r
+//            }\r
             this.setVisible(false);\r
         }\r
     }\r
+    /**\r
+     * This method initializes jPanel8 \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanel8() {\r
+        if (jPanel8 == null) {\r
+            jLabel8 = new JLabel();\r
+            jLabel8.setText("FFS Format Key");\r
+            jLabel7 = new JLabel();\r
+            jLabel7.setText("FFS File GUID");\r
+            jLabel6 = new JLabel();\r
+            jLabel6.setText("FV Binding");\r
+            jPanel8 = new JPanel();\r
+            jPanel8.add(jLabel6, null);\r
+            jPanel8.add(getJTextField(), null);\r
+            jPanel8.add(jLabel7, null);\r
+            jPanel8.add(getJTextField1(), null);\r
+            jPanel8.add(jLabel8, null);\r
+            jPanel8.add(getJTextField2(), null);\r
+            jPanel8.add(getJScrollPane6(), null);\r
+            jPanel8.add(getJButton4(), null);\r
+            jPanel8.add(getJButton5(), null);\r
+            jPanel8.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+                public void componentShown(java.awt.event.ComponentEvent e) {\r
+                    initModuleSAOptions(moduleKey);\r
+                }\r
+            });\r
+        }\r
+        return jPanel8;\r
+    }\r
+    /**\r
+     * This method initializes jTextField      \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextField() {\r
+        if (jTextField == null) {\r
+            jTextField = new JTextField();\r
+            jTextField.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextField.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    ffc.setFvBinding(moduleKey, jTextField.getText());\r
+                }\r
+            });\r
+        }\r
+        return jTextField;\r
+    }\r
+    /**\r
+     * This method initializes jTextField1     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextField1() {\r
+        if (jTextField1 == null) {\r
+            jTextField1 = new JTextField();\r
+            jTextField1.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    ffc.setFfsFileNameGuid(moduleKey, jTextField1.getText());\r
+                }\r
+            });\r
+        }\r
+        return jTextField1;\r
+    }\r
+    /**\r
+     * This method initializes jTextField2     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextField2() {\r
+        if (jTextField2 == null) {\r
+            jTextField2 = new JTextField();\r
+            jTextField2.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextField2.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    ffc.setFfsFormatKey(moduleKey, jTextField2.getText());\r
+                }\r
+            });\r
+        }\r
+        return jTextField2;\r
+    }\r
+    /**\r
+     * This method initializes jScrollPane6    \r
+     *         \r
+     * @return javax.swing.JScrollPane \r
+     */\r
+    private JScrollPane getJScrollPane6() {\r
+        if (jScrollPane6 == null) {\r
+            jScrollPane6 = new JScrollPane();\r
+            jScrollPane6.setPreferredSize(new java.awt.Dimension(600,200));\r
+            jScrollPane6.setViewportView(getJTable4());\r
+        }\r
+        return jScrollPane6;\r
+    }\r
+    /**\r
+     * This method initializes jTable4 \r
+     *         \r
+     * @return javax.swing.JTable      \r
+     */\r
+    private JTable getJTable4() {\r
+        if (jTable4 == null) {\r
+            optionsTableModel = new DefaultTableModel();\r
+            optionsTableModel.addColumn("BuildTargets");\r
+            optionsTableModel.addColumn("ToolChainFamily");\r
+            optionsTableModel.addColumn("TagName");\r
+            optionsTableModel.addColumn("ToolCode");\r
+            optionsTableModel.addColumn("SupportedArchs");\r
+            optionsTableModel.addColumn("Contents");\r
+            jTable4 = new JTable(optionsTableModel);\r
+            jTable4.setRowHeight(20);\r
+            Vector<String> vArch = new Vector<String>();\r
+            vArch.add("IA32");\r
+            vArch.add("X64");\r
+            vArch.add("IPF");\r
+            vArch.add("EBC");\r
+            vArch.add("ARM");\r
+            vArch.add("PPC");\r
+            jTable4.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));\r
+            jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+                       jTable4.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+            jTable4.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    int row = arg0.getFirstRow();\r
+                    TableModel m = (TableModel)arg0.getSource();\r
+                    \r
+                    if (arg0.getType() == TableModelEvent.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String targets = m.getValueAt(row, 0) + "";\r
+                        Vector<Object> targetName = null;\r
+                        if (targets.length() > 0) {\r
+                            targetName = new Vector<Object>();\r
+                            String[] sArray = targets.split(" ");\r
+                            for (int i = 0; i < sArray.length; ++i) {\r
+                                targetName.add(sArray[i]);\r
+                            }\r
+                        }\r
+                        \r
+                        String toolChain = m.getValueAt(row, 1) + "";\r
+                        String tagName = m.getValueAt(row, 2) + "";\r
+                        String toolCode = m.getValueAt(row, 3) + "";\r
+                        String archs = m.getValueAt(row, 4) + "";\r
+                        Vector<Object> supArch = null;\r
+                        if (archs.length() > 0) {\r
+                            supArch = new Vector<Object>();\r
+                            String[] sArray1 = archs.split(" ");\r
+                            for (int i = 0; i < sArray1.length; ++i) {\r
+                                supArch.add(sArray1[i]);\r
+                            }\r
+                        }\r
+                        \r
+                        String contents = m.getValueAt(row, 5) + "";\r
+                        \r
+                        ffc.updateModuleSAOptionsOpt(moduleKey, row, targetName, toolChain, tagName, toolCode, supArch, contents);\r
+                    }\r
+                }\r
+            });\r
+        }\r
+        return jTable4;\r
+    }\r
+    /**\r
+     * This method initializes jButton4        \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButton4() {\r
+        if (jButton4 == null) {\r
+            jButton4 = new JButton();\r
+            jButton4.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton4.setText("New");\r
+            jButton4.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    String[] row = {"", "", "", "", "IA32", ""};\r
+                    optionsTableModel.addRow(row);\r
+                    Vector<Object> v = new Vector<Object>();\r
+                    Vector<Object> v1 = new Vector<Object>();\r
+                    v1.add("IA32");\r
+                    ffc.genModuleSAOptionsOpt(moduleKey, v, "", "", "", v1, "");\r
+                }\r
+            });\r
+        }\r
+        return jButton4;\r
+    }\r
+    /**\r
+     * This method initializes jButton5        \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButton5() {\r
+        if (jButton5 == null) {\r
+            jButton5 = new JButton();\r
+            jButton5.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton5.setText("Delete");\r
+            jButton5.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable4.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    \r
+                    ffc.removeModuleSAOptionsOpt(moduleKey, jTable4.getSelectedRow());\r
+                    optionsTableModel.removeRow(jTable4.getSelectedRow());\r
+                }\r
+            });\r
+        }\r
+        return jButton5;\r
+    }\r
+    \r
+    /**\r
+    Start the window at the center of screen\r
+    \r
+    **/\r
+   protected void centerWindow(int intWidth, int intHeight) {\r
+       Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
+       this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
+   }\r
+\r
+   /**\r
+    Start the window at the center of screen\r
+    \r
+    **/\r
+   protected void centerWindow() {\r
+       centerWindow(this.getSize().width, this.getSize().height);\r
+   }\r
+/**\r
+ * This method initializes jPanel9     \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanel9() {\r
+    if (jPanel9 == null) {\r
+        GridLayout gridLayout = new GridLayout();\r
+        gridLayout.setRows(3);\r
+        gridLayout.setColumns(2);\r
+        jPanel9 = new JPanel();\r
+        jPanel9.setLayout(gridLayout);\r
+        jPanel9.setPreferredSize(new java.awt.Dimension(600,90));\r
+        jPanel9.add(getJPanel12(), null);\r
+        jPanel9.add(getJPanel10(), null);\r
+        jPanel9.add(getJPanel11(), null);\r
+    }\r
+    return jPanel9;\r
+}\r
+/**\r
+ * This method initializes jPanel10    \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanel10() {\r
+    if (jPanel10 == null) {\r
+        FlowLayout flowLayout2 = new FlowLayout();\r
+        flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);\r
+        jLabel10 = new JLabel();\r
+        jLabel10.setText("Max Datum Size");\r
+        jPanel10 = new JPanel();\r
+        jPanel10.setLayout(flowLayout2);\r
+        jPanel10.add(jLabel10, null);\r
+        jPanel10.add(getJTextField3(), null);\r
+    }\r
+    return jPanel10;\r
+}\r
+/**\r
+ * This method initializes jPanel11    \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanel11() {\r
+    if (jPanel11 == null) {\r
+        FlowLayout flowLayout3 = new FlowLayout();\r
+        flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);\r
+        jLabel11 = new JLabel();\r
+        jLabel11.setText("Default Value");\r
+        jLabel11.setPreferredSize(new java.awt.Dimension(91,16));\r
+        jPanel11 = new JPanel();\r
+        jPanel11.setLayout(flowLayout3);\r
+        jPanel11.add(jLabel11, null);\r
+        jPanel11.add(getJTextField4(), null);\r
+        jPanel11.add(getJComboBox1(), null);\r
+    }\r
+    return jPanel11;\r
+}\r
+/**\r
+ * This method initializes jPanel12    \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanel12() {\r
+    if (jPanel12 == null) {\r
+        FlowLayout flowLayout1 = new FlowLayout();\r
+        flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);\r
+        jLabel9 = new JLabel();\r
+        jLabel9.setText("Item Type");\r
+        jLabel9.setPreferredSize(new java.awt.Dimension(91,16));\r
+        jPanel12 = new JPanel();\r
+        jPanel12.setLayout(flowLayout1);\r
+        jPanel12.add(jLabel9, null);\r
+        jPanel12.add(getJComboBox(), null);\r
+        jPanel12.add(getJButton6(), null);\r
+    }\r
+    return jPanel12;\r
+}\r
+/**\r
+ * This method initializes jComboBox   \r
+ *     \r
+ * @return javax.swing.JComboBox       \r
+ */\r
+private JComboBox getJComboBox() {\r
+    if (jComboBox == null) {\r
+        jComboBox = new JComboBox();\r
+        jComboBox.setPreferredSize(new java.awt.Dimension(200,20));\r
+        jComboBox.addItemListener(new java.awt.event.ItemListener() {\r
+            public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                int row = jTable.getSelectedRow();\r
+                if (row < 0 || jTable.getValueAt(row, 2).equals(jComboBox.getSelectedItem())) {\r
+                    return;\r
+                }\r
+                if (jComboBox.getItemCount() == 3) {\r
+                    if (!jComboBox.getSelectedItem().equals("DYNAMIC")) {\r
+                        pcdDynamicToNonDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+"");\r
+                    }\r
+                    else{\r
+                        pcdNonDynamicToDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+"");\r
+                    }\r
+                }\r
+            }\r
+        });\r
+    }\r
+    return jComboBox;\r
+}\r
+\r
+private void pcdDynamicToNonDynamic(String cName, String tsGuid) {\r
+    String[][] saa = new String[ffc.getDynamicPcdBuildDataCount()][5];\r
+    ffc.getDynamicPcdBuildData(saa);\r
+    String maxSize = "";\r
+    String value = "";\r
+    for (int i = 0; i < saa.length; ++i) {\r
+        if (saa[i][0].equals(cName) && saa[i][2].equals(tsGuid)) {\r
+            maxSize = saa[i][3];\r
+            value = ffc.getDynamicPcdBuildDataValue(i);\r
+            break;\r
+        }\r
+    }\r
+    \r
+    ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+    for (int i = 0; i < al.size(); ++i) {\r
+        String[] s = al.get(i).split(" ");\r
+        String mKey = s[0] + s[1] + s[2] + s[3];\r
+        ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", maxSize, value);\r
+        s[4] = jComboBox.getSelectedItem()+"";\r
+        al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]);\r
+    }\r
+    \r
+    ffc.removeDynamicPcdBuildData(cName, tsGuid);\r
+}\r
+\r
+private void pcdNonDynamicToDynamic(String cName, String tsGuid) {\r
+    ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+    for (int i = 0; i < al.size(); ++i) {\r
+        String[] s = al.get(i).split(" ");\r
+        String mKey = s[0] + s[1] + s[2] + s[3];\r
+        ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", jTextField3.getText(), jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+"");\r
+        s[4] = jComboBox.getSelectedItem()+"";\r
+        al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]);\r
+    }\r
+    try{\r
+        ffc.addDynamicPcdBuildData(cName, jTable.getValueAt(jTable.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTable.getValueAt(jTable.getSelectedRow(), 5)+"", jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+"");\r
+    }\r
+    catch(Exception e){\r
+        JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage());\r
+    }\r
+}\r
+/**\r
+ * This method initializes jTextField3 \r
+ *     \r
+ * @return javax.swing.JTextField      \r
+ */\r
+private JTextField getJTextField3() {\r
+    if (jTextField3 == null) {\r
+        jTextField3 = new JTextField();\r
+        jTextField3.setPreferredSize(new java.awt.Dimension(200,20));\r
+    }\r
+    return jTextField3;\r
+}\r
+/**\r
+ * This method initializes jTextField4 \r
+ *     \r
+ * @return javax.swing.JTextField      \r
+ */\r
+private JTextField getJTextField4() {\r
+    if (jTextField4 == null) {\r
+        jTextField4 = new JTextField();\r
+        jTextField4.setPreferredSize(new java.awt.Dimension(200,20));\r
+    }\r
+    return jTextField4;\r
+}\r
+/**\r
+ * This method initializes jButton6    \r
+ *     \r
+ * @return javax.swing.JButton \r
+ */\r
+private JButton getJButton6() {\r
+    if (jButton6 == null) {\r
+        jButton6 = new JButton();\r
+        jButton6.setPreferredSize(new java.awt.Dimension(150,20));\r
+        jButton6.setText("Update PCD Data");\r
+        jButton6.addActionListener(new java.awt.event.ActionListener() {\r
+            public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                int row = jTable.getSelectedRow();\r
+                if (row < 0) {\r
+                    return;\r
+                }\r
+                model.setValueAt(jComboBox.getSelectedItem(), row, 2);\r
+                model.setValueAt(jTextField3.getText(), row, 4);\r
+                model.setValueAt(jTextField4.isVisible()? jTextField4.getText():jComboBox1.getSelectedItem(), row, 6);\r
+                ffc.updatePcdData(moduleKey, model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");\r
+            }\r
+        });\r
+    }\r
+    return jButton6;\r
+}\r
+/**\r
+ * This method initializes jComboBox1  \r
+ *     \r
+ * @return javax.swing.JComboBox       \r
+ */\r
+private JComboBox getJComboBox1() {\r
+    if (jComboBox1 == null) {\r
+        jComboBox1 = new JComboBox();\r
+        jComboBox1.setPreferredSize(new java.awt.Dimension(100,20));\r
+        jComboBox1.setVisible(false);\r
+        jComboBox1.addItem("true");\r
+        jComboBox1.addItem("false");\r
+    }\r
+    return jComboBox1;\r
+}\r
+\r
 \r
 }  //  @jve:decl-index=0:visual-constraint="10,10"\r
 \r
@@ -975,7 +1532,7 @@ class PartialEditableTableModel extends DefaultTableModel {
     public boolean isCellEditable(int row, int col) {\r
         switch (col){\r
         case 2:\r
-            return true;\r
+            return false;\r
         default:\r
             return false; \r
         }\r