]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdBuildOptions.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 / FpdBuildOptions.java
index 60780744d10b9056d3d41a10826a5dfd15cc6da6..f273d8db66718e16d2ff1324a609386a446ed145 100644 (file)
 package org.tianocore.frameworkwizard.platform.ui;\r
 \r
 import java.awt.BorderLayout;\r
-import java.awt.Dimension;\r
 \r
 import javax.swing.JPanel;\r
-import javax.swing.JDialog;\r
 import javax.swing.JTabbedPane;\r
 import javax.swing.JCheckBox;\r
 import javax.swing.JLabel;\r
@@ -26,36 +24,43 @@ import java.awt.FlowLayout;
 import javax.swing.AbstractAction;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
-import java.awt.event.ItemEvent;\r
-import java.awt.event.ItemListener;\r
 \r
-import javax.swing.ButtonGroup;\r
 import javax.swing.DefaultCellEditor;\r
-import javax.swing.DefaultListModel;\r
+import javax.swing.JFileChooser;\r
+import javax.swing.JFrame;\r
+import javax.swing.JOptionPane;\r
 import javax.swing.JTextField;\r
 import javax.swing.JButton;\r
 import javax.swing.JScrollPane;\r
 import javax.swing.JTable;\r
 import javax.swing.JComboBox;\r
-import javax.swing.JRadioButton;\r
 import javax.swing.ListSelectionModel;\r
+import javax.swing.event.InternalFrameAdapter;\r
+import javax.swing.event.InternalFrameEvent;\r
 import javax.swing.event.ListSelectionEvent;\r
 import javax.swing.event.ListSelectionListener;\r
 import javax.swing.event.TableModelEvent;\r
 import javax.swing.event.TableModelListener;\r
 import javax.swing.table.DefaultTableModel;\r
-import javax.swing.table.TableColumn;\r
 import javax.swing.table.TableModel;\r
-import javax.swing.JList;\r
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.frameworkwizard.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
-import java.awt.CardLayout;\r
-import javax.swing.JTree;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.LinkedHashMap;\r
+import java.util.Set;\r
+import java.util.Vector;\r
+import java.awt.Dimension;\r
 \r
 public class FpdBuildOptions extends IInternalFrame {\r
 \r
     private static final long serialVersionUID = 1L;\r
+    static JFrame frame;\r
     private JPanel jContentPane = null;\r
     private JPanel jPanel = null;\r
     private JPanel jPanel1 = null;\r
@@ -66,29 +71,23 @@ public class FpdBuildOptions extends IInternalFrame {
     private JPanel jPanel9 = null;\r
     private JPanel jPanel10 = null;\r
     private JPanel jPanel11 = null;\r
-    private JRadioButton jRadioButton = null;\r
     private JTextField jTextField2 = null;\r
     private JLabel jLabel3 = null;\r
     private JTextField jTextField3 = null;\r
     private JButton jButton4 = null;\r
     private JButton jButton5 = null;\r
-    private JRadioButton jRadioButton1 = null;\r
-    private JLabel jLabel4 = null;\r
     private JTextField jTextField4 = null;\r
     private JScrollPane jScrollPane2 = null;\r
     private JTable jTable2 = null;\r
-    private DefaultTableModel fileNameTableModel = null;\r
-    private DefaultTableModel imageEntryPointTableModel = null;\r
-    private DefaultTableModel outputDirectoryTableModel = null;\r
+    private DefaultTableModel ffsTableModel = null;\r
+    private DefaultTableModel sectionsTableModel = null;\r
+    private DefaultTableModel sectionTableModel = null;\r
+    private DefaultTableModel subsectionsTableModel = null;\r
     private DefaultTableModel antTaskTableModel = null;\r
     private DefaultTableModel ffsAttributesTableModel = null;\r
     private DefaultTableModel optionsTableModel = null;\r
     private JPanel jPanel13 = null;\r
-    private JPanel jPanel14 = null;\r
     private JPanel jPanel18 = null;\r
-    private JScrollPane jScrollPane4 = null;\r
-    private JLabel jLabel6 = null;\r
-    private JList jList = null;\r
     private JPanel jPanel15 = null;\r
     private JPanel jPanel16 = null;\r
     private JPanel jPanel17 = null;\r
@@ -96,7 +95,6 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTextField jTextField6 = null;\r
     private JButton jButton8 = null;\r
     private JButton jButton9 = null;\r
-    private JCheckBox jCheckBox5 = null;\r
     private JScrollPane jScrollPane5 = null;\r
     private JTable jTable4 = null;\r
     private JPanel jPanel19 = null;\r
@@ -112,30 +110,10 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTable jTable5 = null;\r
     private JButton jButton10 = null;\r
     private JButton jButton11 = null;\r
-    private JPanel jPanel21 = null;\r
-    private JButton jButton12 = null;\r
-    private JButton jButton13 = null;\r
-    private JLabel jLabel8 = null;\r
-    private JTextField jTextField9 = null;\r
-    private JLabel jLabel13 = null;\r
-    private JTextField jTextField10 = null;\r
-    private JPanel jPanel22 = null;\r
-    private JCheckBox jCheckBox6 = null;\r
-    private JComboBox jComboBox4 = null;\r
-    private JCheckBox jCheckBox7 = null;\r
-    private JComboBox jComboBox5 = null;\r
-    private JCheckBox jCheckBox8 = null;\r
-    private JTextField jTextField11 = null;\r
-    private JButton jButton14 = null;\r
-    private JButton jButton15 = null;\r
-    private JButton jButton16 = null;\r
-    private DefaultListModel listModel = new DefaultListModel();\r
-    private JScrollPane jScrollPane7 = null;\r
-    private JTree jTree = null;\r
     private JButton jButton17 = null;\r
     private JButton jButton18 = null;\r
     private FpdFileContents ffc = null;\r
-    private JButton jButton19 = null;\r
+    private OpeningPlatformType docConsole = null;\r
     private JCheckBox jCheckBox9 = null;\r
     private JCheckBox jCheckBox10 = null;\r
     private JCheckBox jCheckBox11 = null;\r
@@ -147,6 +125,31 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTextField jTextField13 = null;\r
     private JLabel jLabel15 = null;\r
     private int selectedRow = -1;\r
+    private JLabel jLabel = null;\r
+    private JLabel jLabel1 = null;\r
+    private JScrollPane jScrollPane = null;\r
+    private JTable jTable = null;\r
+    private JLabel jLabel2 = null;\r
+    private JScrollPane jScrollPane1 = null;\r
+    private JTable jTable1 = null;\r
+    private JLabel jLabel4 = null;\r
+    private JScrollPane jScrollPane3 = null;\r
+    private JTable jTable3 = null;\r
+    private JLabel jLabel5 = null;\r
+    private JTextField jTextField = null;\r
+    private JPanel jPanel4 = null;\r
+    private JLabel jLabel6 = null;\r
+    private JButton jButton = null;\r
+    private JButton jButton1 = null;\r
+    private JButton jButton2 = null;\r
+    private JButton jButton3 = null;\r
+    private JLabel jLabel8 = null;\r
+    private JButton jButton6 = null;\r
+    private JButton jButton7 = null;\r
+    private JScrollPane jScrollPane4 = null;\r
+    private JTable jTable6 = null;\r
+    private JButton jButton12 = null;\r
+    private JTextField jTextField1 = null;\r
     /**\r
      * This method initializes jPanel  \r
      *         \r
@@ -223,9 +226,7 @@ public class FpdBuildOptions extends IInternalFrame {
             jPanel8.add(getJPanel9(), java.awt.BorderLayout.NORTH);\r
             jPanel8.add(getJPanel10(), java.awt.BorderLayout.SOUTH);\r
             jPanel8.add(getJPanel11(), java.awt.BorderLayout.CENTER);\r
-            ButtonGroup bg = new ButtonGroup();\r
-            bg.add(jRadioButton);\r
-            bg.add(jRadioButton1);\r
+\r
         }\r
         return jPanel8;\r
     }\r
@@ -237,18 +238,20 @@ public class FpdBuildOptions extends IInternalFrame {
      */\r
     private JPanel getJPanel9() {\r
         if (jPanel9 == null) {\r
+            jLabel = new JLabel();\r
+            jLabel.setText("ANT Task File");\r
+            jLabel.setPreferredSize(new java.awt.Dimension(80,20));\r
             FlowLayout flowLayout8 = new FlowLayout();\r
             flowLayout8.setAlignment(java.awt.FlowLayout.LEFT);\r
             jLabel3 = new JLabel();\r
             jLabel3.setText("ID");\r
             jPanel9 = new JPanel();\r
             jPanel9.setLayout(flowLayout8);\r
-            jPanel9.add(getJRadioButton(), null);\r
+            jPanel9.add(jLabel, null);\r
             jPanel9.add(getJTextField2(), null);\r
+            jPanel9.add(getJButton12(), null);\r
             jPanel9.add(jLabel3, null);\r
             jPanel9.add(getJTextField3(), null);\r
-            jPanel9.add(getJButton4(), null);\r
-            jPanel9.add(getJButton5(), null);\r
         }\r
         return jPanel9;\r
     }\r
@@ -272,43 +275,23 @@ public class FpdBuildOptions extends IInternalFrame {
      */\r
     private JPanel getJPanel11() {\r
         if (jPanel11 == null) {\r
+            jLabel1 = new JLabel();\r
+            jLabel1.setText("ANT Command Options");\r
+            jLabel1.setPreferredSize(new java.awt.Dimension(131,20));\r
             FlowLayout flowLayout3 = new FlowLayout();\r
             flowLayout3.setHgap(5);\r
             flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);\r
-            jLabel4 = new JLabel();\r
-            jLabel4.setText("Execution Order");\r
-            jLabel4.setEnabled(false);\r
-            jLabel4.setPreferredSize(new java.awt.Dimension(100,16));\r
             jPanel11 = new JPanel();\r
             jPanel11.setLayout(flowLayout3);\r
-            jPanel11.add(getJRadioButton1(), null);\r
-            jPanel11.add(jLabel4, null);\r
+            jPanel11.add(jLabel1, null);\r
             jPanel11.add(getJTextField4(), null);\r
+            jPanel11.add(getJButton4(), null);\r
+            jPanel11.add(getJButton5(), null);\r
             jPanel11.add(getJScrollPane2(), null);\r
         }\r
         return jPanel11;\r
     }\r
 \r
-    /**\r
-     * This method initializes jRadioButton    \r
-     *         \r
-     * @return javax.swing.JRadioButton        \r
-     */\r
-    private JRadioButton getJRadioButton() {\r
-        if (jRadioButton == null) {\r
-            jRadioButton = new JRadioButton();\r
-            jRadioButton.setText("ANT tasks File");\r
-            jRadioButton.setSelected(true);\r
-            jRadioButton.addItemListener(new ItemListener() {\r
-                public void itemStateChanged(ItemEvent arg0) {\r
-                    boolean selected = jRadioButton.isSelected();\r
-                    jTextField2.setEnabled(selected);\r
-                }\r
-            });\r
-        }\r
-        return jRadioButton;\r
-    }\r
-\r
     /**\r
      * This method initializes jTextField2     \r
      *         \r
@@ -343,21 +326,20 @@ public class FpdBuildOptions extends IInternalFrame {
     private JButton getJButton4() {\r
         if (jButton4 == null) {\r
             jButton4 = new JButton();\r
-            jButton4.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButton4.setPreferredSize(new java.awt.Dimension(90,20));\r
             jButton4.setText("Add");\r
             jButton4.addActionListener(new ActionListener() {\r
                 public void actionPerformed(ActionEvent e) {\r
+                    if (!DataValidation.isInt(jTextField3.getText()) || jTextField3.getText().length() != 8) {\r
+                        JOptionPane.showMessageDialog(frame, "ID must be an 8-digit integer.");\r
+                        return;\r
+                    }\r
                     Object[] o = {jTextField3.getText(), null, null};\r
-                    if (jRadioButton.isSelected()) {\r
                         o[1] = jTextField2.getText();\r
-                        ffc.genBuildOptionsUserDefAntTask(o[0]+"", o[1]+"", null);\r
-                    }\r
-                    if (jRadioButton1.isSelected()) {\r
                         o[2] = jTextField4.getText();\r
-                        ffc.genBuildOptionsUserDefAntTask(o[0]+"", null, o[2]+"");\r
-                    }\r
+                        ffc.genBuildOptionsUserDefAntTask(o[0]+"", o[1]+"", o[2]+"");\r
                     antTaskTableModel.addRow(o);\r
-                    \r
+                    docConsole.setSaved(false);\r
                 }\r
             });\r
         }\r
@@ -372,11 +354,12 @@ public class FpdBuildOptions extends IInternalFrame {
     private JButton getJButton5() {\r
         if (jButton5 == null) {\r
             jButton5 = new JButton();\r
-            jButton5.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButton5.setPreferredSize(new java.awt.Dimension(90,20));\r
             jButton5.setText("Delete");\r
             jButton5.addActionListener(new ActionListener() {\r
                 public void actionPerformed(ActionEvent e) {\r
                     if (selectedRow >= 0) {\r
+                        docConsole.setSaved(false);\r
                         antTaskTableModel.removeRow(selectedRow);\r
                         ffc.removeBuildOptionsUserDefAntTask(selectedRow);\r
                     }\r
@@ -386,27 +369,6 @@ public class FpdBuildOptions extends IInternalFrame {
         return jButton5;\r
     }\r
 \r
-    /**\r
-     * This method initializes jRadioButton1   \r
-     *         \r
-     * @return javax.swing.JRadioButton        \r
-     */\r
-    private JRadioButton getJRadioButton1() {\r
-        if (jRadioButton1 == null) {\r
-            jRadioButton1 = new JRadioButton();\r
-            jRadioButton1.setText("ANT Command");\r
-            jRadioButton1.setPreferredSize(new java.awt.Dimension(180,24));\r
-            jRadioButton1.addItemListener(new ItemListener() {\r
-                public void itemStateChanged(ItemEvent arg0) {\r
-                    boolean selected = jRadioButton1.isSelected();\r
-                    jLabel4.setEnabled(selected);\r
-                    jTextField4.setEnabled(selected);\r
-                }\r
-            });\r
-        }\r
-        return jRadioButton1;\r
-    }\r
-\r
     /**\r
      * This method initializes jTextField4     \r
      *         \r
@@ -415,8 +377,8 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTextField getJTextField4() {\r
         if (jTextField4 == null) {\r
             jTextField4 = new JTextField();\r
-            jTextField4.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField4.setEnabled(false);\r
+            jTextField4.setPreferredSize(new java.awt.Dimension(270,20));\r
+            jTextField4.setEnabled(true);\r
         }\r
         return jTextField4;\r
     }\r
@@ -444,9 +406,10 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jTable2 == null) {\r
             antTaskTableModel = new DefaultTableModel();\r
             jTable2 = new JTable(antTaskTableModel);\r
+            jTable2.setRowHeight(20);\r
             antTaskTableModel.addColumn("ID");\r
             antTaskTableModel.addColumn("Filename");\r
-            antTaskTableModel.addColumn("ExecutionOrder");\r
+            antTaskTableModel.addColumn("ANT Command Options");\r
             \r
             jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
@@ -505,29 +468,12 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jPanel13 == null) {\r
             jPanel13 = new JPanel();\r
             jPanel13.setLayout(new BorderLayout());\r
-            jPanel13.add(getJPanel14(), java.awt.BorderLayout.WEST);\r
             jPanel13.add(getJPanel18(), java.awt.BorderLayout.CENTER);\r
+            jPanel13.add(getJScrollPane(), java.awt.BorderLayout.WEST);\r
         }\r
         return jPanel13;\r
     }\r
 \r
-    /**\r
-     * This method initializes jPanel14        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
-     */\r
-    private JPanel getJPanel14() {\r
-        if (jPanel14 == null) {\r
-            jLabel6 = new JLabel();\r
-            jLabel6.setText("FFS Types");\r
-            jPanel14 = new JPanel();\r
-            jPanel14.setPreferredSize(new java.awt.Dimension(120,300));\r
-            jPanel14.add(jLabel6, null);\r
-            jPanel14.add(getJScrollPane4(), null);\r
-        }\r
-        return jPanel14;\r
-    }\r
-\r
     /**\r
      * This method initializes jPanel18        \r
      *         \r
@@ -545,32 +491,6 @@ public class FpdBuildOptions extends IInternalFrame {
         return jPanel18;\r
     }\r
 \r
-    /**\r
-     * This method initializes jScrollPane4    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
-     */\r
-    private JScrollPane getJScrollPane4() {\r
-        if (jScrollPane4 == null) {\r
-            jScrollPane4 = new JScrollPane();\r
-            jScrollPane4.setPreferredSize(new java.awt.Dimension(120,330));\r
-            jScrollPane4.setViewportView(getJList());\r
-        }\r
-        return jScrollPane4;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jList   \r
-     *         \r
-     * @return javax.swing.JList       \r
-     */\r
-    private JList getJList() {\r
-        if (jList == null) {\r
-            jList = new JList(listModel);\r
-        }\r
-        return jList;\r
-    }\r
-\r
     /**\r
      * This method initializes jPanel15        \r
      *         \r
@@ -578,14 +498,18 @@ public class FpdBuildOptions extends IInternalFrame {
      */\r
     private JPanel getJPanel15() {\r
         if (jPanel15 == null) {\r
+            jLabel5 = new JLabel();\r
+            jLabel5.setText("Encapsulation Type");\r
             FlowLayout flowLayout5 = new FlowLayout();\r
             flowLayout5.setAlignment(java.awt.FlowLayout.RIGHT);\r
             jLabel7 = new JLabel();\r
-            jLabel7.setText("Type");\r
+            jLabel7.setText("FFS Key");\r
             jPanel15 = new JPanel();\r
             jPanel15.setLayout(flowLayout5);\r
             jPanel15.add(jLabel7, null);\r
             jPanel15.add(getJTextField6(), null);\r
+            jPanel15.add(jLabel5, null);\r
+            jPanel15.add(getJTextField(), null);\r
             jPanel15.add(getJButton8(), null);\r
             jPanel15.add(getJButton9(), null);\r
         }\r
@@ -599,16 +523,18 @@ public class FpdBuildOptions extends IInternalFrame {
      */\r
     private JPanel getJPanel16() {\r
         if (jPanel16 == null) {\r
+            jLabel6 = new JLabel();\r
+            jLabel6.setText("Attributes");\r
             FlowLayout flowLayout6 = new FlowLayout();\r
             flowLayout6.setHgap(5);\r
-            flowLayout6.setAlignment(java.awt.FlowLayout.LEFT);\r
+            flowLayout6.setVgap(20);\r
+            flowLayout6.setAlignment(java.awt.FlowLayout.CENTER);\r
             jPanel16 = new JPanel();\r
             jPanel16.setPreferredSize(new java.awt.Dimension(491,130));\r
             jPanel16.setLayout(flowLayout6);\r
-            jPanel16.add(getJCheckBox5(), null);\r
-            jPanel16.add(getJButton17(), null);\r
-            jPanel16.add(getJButton18(), null);\r
+            jPanel16.add(jLabel6, null);\r
             jPanel16.add(getJScrollPane5(), null);\r
+            jPanel16.add(getJPanel4(), null);\r
         }\r
         return jPanel16;\r
     }\r
@@ -621,7 +547,6 @@ public class FpdBuildOptions extends IInternalFrame {
     private JPanel getJPanel17() {\r
         if (jPanel17 == null) {\r
             jPanel17 = new JPanel();\r
-            jPanel17.add(getJScrollPane7(), null);\r
         }\r
         return jPanel17;\r
     }\r
@@ -634,7 +559,16 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTextField getJTextField6() {\r
         if (jTextField6 == null) {\r
             jTextField6 = new JTextField();\r
-            jTextField6.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jTextField6.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextField6.setEditable(true);\r
+            jTextField6.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+//                    ffc.updateBuildOptionsFfsKey(jTable.getSelectedRow(), jTextField6.getText());\r
+                }\r
+            });\r
         }\r
         return jTextField6;\r
     }\r
@@ -650,9 +584,17 @@ public class FpdBuildOptions extends IInternalFrame {
             jButton8.setPreferredSize(new java.awt.Dimension(70,20));\r
             jButton8.setText("Add");\r
             jButton8.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = -2923720717273384221L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     if (jTextField6.getText().length() > 0) {\r
-                        listModel.addElement(jTextField6.getText());\r
+                        String[] row = {jTextField6.getText()};\r
+                        ffsTableModel.addRow(row);\r
+                        docConsole.setSaved(false);\r
+                        ffc.genBuildOptionsFfs(jTextField6.getText(), jTextField.getText());\r
                     }\r
                 }\r
             });\r
@@ -671,28 +613,23 @@ public class FpdBuildOptions extends IInternalFrame {
             jButton9.setPreferredSize(new java.awt.Dimension(70,20));\r
             jButton9.setText("Delete");\r
             jButton9.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = -4002678939178194476L;\r
+\r
                 public void actionPerformed(ActionEvent arg0){\r
-                    listModel.remove(jList.getSelectedIndex());\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    ffc.removeBuildOptionsFfs(jTable.getSelectedRow());\r
                 }\r
             });\r
         }\r
         return jButton9;\r
     }\r
 \r
-    /**\r
-     * This method initializes jCheckBox5      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\r
-    private JCheckBox getJCheckBox5() {\r
-        if (jCheckBox5 == null) {\r
-            jCheckBox5 = new JCheckBox();\r
-            jCheckBox5.setText("Attributes");\r
-            jCheckBox5.setPreferredSize(new java.awt.Dimension(81,20));\r
-        }\r
-        return jCheckBox5;\r
-    }\r
-\r
     /**\r
      * This method initializes jScrollPane5    \r
      *         \r
@@ -717,8 +654,32 @@ public class FpdBuildOptions extends IInternalFrame {
             ffsAttributesTableModel = new DefaultTableModel();\r
             jTable4 = new JTable(ffsAttributesTableModel);\r
             jTable4.setPreferredSize(new java.awt.Dimension(400,80));\r
+            jTable4.setRowHeight(20);\r
             ffsAttributesTableModel.addColumn("Name");\r
             ffsAttributesTableModel.addColumn("Value");\r
+            \r
+            jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\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
+                    if (arg0.getType() == TableModelEvent.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String name = m.getValueAt(row, 0) + "";\r
+                        String value = m.getValueAt(row, 1) + "";\r
+                        \r
+                        if (name.length() == 0) {\r
+                            return;\r
+                        }\r
+                        if (value.length() == 0){\r
+                            return;\r
+                        }\r
+                        docConsole.setSaved(false);\r
+                        ffc.updateBuildOptionsFfsAttribute(jTable.getSelectedRow(), row, name, value);\r
+                    }\r
+                }\r
+            });\r
         }\r
         return jTable4;\r
     }\r
@@ -730,10 +691,26 @@ public class FpdBuildOptions extends IInternalFrame {
      */\r
     private JPanel getJPanel19() {\r
         if (jPanel19 == null) {\r
+            jLabel8 = new JLabel();\r
+            jLabel8.setText("Sections");\r
+            jLabel4 = new JLabel();\r
+            jLabel4.setText("Sub-Sections");\r
+            jLabel2 = new JLabel();\r
+            jLabel2.setText("Section");\r
             jPanel19 = new JPanel();\r
-            jPanel19.setLayout(new CardLayout());\r
-            jPanel19.add(getJPanel21(), getJPanel21().getName());\r
-            jPanel19.add(getJPanel22(), getJPanel22().getName());\r
+            jPanel19.setLayout(new FlowLayout());\r
+            jPanel19.add(jLabel2, null);\r
+            jPanel19.add(getJButton(), null);\r
+            jPanel19.add(getJButton1(), null);\r
+            jPanel19.add(getJScrollPane1(), null);\r
+            jPanel19.add(jLabel8, null);\r
+            jPanel19.add(getJButton6(), null);\r
+            jPanel19.add(getJButton7(), null);\r
+            jPanel19.add(getJScrollPane4(), null);\r
+            jPanel19.add(jLabel4, null);\r
+            jPanel19.add(getJButton2(), null);\r
+            jPanel19.add(getJButton3(), null);\r
+            jPanel19.add(getJScrollPane3(), null);\r
         }\r
         return jPanel19;\r
     }\r
@@ -764,6 +741,7 @@ public class FpdBuildOptions extends IInternalFrame {
             jPanel20.add(jLabel14, null);\r
             jPanel20.add(getJTextField12(), null);\r
             jPanel20.add(jLabel10, null);\r
+            jPanel20.add(getJTextField1(), null);\r
             jPanel20.add(getJComboBox2(), null);\r
             jPanel20.add(jLabel12, null);\r
             jPanel20.add(getJTextField8(), null);\r
@@ -780,7 +758,6 @@ public class FpdBuildOptions extends IInternalFrame {
             jPanel20.add(getJTextField7(), null);\r
             jPanel20.add(getJButton10(), null);\r
             jPanel20.add(getJButton11(), null);\r
-            jPanel20.add(getJButton19(), null);\r
             jPanel20.add(getJScrollPane6(), null);\r
         }\r
         return jPanel20;\r
@@ -813,6 +790,7 @@ public class FpdBuildOptions extends IInternalFrame {
             jComboBox2.addItem("CYGWIN");\r
             jComboBox2.addItem("INTEL");\r
             jComboBox2.setSelectedIndex(0);\r
+            jComboBox2.setVisible(false);\r
         }\r
         return jComboBox2;\r
     }\r
@@ -853,6 +831,7 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jTable5 == null) {\r
             optionsTableModel = new DefaultTableModel();\r
             jTable5 = new JTable(optionsTableModel);\r
+            jTable5.setRowHeight(20);\r
             optionsTableModel.addColumn("BuildTargets");\r
             optionsTableModel.addColumn("ToolChainFamily");\r
             optionsTableModel.addColumn("SupportedArch");\r
@@ -860,14 +839,21 @@ public class FpdBuildOptions extends IInternalFrame {
             optionsTableModel.addColumn("TagName");\r
             optionsTableModel.addColumn("Contents");\r
             \r
-            TableColumn toolFamilyCol = jTable5.getColumnModel().getColumn(1);\r
-            JComboBox cb = new JComboBox();\r
-            cb.addItem("MSFT");\r
-            cb.addItem("GCC");\r
-            cb.addItem("CYGWIN");\r
-            cb.addItem("INTEL");\r
-            toolFamilyCol.setCellEditor(new DefaultCellEditor(cb));\r
-            \r
+//            TableColumn toolFamilyCol = jTable5.getColumnModel().getColumn(1);\r
+//            JComboBox cb = new JComboBox();\r
+//            cb.addItem("MSFT");\r
+//            cb.addItem("GCC");\r
+//            cb.addItem("CYGWIN");\r
+//            cb.addItem("INTEL");\r
+//            toolFamilyCol.setCellEditor(new DefaultCellEditor(cb));\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
+            jTable5.getColumnModel().getColumn(2).setCellEditor(new ListEditor(vArch));\r
             jTable5.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             jTable5.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
@@ -892,12 +878,27 @@ public class FpdBuildOptions extends IInternalFrame {
                     TableModel m = (TableModel)arg0.getSource();\r
                     if (arg0.getType() == TableModelEvent.UPDATE){\r
                         //ToDo Data Validition check.\r
-                        String targetName = m.getValueAt(row, 0) + "";\r
+                        String targets = m.getValueAt(row, 0) + "";\r
+                        Vector<Object> 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
                         String toolChain = m.getValueAt(row, 1) + "";\r
-                        String supArch = m.getValueAt(row, 2) + "";\r
+                        String archs = m.getValueAt(row, 2) + "";\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 toolCmd = m.getValueAt(row, 3) + "";\r
                         String tagName = m.getValueAt(row, 4) + "";\r
                         String contents = m.getValueAt(row, 5) + "";\r
+                        docConsole.setSaved(false);\r
                         ffc.updateBuildOptionsOpt(row, targetName, toolChain, tagName, toolCmd, supArch, contents);\r
                     }\r
                 }\r
@@ -915,22 +916,40 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jButton10 == null) {\r
             jButton10 = new JButton();\r
             jButton10.setText("Add");\r
-            jButton10.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButton10.setPreferredSize(new java.awt.Dimension(90,20));\r
             jButton10.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     boolean[] boolArray = {jCheckBox9.isSelected(),jCheckBox10.isSelected(),jCheckBox11.isSelected(),\r
                                            jCheckBox12.isSelected(),jCheckBox13.isSelected(),jCheckBox14.isSelected()};\r
                     String s = boolToList(boolArray);\r
-                    Object[] o = {jTextField12.getText(), jComboBox2.getSelectedItem(), s,\r
+                    Object[] o = {jTextField12.getText(), jTextField1.getText(), s,\r
                                   jTextField8.getText(), jTextField13.getText(), jTextField7.getText()};\r
                     optionsTableModel.addRow(o);\r
-                    ffc.genBuildOptionsOpt(jTextField12.getText(), jComboBox2.getSelectedItem()+"", jTextField13.getText(), jTextField8.getText(), s, jTextField7.getText());\r
+                    docConsole.setSaved(false);\r
+                    ffc.genBuildOptionsOpt(stringToVector(jTextField12.getText()), jTextField1.getText(), jTextField13.getText(), jTextField8.getText(),  stringToVector(s), jTextField7.getText());\r
                 }\r
             });\r
         }\r
         return jButton10;\r
     }\r
     \r
+    private Vector<Object> stringToVector(String s) {\r
+        String[] sArray = s.split(" ");\r
+        Vector<Object> v = null;\r
+        if (s.length() > 0) {\r
+            v = new Vector<Object>();\r
+            for (int i = 0; i < sArray.length; ++i) {\r
+                v.add(sArray[i]);\r
+            } \r
+        }\r
+        return v;\r
+    }\r
+    \r
     private String boolToList (boolean[] bool) {\r
         String s = " ";\r
         if (bool[0]) {\r
@@ -951,7 +970,9 @@ public class FpdBuildOptions extends IInternalFrame {
         if (bool[5]) {\r
             s += "PPC ";\r
         }\r
-        \r
+        if (s == " ") {\r
+            s += "IA32";\r
+        }\r
         return s.trim();\r
     }\r
 \r
@@ -964,11 +985,17 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jButton11 == null) {\r
             jButton11 = new JButton();\r
             jButton11.setText("Delete");\r
-            jButton11.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButton11.setPreferredSize(new java.awt.Dimension(90,20));\r
             jButton11.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     if (selectedRow >= 0) {\r
                         optionsTableModel.removeRow(selectedRow);\r
+                        docConsole.setSaved(false);\r
                         ffc.removeBuildOptionsOpt(selectedRow);\r
                     }\r
                 }\r
@@ -978,453 +1005,708 @@ public class FpdBuildOptions extends IInternalFrame {
     }\r
 \r
     /**\r
-     * This method initializes jPanel21        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
-     */\r
-    private JPanel getJPanel21() {\r
-        if (jPanel21 == null) {\r
-            jLabel13 = new JLabel();\r
-            jLabel13.setText("EncapsulationTag");\r
-            jLabel8 = new JLabel();\r
-            jLabel8.setText("EncapsulationType");\r
-            jPanel21 = new JPanel();\r
-            jPanel21.setName("jPanel21");\r
-            jPanel21.add(jLabel8, null);\r
-            jPanel21.add(getJTextField9(), null);\r
-            jPanel21.add(jLabel13, null);\r
-            jPanel21.add(getJTextField10(), null);\r
-            jPanel21.add(getJButton12(), null);\r
-            jPanel21.add(getJButton13(), null);\r
-            jPanel21.add(getJButton16(), null);\r
-        }\r
-        return jPanel21;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jButton12       \r
+     * This method initializes jButton17       \r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton12() {\r
-        if (jButton12 == null) {\r
-            jButton12 = new JButton();\r
-            jButton12.setText("Add Sections");\r
-            jButton12.setPreferredSize(new java.awt.Dimension(109,20));\r
-            jButton12.addActionListener(new AbstractAction(){\r
+    private JButton getJButton17() {\r
+        if (jButton17 == null) {\r
+            jButton17 = new JButton();\r
+            jButton17.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton17.setText("New");\r
+            jButton17.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(ActionEvent arg0){\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    Object[] o = {"", ""};\r
+                    ffsAttributesTableModel.addRow(o);\r
+                    docConsole.setSaved(false);\r
+                    ffc.genBuildOptionsFfsAttribute(jTable.getSelectedRow(), "", "");\r
                 }\r
             });\r
         }\r
-        return jButton12;\r
+        return jButton17;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton13       \r
+     * This method initializes jButton18       \r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton13() {\r
-        if (jButton13 == null) {\r
-            jButton13 = new JButton();\r
-            jButton13.setText("Add Section");\r
-            jButton13.setPreferredSize(new java.awt.Dimension(102,20));\r
-            jButton13.addActionListener(new AbstractAction(){\r
+    private JButton getJButton18() {\r
+        if (jButton18 == null) {\r
+            jButton18 = new JButton();\r
+            jButton18.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton18.setText("Remove");\r
+            jButton18.addActionListener(new AbstractAction(){\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(ActionEvent arg0){\r
-                    CardLayout cl = (CardLayout)jPanel19.getLayout();\r
-                    cl.last(jPanel19);\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    if (jTable4.getSelectedRow() >= 0){\r
+                        docConsole.setSaved(false);\r
+                        ffsAttributesTableModel.removeRow(jTable4.getSelectedRow());\r
+                        ffc.removeBuildOptionsFfsAttribute(jTable.getSelectedRow(), jTable4.getSelectedRow());\r
+                    }\r
                 }\r
             });\r
         }\r
-        return jButton13;\r
+        return jButton18;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField9     \r
+     * This method initializes jCheckBox9      \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JCheckBox   \r
      */\r
-    private JTextField getJTextField9() {\r
-        if (jTextField9 == null) {\r
-            jTextField9 = new JTextField();\r
-            jTextField9.setPreferredSize(new java.awt.Dimension(250,20));\r
+    private JCheckBox getJCheckBox9() {\r
+        if (jCheckBox9 == null) {\r
+            jCheckBox9 = new JCheckBox();\r
+            jCheckBox9.setPreferredSize(new java.awt.Dimension(50,20));\r
+            jCheckBox9.setText("IA32");\r
         }\r
-        return jTextField9;\r
+        return jCheckBox9;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField10    \r
+     * This method initializes jCheckBox10     \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JCheckBox   \r
      */\r
-    private JTextField getJTextField10() {\r
-        if (jTextField10 == null) {\r
-            jTextField10 = new JTextField();\r
-            jTextField10.setPreferredSize(new java.awt.Dimension(250,20));\r
+    private JCheckBox getJCheckBox10() {\r
+        if (jCheckBox10 == null) {\r
+            jCheckBox10 = new JCheckBox();\r
+            jCheckBox10.setPreferredSize(new java.awt.Dimension(50,20));\r
+            jCheckBox10.setText("IPF");\r
         }\r
-        return jTextField10;\r
+        return jCheckBox10;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel22        \r
+     * This method initializes jCheckBox11     \r
      *         \r
-     * @return javax.swing.JPanel      \r
+     * @return javax.swing.JCheckBox   \r
      */\r
-    private JPanel getJPanel22() {\r
-        if (jPanel22 == null) {\r
-            FlowLayout flowLayout7 = new FlowLayout();\r
-            flowLayout7.setAlignment(java.awt.FlowLayout.LEFT);\r
-            jPanel22 = new JPanel();\r
-            jPanel22.setLayout(flowLayout7);\r
-            jPanel22.setName("jPanel22");\r
-            jPanel22.add(getJCheckBox6(), null);\r
-            jPanel22.add(getJComboBox4(), null);\r
-            jPanel22.add(getJCheckBox7(), null);\r
-            jPanel22.add(getJComboBox5(), null);\r
-            jPanel22.add(getJCheckBox8(), null);\r
-            jPanel22.add(getJTextField11(), null);\r
-            jPanel22.add(getJButton14(), null);\r
-            jPanel22.add(getJButton15(), null);\r
+    private JCheckBox getJCheckBox11() {\r
+        if (jCheckBox11 == null) {\r
+            jCheckBox11 = new JCheckBox();\r
+            jCheckBox11.setText("X64");\r
+            jCheckBox11.setPreferredSize(new java.awt.Dimension(47,20));\r
         }\r
-        return jPanel22;\r
+        return jCheckBox11;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox     \r
+     * This method initializes jCheckBox12     \r
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox6() {\r
-        if (jCheckBox6 == null) {\r
-            jCheckBox6 = new JCheckBox();\r
-            jCheckBox6.setText("Section Type");\r
-            jCheckBox6.setPreferredSize(new java.awt.Dimension(98,20));\r
+    private JCheckBox getJCheckBox12() {\r
+        if (jCheckBox12 == null) {\r
+            jCheckBox12 = new JCheckBox();\r
+            jCheckBox12.setPreferredSize(new java.awt.Dimension(50,20));\r
+            jCheckBox12.setText("EBC");\r
         }\r
-        return jCheckBox6;\r
+        return jCheckBox12;\r
     }\r
 \r
     /**\r
-     * This method initializes jComboBox4      \r
+     * This method initializes jCheckBox13     \r
      *         \r
-     * @return javax.swing.JComboBox   \r
+     * @return javax.swing.JCheckBox   \r
      */\r
-    private JComboBox getJComboBox4() {\r
-        if (jComboBox4 == null) {\r
-            jComboBox4 = new JComboBox();\r
-            jComboBox4.setPreferredSize(new java.awt.Dimension(260,20));\r
-            \r
-            jComboBox4.addItem("EFI_SECTION_FREEFORM_SUBTYPE_GUID");\r
-            jComboBox4.addItem("EFI_SECTION_VERSION");\r
-            jComboBox4.addItem("EFI_SECTION_USER_INTERFACE");\r
-            jComboBox4.addItem("EFI_SECTION_DXE_DEPEX");\r
-            jComboBox4.addItem("EFI_SECTION_PEI_DEPEX");\r
-            jComboBox4.addItem("EFI_SECTION_PE32");\r
-            jComboBox4.addItem("EFI_SECTION_PIC");\r
-            jComboBox4.addItem("EFI_SECTION_TE");\r
-            jComboBox4.addItem("EFI_SECTION_RAW");\r
-            jComboBox4.addItem("EFI_SECTION_COMPRESSION");\r
-            jComboBox4.addItem("EFI_SECTION_GUID_DEFINED");\r
-            jComboBox4.addItem("EFI_SECTION_COMPATIBILITY16");\r
-            jComboBox4.addItem("EFI_SECTION_FIRMWARE_VOLUME_IMAGE");\r
-            jComboBox4.setSelectedIndex(0);\r
-        }\r
-        return jComboBox4;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jCheckBox7      \r
+    private JCheckBox getJCheckBox13() {\r
+        if (jCheckBox13 == null) {\r
+            jCheckBox13 = new JCheckBox();\r
+            jCheckBox13.setPreferredSize(new java.awt.Dimension(55,20));\r
+            jCheckBox13.setText("ARM");\r
+        }\r
+        return jCheckBox13;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jCheckBox14     \r
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox7() {\r
-        if (jCheckBox7 == null) {\r
-            jCheckBox7 = new JCheckBox();\r
-            jCheckBox7.setPreferredSize(new java.awt.Dimension(120,20));\r
-            jCheckBox7.setText("Compressible");\r
+    private JCheckBox getJCheckBox14() {\r
+        if (jCheckBox14 == null) {\r
+            jCheckBox14 = new JCheckBox();\r
+            jCheckBox14.setPreferredSize(new java.awt.Dimension(50,20));\r
+            jCheckBox14.setText("PPC");\r
         }\r
-        return jCheckBox7;\r
+        return jCheckBox14;\r
     }\r
 \r
     /**\r
-     * This method initializes jComboBox5      \r
+     * This method initializes jTextField12    \r
      *         \r
-     * @return javax.swing.JComboBox   \r
+     * @return javax.swing.JTextField  \r
      */\r
-    private JComboBox getJComboBox5() {\r
-        if (jComboBox5 == null) {\r
-            jComboBox5 = new JComboBox();\r
-            jComboBox5.setPreferredSize(new java.awt.Dimension(80,20));\r
-            \r
-            jComboBox5.addItem("false");\r
-            jComboBox5.addItem("true");\r
-            jComboBox5.setSelectedIndex(0);\r
+    private JTextField getJTextField12() {\r
+        if (jTextField12 == null) {\r
+            jTextField12 = new JTextField();\r
+            jTextField12.setPreferredSize(new java.awt.Dimension(150,20));\r
         }\r
-        return jComboBox5;\r
+        return jTextField12;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox8      \r
+     * This method initializes jTextField13    \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JTextField  \r
      */\r
-    private JCheckBox getJCheckBox8() {\r
-        if (jCheckBox8 == null) {\r
-            jCheckBox8 = new JCheckBox();\r
-            jCheckBox8.setText("Binding Order");\r
-            jCheckBox8.setPreferredSize(new java.awt.Dimension(103,20));\r
+    private JTextField getJTextField13() {\r
+        if (jTextField13 == null) {\r
+            jTextField13 = new JTextField();\r
+            jTextField13.setPreferredSize(new java.awt.Dimension(140,20));\r
         }\r
-        return jCheckBox8;\r
+        return jTextField13;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField11    \r
+     * This method initializes jScrollPane     \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JTextField getJTextField11() {\r
-        if (jTextField11 == null) {\r
-            jTextField11 = new JTextField();\r
-            jTextField11.setPreferredSize(new java.awt.Dimension(150,20));\r
+    private JScrollPane getJScrollPane() {\r
+        if (jScrollPane == null) {\r
+            jScrollPane = new JScrollPane();\r
+            jScrollPane.setPreferredSize(new java.awt.Dimension(150,419));\r
+            jScrollPane.setViewportView(getJTable());\r
         }\r
-        return jTextField11;\r
+        return jScrollPane;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton14       \r
+     * This method initializes jTable  \r
      *         \r
-     * @return javax.swing.JButton     \r
+     * @return javax.swing.JTable      \r
      */\r
-    private JButton getJButton14() {\r
-        if (jButton14 == null) {\r
-            jButton14 = new JButton();\r
-            jButton14.setText("Add");\r
-            jButton14.setPreferredSize(new java.awt.Dimension(70,20));\r
-            jButton14.addActionListener(new AbstractAction(){\r
-                public void actionPerformed(ActionEvent arg0){\r
+    private JTable getJTable() {\r
+        if (jTable == null) {\r
+            ffsTableModel = new DefaultTableModel();\r
+            ffsTableModel.addColumn("FFS Type");\r
+            jTable = new JTable(ffsTableModel);\r
+            jTable.setShowGrid(false);\r
+            jTable.setRowHeight(20);\r
+            \r
+            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+                public void valueChanged(ListSelectionEvent e) {\r
+                    \r
+                    if (e.getValueIsAdjusting()){\r
+                        return;\r
+                    }\r
+                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
+                    if (lsm.isSelectionEmpty()) {\r
+                        return;\r
+                    }\r
+                    else{\r
+                        int row = lsm.getMinSelectionIndex();\r
+                        sectionTableModel.setRowCount(0);\r
+                        sectionsTableModel.setRowCount(0);\r
+                        subsectionsTableModel.setRowCount(0);\r
+                        ffsAttributesTableModel.setRowCount(0);\r
+                        String[] sArray = {"", ""};\r
+                        LinkedHashMap<String, String> lhm = new LinkedHashMap<String, String>();\r
+                        ArrayList<String> alSections = new ArrayList<String>();\r
+                        ArrayList<String> alSection = new ArrayList<String>();\r
+                        ffc.getBuildOptionsFfs(row, sArray, lhm, alSections, alSection);\r
+                        jTextField6.setText(sArray[0]);\r
+                        jTextField.setText(sArray[1]);\r
+                        for (int i = 0; i < alSection.size(); ++i) {\r
+                            String[] sectionRow = {alSection.get(i)};\r
+                            sectionTableModel.addRow(sectionRow);\r
+                        }\r
+                        for (int j = 0; j < alSections.size(); ++j) {\r
+                            String[] sectionsRow = {alSections.get(j)};\r
+                            sectionsTableModel.addRow(sectionsRow);\r
+                        }\r
+                        if (lhm.size() <= 0 ) {\r
+                            return;\r
+                        }\r
+                        Set<String> keySet = lhm.keySet();\r
+                        Iterator<String> is = keySet.iterator();\r
+                        while(is.hasNext()) {\r
+                            String key = is.next();\r
+                            String[] attribRow = {key, lhm.get(key)};\r
+                            ffsAttributesTableModel.addRow(attribRow);\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.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String id = m.getValueAt(row, 0) + "";\r
+                        \r
+                        if (id.length() == 0) {\r
+                            return;\r
+                        }\r
+                        docConsole.setSaved(false);\r
+                        ffc.updateBuildOptionsFfsKey(row, id);\r
+                    }\r
                 }\r
             });\r
         }\r
-        return jButton14;\r
+        return jTable;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton15       \r
+     * This method initializes jScrollPane1    \r
      *         \r
-     * @return javax.swing.JButton     \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JButton getJButton15() {\r
-        if (jButton15 == null) {\r
-            jButton15 = new JButton();\r
-            jButton15.setPreferredSize(new java.awt.Dimension(70,20));\r
-            jButton15.setText("Delete");\r
+    private JScrollPane getJScrollPane1() {\r
+        if (jScrollPane1 == null) {\r
+            jScrollPane1 = new JScrollPane();\r
+            jScrollPane1.setPreferredSize(new java.awt.Dimension(500,80));\r
+            jScrollPane1.setViewportView(getJTable1());\r
         }\r
-        return jButton15;\r
+        return jScrollPane1;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton16       \r
+     * This method initializes jTable1 \r
      *         \r
-     * @return javax.swing.JButton     \r
+     * @return javax.swing.JTable      \r
      */\r
-    private JButton getJButton16() {\r
-        if (jButton16 == null) {\r
-            jButton16 = new JButton();\r
-            jButton16.setText("Delete");\r
-            jButton16.setPreferredSize(new java.awt.Dimension(70,20));\r
+    private JTable getJTable1() {\r
+        if (jTable1 == null) {\r
+            sectionTableModel = new DefaultTableModel();\r
+            sectionTableModel.addColumn("SectionType");\r
+            \r
+            jTable1 = new JTable(sectionTableModel);\r
+            jTable1.setRowHeight(20);\r
+            JComboBox cb = new JComboBox();\r
+            cb.addItem("EFI_SECTION_FREEFORM_SUBTYPE_GUID");\r
+            cb.addItem("EFI_SECTION_VERSION");\r
+            cb.addItem("EFI_SECTION_USER_INTERFACE");\r
+            cb.addItem("EFI_SECTION_DXE_DEPEX");\r
+            cb.addItem("EFI_SECTION_PEI_DEPEX");\r
+            cb.addItem("EFI_SECTION_PE32");\r
+            cb.addItem("EFI_SECTION_PIC");\r
+            cb.addItem("EFI_SECTION_TE");\r
+            cb.addItem("EFI_SECTION_RAW");\r
+            cb.addItem("EFI_SECTION_COMPRESSION");\r
+            cb.addItem("EFI_SECTION_GUID_DEFINED");\r
+            cb.addItem("EFI_SECTION_COMPATIBILITY16");\r
+            cb.addItem("EFI_SECTION_FIRMWARE_VOLUME_IMAGE");\r
+            jTable1.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
+            \r
+            jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            \r
+            jTable1.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    int row = arg0.getFirstRow();\r
+                    TableModel m = (TableModel)arg0.getSource();\r
+                    if (arg0.getType() == TableModelEvent.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String type = m.getValueAt(row, 0) + "";\r
+                        docConsole.setSaved(false);\r
+                       ffc.updateBuildOptionsFfsSectionsSection(jTable.getSelectedRow(), row, type);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jButton16;\r
+        return jTable1;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane7    \r
+     * This method initializes jScrollPane3    \r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane7() {\r
-        if (jScrollPane7 == null) {\r
-            jScrollPane7 = new JScrollPane();\r
-            jScrollPane7.setPreferredSize(new java.awt.Dimension(110,200));\r
-            jScrollPane7.setViewportView(getJTree());\r
+    private JScrollPane getJScrollPane3() {\r
+        if (jScrollPane3 == null) {\r
+            jScrollPane3 = new JScrollPane();\r
+            jScrollPane3.setPreferredSize(new java.awt.Dimension(500,90));\r
+            jScrollPane3.setViewportView(getJTable3());\r
         }\r
-        return jScrollPane7;\r
+        return jScrollPane3;\r
     }\r
 \r
     /**\r
-     * This method initializes jTree   \r
+     * This method initializes jTable3 \r
      *         \r
-     * @return javax.swing.JTree       \r
+     * @return javax.swing.JTable      \r
      */\r
-    private JTree getJTree() {\r
-        if (jTree == null) {\r
-            jTree = new JTree();\r
+    private JTable getJTable3() {\r
+        if (jTable3 == null) {\r
+            subsectionsTableModel = new DefaultTableModel();\r
+            subsectionsTableModel.addColumn("SectionType");\r
+            jTable3 = new JTable(subsectionsTableModel);\r
+            jTable3.setRowHeight(20);\r
+            JComboBox cb = new JComboBox();\r
+            cb.addItem("EFI_SECTION_FREEFORM_SUBTYPE_GUID");\r
+            cb.addItem("EFI_SECTION_VERSION");\r
+            cb.addItem("EFI_SECTION_USER_INTERFACE");\r
+            cb.addItem("EFI_SECTION_DXE_DEPEX");\r
+            cb.addItem("EFI_SECTION_PEI_DEPEX");\r
+            cb.addItem("EFI_SECTION_PE32");\r
+            cb.addItem("EFI_SECTION_PIC");\r
+            cb.addItem("EFI_SECTION_TE");\r
+            cb.addItem("EFI_SECTION_RAW");\r
+            cb.addItem("EFI_SECTION_COMPRESSION");\r
+            cb.addItem("EFI_SECTION_GUID_DEFINED");\r
+            cb.addItem("EFI_SECTION_COMPATIBILITY16");\r
+            cb.addItem("EFI_SECTION_FIRMWARE_VOLUME_IMAGE");\r
+            jTable3.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
+            jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            \r
+            jTable3.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    if (jTable.getSelectedRow() < 0 || jTable6.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    int row = arg0.getFirstRow();\r
+                    TableModel m = (TableModel)arg0.getSource();\r
+                    if (arg0.getType() == TableModelEvent.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String type = m.getValueAt(row, 0) + "";\r
+                        docConsole.setSaved(false);\r
+                        ffc.updateBuildOptionsFfsSectionsSectionsSection(jTable.getSelectedRow(), jTable6.getSelectedRow(), row, type);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jTree;\r
+        return jTable3;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton17       \r
+     * This method initializes jTextField      \r
      *         \r
-     * @return javax.swing.JButton     \r
+     * @return javax.swing.JTextField  \r
      */\r
-    private JButton getJButton17() {\r
-        if (jButton17 == null) {\r
-            jButton17 = new JButton();\r
-            jButton17.setPreferredSize(new java.awt.Dimension(70,20));\r
-            jButton17.setText("Add");\r
-            jButton17.addActionListener(new AbstractAction() {\r
-                public void actionPerformed(ActionEvent arg0){\r
-                    Object[] o = {"", ""};\r
-                    ffsAttributesTableModel.addRow(o);\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
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    ffc.updateBuildOptionsFfsSectionsType(jTable.getSelectedRow(), jTextField.getText());\r
                 }\r
             });\r
         }\r
-        return jButton17;\r
+        return jTextField;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton18       \r
+     * This method initializes jPanel4 \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanel4() {\r
+        if (jPanel4 == null) {\r
+            jPanel4 = new JPanel();\r
+            jPanel4.setPreferredSize(new java.awt.Dimension(100,100));\r
+            jPanel4.add(getJButton17(), null);\r
+            jPanel4.add(getJButton18(), null);\r
+        }\r
+        return jPanel4;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButton \r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton18() {\r
-        if (jButton18 == null) {\r
-            jButton18 = new JButton();\r
-            jButton18.setPreferredSize(new java.awt.Dimension(70,20));\r
-            jButton18.setText("Delete");\r
-            jButton18.addActionListener(new AbstractAction(){\r
-                public void actionPerformed(ActionEvent arg0){\r
-                    if (jTable4.getSelectedRow() >= 0){\r
-                        ffsAttributesTableModel.removeRow(jTable4.getSelectedRow());\r
+    private JButton getJButton() {\r
+        if (jButton == null) {\r
+            jButton = new JButton();\r
+            jButton.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton.setText("New");\r
+            jButton.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
                     }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = {"EFI_SECTION_RAW"};\r
+                    sectionTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSection(jTable.getSelectedRow(), row[0]);\r
                 }\r
             });\r
         }\r
-        return jButton18;\r
+        return jButton;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton19       \r
+     * This method initializes jButton1        \r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton19() {\r
-        if (jButton19 == null) {\r
-            jButton19 = new JButton();\r
-            jButton19.setPreferredSize(new java.awt.Dimension(75,20));\r
-            jButton19.setEnabled(false);\r
-            jButton19.setText("Update");\r
+    private JButton getJButton1() {\r
+        if (jButton1 == null) {\r
+            jButton1 = new JButton();\r
+            jButton1.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton1.setText("Remove");\r
+          \r
+            jButton1.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0 || jTable1.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    sectionTableModel.removeRow(jTable1.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSection(jTable.getSelectedRow(), jTable1.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jButton19;\r
+        return jButton1;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox9      \r
+     * This method initializes jButton2        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox9() {\r
-        if (jCheckBox9 == null) {\r
-            jCheckBox9 = new JCheckBox();\r
-            jCheckBox9.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBox9.setText("IA32");\r
+    private JButton getJButton2() {\r
+        if (jButton2 == null) {\r
+            jButton2 = new JButton();\r
+            jButton2.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton2.setText("New");\r
+            jButton2.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0 || jTable6.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = {"EFI_SECTION_RAW"};\r
+                    subsectionsTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSectionsSection(jTable.getSelectedRow(), jTable6.getSelectedRow(), row[0]);\r
+                    \r
+                }\r
+            });\r
         }\r
-        return jCheckBox9;\r
+        return jButton2;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox10     \r
+     * This method initializes jButton3        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox10() {\r
-        if (jCheckBox10 == null) {\r
-            jCheckBox10 = new JCheckBox();\r
-            jCheckBox10.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBox10.setText("IPF");\r
+    private JButton getJButton3() {\r
+        if (jButton3 == null) {\r
+            jButton3 = new JButton();\r
+            jButton3.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton3.setText("Remove");\r
+            jButton3.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0 || jTable6.getSelectedRow() < 0 || jTable3.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    subsectionsTableModel.removeRow(jTable3.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSectionsSection(jTable.getSelectedRow(), jTable6.getSelectedRow(), jTable3.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jCheckBox10;\r
+        return jButton3;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox11     \r
+     * This method initializes jButton6        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox11() {\r
-        if (jCheckBox11 == null) {\r
-            jCheckBox11 = new JCheckBox();\r
-            jCheckBox11.setText("X64");\r
-            jCheckBox11.setPreferredSize(new java.awt.Dimension(47,20));\r
+    private JButton getJButton6() {\r
+        if (jButton6 == null) {\r
+            jButton6 = new JButton();\r
+            jButton6.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton6.setText("New");\r
+            jButton6.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = {""};\r
+                    sectionsTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSections(jTable.getSelectedRow(), "");\r
+                }\r
+            });\r
         }\r
-        return jCheckBox11;\r
+        return jButton6;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox12     \r
+     * This method initializes jButton7        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox12() {\r
-        if (jCheckBox12 == null) {\r
-            jCheckBox12 = new JCheckBox();\r
-            jCheckBox12.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBox12.setText("EBC");\r
+    private JButton getJButton7() {\r
+        if (jButton7 == null) {\r
+            jButton7 = new JButton();\r
+            jButton7.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButton7.setText("Remove");\r
+            jButton7.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTable.getSelectedRow() < 0 || jTable6.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    sectionsTableModel.removeRow(jTable6.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSections(jTable.getSelectedRow(), jTable6.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jCheckBox12;\r
+        return jButton7;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox13     \r
+     * This method initializes jScrollPane4    \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JCheckBox getJCheckBox13() {\r
-        if (jCheckBox13 == null) {\r
-            jCheckBox13 = new JCheckBox();\r
-            jCheckBox13.setPreferredSize(new java.awt.Dimension(55,20));\r
-            jCheckBox13.setText("ARM");\r
+    private JScrollPane getJScrollPane4() {\r
+        if (jScrollPane4 == null) {\r
+            jScrollPane4 = new JScrollPane();\r
+            jScrollPane4.setPreferredSize(new java.awt.Dimension(500,80));\r
+            jScrollPane4.setViewportView(getJTable6());\r
         }\r
-        return jCheckBox13;\r
+        return jScrollPane4;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox14     \r
+     * This method initializes jTable6 \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JTable      \r
      */\r
-    private JCheckBox getJCheckBox14() {\r
-        if (jCheckBox14 == null) {\r
-            jCheckBox14 = new JCheckBox();\r
-            jCheckBox14.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBox14.setText("PPC");\r
+    private JTable getJTable6() {\r
+        if (jTable6 == null) {\r
+            sectionsTableModel = new DefaultTableModel();\r
+            sectionsTableModel.addColumn("EncapsulationType");\r
+            jTable6 = new JTable(sectionsTableModel);\r
+            jTable6.setRowHeight(20);\r
+            jTable6.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTable6.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
+                    }\r
+                    else{\r
+                        int sectionsRow = lsm.getMinSelectionIndex();\r
+                        if (jTable.getSelectedRow() < 0) {\r
+                            return;\r
+                        }\r
+                        subsectionsTableModel.setRowCount(0);\r
+                        ArrayList<String> al = new ArrayList<String>();\r
+                        ffc.getBuildOptionsFfsSectionsSectionsSection(jTable.getSelectedRow(), sectionsRow, al);\r
+                        for (int i = 0; i < al.size(); ++i) {\r
+                            String[] subsectionRow = {al.get(i)};\r
+                            subsectionsTableModel.addRow(subsectionRow);\r
+                        }\r
+                    }\r
+                }\r
+            });\r
+            \r
+            jTable6.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.UPDATE){\r
+                        //ToDo Data Validition check.\r
+                        String encapType = m.getValueAt(row, 0) + "";\r
+                        docConsole.setSaved(false);\r
+                        ffc.updateBuildOptionsFfsSectionsSections(jTable.getSelectedRow(), row, encapType);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox14;\r
+        return jTable6;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField12    \r
+     * This method initializes jButton12       \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JTextField getJTextField12() {\r
-        if (jTextField12 == null) {\r
-            jTextField12 = new JTextField();\r
-            jTextField12.setPreferredSize(new java.awt.Dimension(150,20));\r
+    private JButton getJButton12() {\r
+        if (jButton12 == null) {\r
+            jButton12 = new JButton();\r
+            jButton12.setPreferredSize(new Dimension(90, 20));\r
+            jButton12.setText("Browse");\r
+            jButton12.addActionListener(new AbstractAction() {\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent arg0) {\r
+                    //\r
+                    // Select files from current workspace\r
+                    //\r
+                    String dirPrefix = System.getenv("WORKSPACE");\r
+                    JFileChooser chooser = new JFileChooser(dirPrefix);\r
+                    File theFile = null;\r
+                    String headerDest = null;\r
+                    \r
+                    chooser.setMultiSelectionEnabled(false);\r
+                    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);\r
+                    int retval = chooser.showOpenDialog(frame);\r
+                    if (retval == JFileChooser.APPROVE_OPTION) {\r
+\r
+                        theFile = chooser.getSelectedFile();\r
+                        String file = theFile.getPath();\r
+                        if (!file.startsWith(dirPrefix)) {\r
+                            JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
+                            return;\r
+                        }\r
+                    }\r
+                    else {\r
+                        return;\r
+                    }\r
+                    \r
+                    headerDest = theFile.getPath();\r
+                    jTextField2.setText(headerDest.substring(dirPrefix.length()).replace('\\', '/'));\r
+               \r
+                }\r
+\r
+            });\r
         }\r
-        return jTextField12;\r
+        return jButton12;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField13    \r
+     * This method initializes jTextField1     \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField13() {\r
-        if (jTextField13 == null) {\r
-            jTextField13 = new JTextField();\r
-            jTextField13.setPreferredSize(new java.awt.Dimension(140,20));\r
+    private JTextField getJTextField1() {\r
+        if (jTextField1 == null) {\r
+            jTextField1 = new JTextField();\r
+            jTextField1.setPreferredSize(new java.awt.Dimension(85,20));\r
         }\r
-        return jTextField13;\r
+        return jTextField1;\r
     }\r
 \r
     /**\r
@@ -1449,10 +1731,38 @@ public class FpdBuildOptions extends IInternalFrame {
         ffc = new FpdFileContents(fpd);\r
         init(ffc);\r
     }\r
+    \r
+    public FpdBuildOptions(OpeningPlatformType opt) {\r
+        this(opt.getXmlFpd());\r
+        docConsole = opt;\r
+    }\r
 \r
     private void init(FpdFileContents ffc) {\r
         initOptionTable();\r
         initAntTaskTable();\r
+        initFfsTable();\r
+        this.addInternalFrameListener(new InternalFrameAdapter(){\r
+            public void internalFrameDeactivated(InternalFrameEvent e){\r
+                if (jTable.isEditing()) {\r
+                    jTable.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTable1.isEditing()) {\r
+                    jTable1.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTable2.isEditing()) {\r
+                    jTable2.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTable3.isEditing()) {\r
+                    jTable3.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTable4.isEditing()) {\r
+                    jTable4.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTable5.isEditing()) {\r
+                    jTable5.getCellEditor().stopCellEditing();\r
+                }\r
+            }\r
+        });\r
     }\r
     \r
     private void initOptionTable() {\r
@@ -1477,13 +1787,25 @@ public class FpdBuildOptions extends IInternalFrame {
             antTaskTableModel.addRow(saa[i]);\r
         }\r
     }\r
+    \r
+    private void initFfsTable(){\r
+        int ffsCount = ffc.getBuildOptionsFfsCount();\r
+        if (ffsCount < 0) {\r
+            return;\r
+        }\r
+        String[][] saa = new String[ffsCount][1];\r
+        ffc.getBuildOptionsFfsKey(saa);\r
+        for (int i = 0; i < saa.length; ++i) {\r
+            ffsTableModel.addRow(saa[i]);\r
+        }\r
+    }\r
     /**\r
      * This method initializes this\r
      * \r
      * @return void\r
      */\r
     private void initialize() {\r
-        this.setSize(722, 439);\r
+        this.setSize(722, 577);\r
         this.setTitle("FPD Build Options");\r
         this.setContentPane(getJContentPane());\r
     }\r