Started cleaning up the Build Options screen so that we can add some additional infor...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdBuildOptions.java
index f292d38c1cdb6b6f34180c2447ac17bba1db8a80..257699915b388aff2a712384beea1d0521dbde33 100644 (file)
@@ -15,6 +15,7 @@
 package org.tianocore.frameworkwizard.platform.ui;\r
 \r
 import java.awt.BorderLayout;\r
+import javax.swing.BoxLayout;\r
 \r
 import javax.swing.JPanel;\r
 import javax.swing.JTabbedPane;\r
@@ -48,6 +49,7 @@ import org.tianocore.PlatformSurfaceAreaDocument;
 import org.tianocore.frameworkwizard.common.DataValidation;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
+import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
 \r
 import java.io.File;\r
 import java.util.ArrayList;\r
@@ -60,154 +62,307 @@ import javax.swing.JSplitPane;
 \r
 public class FpdBuildOptions extends IInternalFrame {\r
 \r
+    private final int oneRowHeight = 20;\r
+\r
+    private final int twoRowHeight = 40;\r
+\r
+    private final int threeRowHeight = 60;\r
+\r
+    private final int sepHeight = 6;\r
+\r
+    private final int sepWidth = 10;\r
+\r
+    private final int buttonWidth = 90;\r
+\r
+    private final int rowOne = 12;\r
+\r
+    private final int dialogWidth = 600;\r
+\r
+    private final int rowTwo = rowOne + oneRowHeight + sepHeight;\r
+\r
+    private final int rowThree = rowTwo + oneRowHeight + sepHeight;\r
+\r
+    private final int rowFour = rowThree + oneRowHeight + sepHeight;\r
+\r
+    private final int rowFive = rowFour + oneRowHeight + sepHeight;\r
+\r
+    private final int rowSix = rowFive + oneRowHeight + sepHeight;\r
+\r
+    private final int rowSeven = rowSix + oneRowHeight + sepHeight;\r
+\r
+    private final int buttonRow = rowSeven + oneRowHeight + sepHeight + sepHeight;\r
+\r
+    private final int dialogHeight = buttonRow + twoRowHeight + twoRowHeight;\r
+\r
+    private final int lastButtonXLoc = dialogWidth - buttonWidth - sepWidth;\r
+\r
+    private final int next2LastButtonLoc = lastButtonXLoc - buttonWidth - sepWidth;\r
+\r
+    private final int firstButtonLoc = next2LastButtonLoc - buttonWidth - sepWidth;\r
+\r
+    private final int starColumn = 2;\r
+\r
+    private final int labelColumn = 12;\r
+\r
+    private final int fieldColumn = 168;\r
+\r
+    private final int labelWidth = 155;\r
+\r
+    private final int fieldWidth = 320;\r
+\r
     private static final long serialVersionUID = 1L;\r
+\r
     static JFrame frame;\r
+\r
     private JPanel jContentPane = null;\r
-    private JPanel jPanelContentSouth = null;\r
-    private JPanel jPanelContentNorth = null;\r
-    private JPanel jPanelContentWest = null;\r
-    private JPanel jPanelContentEast = null;\r
+\r
+    //    private JPanel jPanelContentSouth = null;\r
+\r
+    //    private JPanel jPanelContentNorth = null;\r
+\r
+    //    private JPanel jPanelContentWest = null;\r
+\r
+    //    private JPanel jPanelContentEast = null;\r
+\r
     private JTabbedPane jTabbedPane = null;\r
+\r
     private JPanel jPanelUserDef = null;\r
+\r
     private JPanel jPanelUserDefNorth = null;\r
+\r
     private JPanel jPanelUserDefCenter = null;\r
+\r
     private JTextField jTextFieldAntTaskFile = null;\r
+\r
     private JLabel jLabelAntTaskId = null;\r
+\r
     private JTextField jTextFieldAntTaskId = null;\r
+\r
     private JButton jButtonAntTaskAdd = null;\r
+\r
     private JButton jButtonAntTaskDel = null;\r
+\r
     private JTextField jTextFieldAntCmdOpts = null;\r
+\r
     private JScrollPane jScrollPaneAntTasks = null;\r
+\r
     private JTable jTableAntTasks = null;\r
+\r
     private DefaultTableModel ffsTableModel = null;\r
+\r
     private DefaultTableModel sectionsTableModel = null;\r
+\r
     private DefaultTableModel sectionTableModel = null;\r
+\r
     private DefaultTableModel subsectionsTableModel = null;\r
+\r
     private DefaultTableModel antTaskTableModel = null;\r
+\r
     private DefaultTableModel ffsAttributesTableModel = null;\r
+\r
     private DefaultTableModel optionsTableModel = null;\r
+\r
     private JPanel jPanelFfsTab = null;\r
+\r
     private JPanel jPanelFfsTabCenter = null;\r
+\r
     private JPanel jPanelFfsTabCenterN = null;\r
+\r
     private JPanel jPanelFfsTabCenterS = null;\r
+\r
     private JLabel jLabelFfsKey = null;\r
+\r
     private JTextField jTextFieldFfsKey = null;\r
+\r
     private JButton jButtonFfsAdd = null;\r
+\r
     private JButton jButtonFfsDel = null;\r
+\r
     private JScrollPane jScrollPaneFfsAttribs = null;\r
+\r
     private JTable jTableFfsAttribs = null;\r
+\r
     private JPanel jPanelOptionsTab = null;\r
+\r
     private JLabel jLabelOptionContents = null;\r
+\r
     private JTextField jTextFieldOptionContents = null;\r
+\r
     private JLabel jLabelToolChainFamily = null;\r
+\r
     private JLabel jLabelSupArch = null;\r
+\r
     private JLabel jLabelToolCmd = null;\r
+\r
     private JTextField jTextFieldToolCmd = null;\r
+\r
     private JScrollPane jScrollPaneOptions = null;\r
+\r
     private JTable jTableOptions = null;\r
+    \r
+    private JLabel jTitle = null;\r
+\r
     private JButton jButtonOptionsAdd = null;\r
+\r
     private JButton jButtonOptionsDel = null;\r
+\r
     private JButton jButtonFfsAttribNew = null;\r
+\r
     private JButton jButtonFfsAttribRemove = null;\r
+\r
     private FpdFileContents ffc = null;\r
+\r
     private OpeningPlatformType docConsole = null;\r
+\r
+    private JPanel jArchitectureSelections = null;\r
+\r
     private JCheckBox jCheckBoxIA32 = null;\r
+\r
     private JCheckBox jCheckBoxIpf = null;\r
+\r
     private JCheckBox jCheckBoxX64 = null;\r
+\r
     private JCheckBox jCheckBoxEBC = null;\r
+\r
     private JCheckBox jCheckBoxARM = null;\r
+\r
     private JCheckBox jCheckBoxPPC = null;\r
+\r
     private JLabel jLabelBuildTargets = null;\r
+\r
     private JTextField jTextFieldBuildTargets = null;\r
+\r
     private JTextField jTextFieldTagName = null;\r
+\r
     private JLabel jLabelTagName = null;\r
+\r
     private int selectedRow = -1;\r
+\r
     private JLabel jLabelAntTaskFile = null;\r
+\r
     private JLabel jLabelAntCmdOpts = null;\r
+\r
     private JScrollPane jScrollPaneFfs = null;\r
+\r
     private JTable jTableFfs = null;\r
+\r
     private JLabel jLabelFfsSection = null;\r
+\r
     private JScrollPane jScrollPaneFfsSection = null;\r
+\r
     private JTable jTableFfsSection = null;\r
+\r
     private JLabel jLabelFfsSubSections = null;\r
+\r
     private JScrollPane jScrollPaneFfsSubSection = null;\r
+\r
     private JTable jTableFfsSubSection = null;\r
+\r
     private JLabel jLabelEncapType = null;\r
+\r
     private JTextField jTextFieldEncapType = null;\r
+\r
     private JPanel jPanelFfsAttribButtonGroup = null;\r
+\r
     private JLabel jLabelFfsAttribs = null;\r
+\r
     private JButton jButtonFfsSectionNew = null;\r
+\r
     private JButton jButtonFfsSectionRemove = null;\r
+\r
     private JButton jButtonFfsSubSectionNew = null;\r
+\r
     private JButton jButtonFfsSubSectionRemove = null;\r
+\r
     private JLabel jLabelFfsSections = null;\r
+\r
     private JButton jButtonFfsSectionsNew = null;\r
+\r
     private JButton jButtonFfsSectionsRemove = null;\r
+\r
     private JScrollPane jScrollPaneFfsSections = null;\r
+\r
     private JTable jTableFfsSections = null;\r
+\r
     private JButton jButtonAntTaskFileBrowse = null;\r
+\r
     private JTextField jTextFieldToolChainFamily = null;\r
+\r
     private JSplitPane jSplitPaneFfsC = null;\r
+\r
     private JPanel jPanelFfsCTop = null;\r
+\r
     private JSplitPane jSplitPaneFfsCBottom = null;\r
+\r
     private JPanel jPanelFfsCBottomTop = null;\r
+\r
     private JPanel jPanelFfsCBottomBottom = null;\r
+\r
     private JPanel jPanelSectionN = null;\r
+\r
     private JPanel jPanelSectionC = null;\r
+\r
     private JPanel jPanelSectionsN = null;\r
+\r
     private JPanel jPanelSectionsC = null;\r
+\r
     private JPanel jPanelSubSectionN = null;\r
+\r
     private JPanel jPanelSubSectionC = null;\r
+\r
     private JPanel jPanelOptionsContainer = null;\r
+\r
     private JPanel jPanelUserDefCenterN = null;\r
+\r
     private JPanel jPanelUserDefCenterC = null;\r
+\r
     /**\r
      * This method initializes jPanel  \r
      *         \r
      * @return javax.swing.JPanel      \r
+     private JPanel getJPanelContentSouth() {\r
+     if (jPanelContentSouth == null) {\r
+     jPanelContentSouth = new JPanel();\r
+     }\r
+     return jPanelContentSouth;\r
+     }\r
      */\r
-    private JPanel getJPanelContentSouth() {\r
-        if (jPanelContentSouth == null) {\r
-            jPanelContentSouth = new JPanel();\r
-        }\r
-        return jPanelContentSouth;\r
-    }\r
 \r
     /**\r
      * This method initializes jPanel1 \r
      *         \r
      * @return javax.swing.JPanel      \r
+     private JPanel getJPanelContentNorth() {\r
+     if (jPanelContentNorth == null) {\r
+     jPanelContentNorth = new JPanel();\r
+     }\r
+     return jPanelContentNorth;\r
+     }\r
      */\r
-    private JPanel getJPanelContentNorth() {\r
-        if (jPanelContentNorth == null) {\r
-            jPanelContentNorth = new JPanel();\r
-        }\r
-        return jPanelContentNorth;\r
-    }\r
 \r
     /**\r
      * This method initializes jPanel2 \r
      *         \r
      * @return javax.swing.JPanel      \r
+     private JPanel getJPanelContentWest() {\r
+     if (jPanelContentWest == null) {\r
+     jPanelContentWest = new JPanel();\r
+     }\r
+     return jPanelContentWest;\r
+     }\r
      */\r
-    private JPanel getJPanelContentWest() {\r
-        if (jPanelContentWest == null) {\r
-            jPanelContentWest = new JPanel();\r
-        }\r
-        return jPanelContentWest;\r
-    }\r
 \r
     /**\r
      * This method initializes jPanel3 \r
      *         \r
      * @return javax.swing.JPanel      \r
+     private JPanel getJPanelContentEast() {\r
+     if (jPanelContentEast == null) {\r
+     jPanelContentEast = new JPanel();\r
+     }\r
+     return jPanelContentEast;\r
+     }\r
      */\r
-    private JPanel getJPanelContentEast() {\r
-        if (jPanelContentEast == null) {\r
-            jPanelContentEast = new JPanel();\r
-        }\r
-        return jPanelContentEast;\r
-    }\r
 \r
     /**\r
      * This method initializes jTabbedPane     \r
@@ -217,260 +372,117 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTabbedPane getJTabbedPane() {\r
         if (jTabbedPane == null) {\r
             jTabbedPane = new JTabbedPane();\r
-            jTabbedPane.addTab("FFS", null, getJPanelFfsTab(), null);\r
-            jTabbedPane.addTab("Options", null, getJPanelOptionsTab(), null);\r
+            jTabbedPane.addTab("Flash Filesystem Options", null, getJPanelFfsTab(), null);\r
+            jTabbedPane.addTab("Tool Arguments", null, getJPanelOptionsTab(), null);\r
             jTabbedPane.addTab("User Defined ANT Tasks", null, getJPanelUserDef(), null);\r
         }\r
         return jTabbedPane;\r
     }\r
 \r
-    \r
     /**\r
-     * This method initializes jPanel8 \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes this\r
+     * \r
+     * @return void\r
      */\r
-    private JPanel getJPanelUserDef() {\r
-        if (jPanelUserDef == null) {\r
-            jPanelUserDef = new JPanel();\r
-            jPanelUserDef.setLayout(new BorderLayout());\r
-            jPanelUserDef.add(getJPanelUserDefNorth(), java.awt.BorderLayout.NORTH);\r
-            jPanelUserDef.add(getJPanelUserDefCenter(), java.awt.BorderLayout.CENTER);\r
+    private void initialize() {\r
+        this.setSize(722, 577);\r
+        this.setTitle("Platform Build Options");\r
+        this.setContentPane(getJContentPane());\r
+    }\r
 \r
+    /**\r
+     * This method initializes jContentPane\r
+     * \r
+     * @return javax.swing.JPanel\r
+     */\r
+    private JPanel getJContentPane() {\r
+        if (jContentPane == null) {\r
+            jContentPane = new JPanel();\r
+            jContentPane.setLayout(new BorderLayout());\r
+            //            jContentPane.add(getJPanelContentSouth(), java.awt.BorderLayout.SOUTH);\r
+            //            jContentPane.add(getJPanelContentNorth(), java.awt.BorderLayout.NORTH);\r
+            //            jContentPane.add(getJPanelContentWest(), java.awt.BorderLayout.WEST);\r
+            //            jContentPane.add(getJPanelContentEast(), java.awt.BorderLayout.EAST);\r
+            jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
         }\r
-        return jPanelUserDef;\r
+        return jContentPane;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel9 \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * @param args\r
      */\r
-    private JPanel getJPanelUserDefNorth() {\r
-        if (jPanelUserDefNorth == null) {\r
-            jLabelAntTaskFile = new JLabel();\r
-            jLabelAntTaskFile.setText("ANT Task File");\r
-            jLabelAntTaskFile.setPreferredSize(new java.awt.Dimension(80,20));\r
-            FlowLayout flowLayout8 = new FlowLayout();\r
-            flowLayout8.setAlignment(java.awt.FlowLayout.CENTER);\r
-            jLabelAntTaskId = new JLabel();\r
-            jLabelAntTaskId.setText("ID");\r
-            jPanelUserDefNorth = new JPanel();\r
-            jPanelUserDefNorth.setLayout(flowLayout8);\r
-            jPanelUserDefNorth.add(jLabelAntTaskFile, null);\r
-            jPanelUserDefNorth.add(getJTextFieldAntTaskFile(), null);\r
-            jPanelUserDefNorth.add(getJButtonAntTaskFileBrowse(), null);\r
-            jPanelUserDefNorth.add(jLabelAntTaskId, null);\r
-            jPanelUserDefNorth.add(getJTextFieldAntTaskId(), null);\r
-        }\r
-        return jPanelUserDefNorth;\r
+    public static void main(String[] args) {\r
+        // TODO Auto-generated method stub\r
+        new FpdBuildOptions().setVisible(true);\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel11        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This is the default constructor\r
      */\r
-    private JPanel getJPanelUserDefCenter() {\r
-        if (jPanelUserDefCenter == null) {\r
-            jLabelAntCmdOpts = new JLabel();\r
-            jLabelAntCmdOpts.setText("ANT Command Options");\r
-            jLabelAntCmdOpts.setPreferredSize(new java.awt.Dimension(131,20));\r
-            jPanelUserDefCenter = new JPanel();\r
-            jPanelUserDefCenter.setLayout(new BorderLayout());\r
+    public FpdBuildOptions() {\r
+        super();\r
+        initialize();\r
+        this.setVisible(true);\r
+    }\r
 \r
-            jPanelUserDefCenter.add(getJPanelUserDefCenterN(), java.awt.BorderLayout.NORTH);\r
-            jPanelUserDefCenter.add(getJPanelUserDefCenterC(), java.awt.BorderLayout.CENTER);\r
-        }\r
-        return jPanelUserDefCenter;\r
+    public FpdBuildOptions(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
+        this();\r
+        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 (jTableFfs.isEditing()) {\r
+                    jTableFfs.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableFfsSection.isEditing()) {\r
+                    jTableFfsSection.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableAntTasks.isEditing()) {\r
+                    jTableAntTasks.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableFfsSubSection.isEditing()) {\r
+                    jTableFfsSubSection.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableFfsAttribs.isEditing()) {\r
+                    jTableFfsAttribs.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableOptions.isEditing()) {\r
+                    jTableOptions.getCellEditor().stopCellEditing();\r
+                }\r
+            }\r
+        });\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField2     \r
+     * This method initializes jPanel13        \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JPanel      \r
      */\r
-    private JTextField getJTextFieldAntTaskFile() {\r
-        if (jTextFieldAntTaskFile == null) {\r
-            jTextFieldAntTaskFile = new JTextField();\r
-            jTextFieldAntTaskFile.setPreferredSize(new java.awt.Dimension(200,20));\r
+    private JPanel getJPanelFfsTab() {\r
+        if (jPanelFfsTab == null) {\r
+            jPanelFfsTab = new JPanel();\r
+            jPanelFfsTab.setLayout(new BorderLayout());\r
+            jPanelFfsTab.add(getJPanelFfsTabCenter(), java.awt.BorderLayout.CENTER);\r
+            jPanelFfsTab.add(getJScrollPaneFfs(), java.awt.BorderLayout.WEST);\r
         }\r
-        return jTextFieldAntTaskFile;\r
+        return jPanelFfsTab;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField3     \r
+     * This method initializes jPanel18        \r
      *         \r
-     * @return javax.swing.JTextField  \r
-     */\r
-    private JTextField getJTextFieldAntTaskId() {\r
-        if (jTextFieldAntTaskId == null) {\r
-            jTextFieldAntTaskId = new JTextField();\r
-            jTextFieldAntTaskId.setPreferredSize(new java.awt.Dimension(100,20));\r
-        }\r
-        return jTextFieldAntTaskId;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jButton4        \r
-     *         \r
-     * @return javax.swing.JButton     \r
-     */\r
-    private JButton getJButtonAntTaskAdd() {\r
-        if (jButtonAntTaskAdd == null) {\r
-            jButtonAntTaskAdd = new JButton();\r
-            jButtonAntTaskAdd.setPreferredSize(new java.awt.Dimension(90,20));\r
-            jButtonAntTaskAdd.setText("Add");\r
-            jButtonAntTaskAdd.addActionListener(new ActionListener() {\r
-                public void actionPerformed(ActionEvent e) {\r
-                    if (!DataValidation.isInt(jTextFieldAntTaskId.getText()) || jTextFieldAntTaskId.getText().length() != 8) {\r
-                        JOptionPane.showMessageDialog(frame, "ID must be an 8-digit integer.");\r
-                        return;\r
-                    }\r
-                    Object[] o = {jTextFieldAntTaskId.getText(), null, null};\r
-                        o[1] = jTextFieldAntTaskFile.getText();\r
-                        o[2] = jTextFieldAntCmdOpts.getText();\r
-                        ffc.genBuildOptionsUserDefAntTask(o[0]+"", o[1]+"", o[2]+"");\r
-                    antTaskTableModel.addRow(o);\r
-                    docConsole.setSaved(false);\r
-                }\r
-            });\r
-        }\r
-        return jButtonAntTaskAdd;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jButton5        \r
-     *         \r
-     * @return javax.swing.JButton     \r
-     */\r
-    private JButton getJButtonAntTaskDel() {\r
-        if (jButtonAntTaskDel == null) {\r
-            jButtonAntTaskDel = new JButton();\r
-            jButtonAntTaskDel.setPreferredSize(new java.awt.Dimension(90,20));\r
-            jButtonAntTaskDel.setText("Delete");\r
-            jButtonAntTaskDel.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
-                }\r
-            });\r
-        }\r
-        return jButtonAntTaskDel;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jTextField4     \r
-     *         \r
-     * @return javax.swing.JTextField  \r
-     */\r
-    private JTextField getJTextFieldAntCmdOpts() {\r
-        if (jTextFieldAntCmdOpts == null) {\r
-            jTextFieldAntCmdOpts = new JTextField();\r
-            jTextFieldAntCmdOpts.setPreferredSize(new java.awt.Dimension(270,20));\r
-            jTextFieldAntCmdOpts.setEnabled(true);\r
-        }\r
-        return jTextFieldAntCmdOpts;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jScrollPane2    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
-     */\r
-    private JScrollPane getJScrollPaneAntTasks() {\r
-        if (jScrollPaneAntTasks == null) {\r
-            jScrollPaneAntTasks = new JScrollPane();\r
-            jScrollPaneAntTasks.setPreferredSize(new java.awt.Dimension(600,400));\r
-            jScrollPaneAntTasks.setViewportView(getJTableAntTasks());\r
-        }\r
-        return jScrollPaneAntTasks;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jTable2 \r
-     *         \r
-     * @return javax.swing.JTable      \r
-     */\r
-    private JTable getJTableAntTasks() {\r
-        if (jTableAntTasks == null) {\r
-            antTaskTableModel = new DefaultTableModel();\r
-            jTableAntTasks = new JTable(antTaskTableModel);\r
-            jTableAntTasks.setRowHeight(20);\r
-            antTaskTableModel.addColumn("ID");\r
-            antTaskTableModel.addColumn("Filename");\r
-            antTaskTableModel.addColumn("ANT Command Options");\r
-            \r
-            jTableAntTasks.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTableAntTasks.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
-                public void valueChanged(ListSelectionEvent e) {\r
-                    selectedRow = -1;\r
-                    if (e.getValueIsAdjusting()){\r
-                        return;\r
-                    }\r
-                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
-                    if (lsm.isSelectionEmpty()) {\r
-                        return;\r
-                    }\r
-                    else{\r
-                        selectedRow = lsm.getMinSelectionIndex();\r
-                    }\r
-                }\r
-            });\r
-            \r
-            jTableAntTasks.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
-                        String file = m.getValueAt(row, 1) + "";\r
-                        String execOrder = m.getValueAt(row, 2) + "";\r
-                        if (id.length() == 0) {\r
-                            return;\r
-                        }\r
-                        if (file.length() == 0 && execOrder.length() == 0){\r
-                            return;\r
-                        }\r
-                        if (file.length() == 0) {\r
-                            file = null;\r
-                        }\r
-                        if (execOrder.length() == 0) {\r
-                            execOrder = null;\r
-                        }\r
-                        ffc.updateBuildOptionsUserDefAntTask(row, id, file, execOrder);\r
-                        \r
-                    }\r
-                }\r
-            });\r
-        }\r
-        return jTableAntTasks;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jPanel13        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
-     */\r
-    private JPanel getJPanelFfsTab() {\r
-        if (jPanelFfsTab == null) {\r
-            jPanelFfsTab = new JPanel();\r
-            jPanelFfsTab.setLayout(new BorderLayout());\r
-            jPanelFfsTab.add(getJPanelFfsTabCenter(), java.awt.BorderLayout.CENTER);\r
-            jPanelFfsTab.add(getJScrollPaneFfs(), java.awt.BorderLayout.WEST);\r
-        }\r
-        return jPanelFfsTab;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jPanel18        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * @return javax.swing.JPanel      \r
      */\r
     private JPanel getJPanelFfsTabCenter() {\r
         if (jPanelFfsTabCenter == null) {\r
@@ -522,7 +534,7 @@ public class FpdBuildOptions extends IInternalFrame {
             flowLayout6.setVgap(20);\r
             flowLayout6.setAlignment(java.awt.FlowLayout.CENTER);\r
             jPanelFfsTabCenterS = new JPanel();\r
-            jPanelFfsTabCenterS.setPreferredSize(new java.awt.Dimension(491,130));\r
+            jPanelFfsTabCenterS.setPreferredSize(new java.awt.Dimension(491, 130));\r
             jPanelFfsTabCenterS.setLayout(flowLayout6);\r
             jPanelFfsTabCenterS.add(jLabelFfsAttribs, null);\r
             jPanelFfsTabCenterS.add(getJScrollPaneFfsAttribs(), null);\r
@@ -539,14 +551,14 @@ public class FpdBuildOptions extends IInternalFrame {
     private JTextField getJTextFieldFfsKey() {\r
         if (jTextFieldFfsKey == null) {\r
             jTextFieldFfsKey = new JTextField();\r
-            jTextFieldFfsKey.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextFieldFfsKey.setPreferredSize(new java.awt.Dimension(100, 20));\r
             jTextFieldFfsKey.setEditable(true);\r
             jTextFieldFfsKey.addFocusListener(new java.awt.event.FocusAdapter() {\r
                 public void focusLost(java.awt.event.FocusEvent e) {\r
                     if (jTableFfs.getSelectedRow() < 0) {\r
                         return;\r
                     }\r
-//                    ffc.updateBuildOptionsFfsKey(jTable.getSelectedRow(), jTextField6.getText());\r
+                    //                    ffc.updateBuildOptionsFfsKey(jTable.getSelectedRow(), jTextField6.getText());\r
                 }\r
             });\r
         }\r
@@ -561,7 +573,7 @@ public class FpdBuildOptions extends IInternalFrame {
     private JButton getJButtonFfsAdd() {\r
         if (jButtonFfsAdd == null) {\r
             jButtonFfsAdd = new JButton();\r
-            jButtonFfsAdd.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButtonFfsAdd.setPreferredSize(new java.awt.Dimension(70, 20));\r
             jButtonFfsAdd.setText("Add");\r
             jButtonFfsAdd.addActionListener(new AbstractAction() {\r
                 /**\r
@@ -571,7 +583,7 @@ public class FpdBuildOptions extends IInternalFrame {
 \r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     if (jTextFieldFfsKey.getText().length() > 0) {\r
-                        String[] row = {jTextFieldFfsKey.getText()};\r
+                        String[] row = { jTextFieldFfsKey.getText() };\r
                         ffsTableModel.addRow(row);\r
                         docConsole.setSaved(false);\r
                         ffc.genBuildOptionsFfs(jTextFieldFfsKey.getText(), jTextFieldEncapType.getText());\r
@@ -590,7 +602,7 @@ public class FpdBuildOptions extends IInternalFrame {
     private JButton getJButtonFfsDel() {\r
         if (jButtonFfsDel == null) {\r
             jButtonFfsDel = new JButton();\r
-            jButtonFfsDel.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jButtonFfsDel.setPreferredSize(new java.awt.Dimension(70, 20));\r
             jButtonFfsDel.setText("Delete");\r
             jButtonFfsDel.addActionListener(new AbstractAction() {\r
                 /**\r
@@ -598,7 +610,7 @@ public class FpdBuildOptions extends IInternalFrame {
                  */\r
                 private static final long serialVersionUID = -4002678939178194476L;\r
 \r
-                public void actionPerformed(ActionEvent arg0){\r
+                public void actionPerformed(ActionEvent arg0) {\r
                     if (jTableFfs.getSelectedRow() < 0) {\r
                         return;\r
                     }\r
@@ -619,7 +631,7 @@ public class FpdBuildOptions extends IInternalFrame {
     private JScrollPane getJScrollPaneFfsAttribs() {\r
         if (jScrollPaneFfsAttribs == null) {\r
             jScrollPaneFfsAttribs = new JScrollPane();\r
-            jScrollPaneFfsAttribs.setPreferredSize(new java.awt.Dimension(350,100));\r
+            jScrollPaneFfsAttribs.setPreferredSize(new java.awt.Dimension(350, 100));\r
             jScrollPaneFfsAttribs.setViewportView(getJTableFfsAttribs());\r
         }\r
         return jScrollPaneFfsAttribs;\r
@@ -634,26 +646,26 @@ public class FpdBuildOptions extends IInternalFrame {
         if (jTableFfsAttribs == null) {\r
             ffsAttributesTableModel = new DefaultTableModel();\r
             jTableFfsAttribs = new JTable(ffsAttributesTableModel);\r
-            jTableFfsAttribs.setPreferredSize(new java.awt.Dimension(400,80));\r
+            jTableFfsAttribs.setPreferredSize(new java.awt.Dimension(400, 80));\r
             jTableFfsAttribs.setRowHeight(20);\r
             ffsAttributesTableModel.addColumn("Name");\r
             ffsAttributesTableModel.addColumn("Value");\r
-            \r
+\r
             jTableFfsAttribs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             jTableFfsAttribs.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
+                    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
+\r
                         if (name.length() == 0) {\r
                             return;\r
                         }\r
-                        if (value.length() == 0){\r
+                        if (value.length() == 0) {\r
                             return;\r
                         }\r
                         docConsole.setSaved(false);\r
@@ -665,1166 +677,1289 @@ public class FpdBuildOptions extends IInternalFrame {
         return jTableFfsAttribs;\r
     }\r
 \r
-    /**\r
-     * This method initializes jPanel20        \r
-     *         \r
-     * @return javax.swing.JPanel      \r
-     */\r
-    private JPanel getJPanelOptionsTab() {\r
-        if (jPanelOptionsTab == null) {\r
-            jLabelTagName = new JLabel();\r
-            jLabelTagName.setText("Tag Name");\r
-            FlowLayout flowLayout9 = new FlowLayout();\r
-            flowLayout9.setAlignment(java.awt.FlowLayout.LEFT);\r
-            jLabelBuildTargets = new JLabel();\r
-            jLabelBuildTargets.setText("Build Targets");\r
-            jLabelToolCmd = new JLabel();\r
-            jLabelToolCmd.setText("Tool Command");\r
-            jLabelSupArch = new JLabel();\r
-            jLabelSupArch.setText("Supported Arch");\r
-            jLabelToolChainFamily = new JLabel();\r
-            jLabelToolChainFamily.setText("Tool Chain Family");\r
-            jLabelOptionContents = new JLabel();\r
-            jLabelOptionContents.setText("Option Contents");\r
-            jPanelOptionsTab = new JPanel();\r
-            jPanelOptionsTab.setLayout(flowLayout9);\r
-            jPanelOptionsTab.add(getJPanelOptionsContainer(), null);\r
-            jPanelOptionsTab.add(getJScrollPaneOptions(), null);\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
-        return jPanelOptionsTab;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField7     \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jButton17    \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JTextField getJTextFieldOptionContents() {\r
-        if (jTextFieldOptionContents == null) {\r
-            jTextFieldOptionContents = new JTextField();\r
-            jTextFieldOptionContents.setPreferredSize(new java.awt.Dimension(300,20));\r
+    private JButton getJButtonFfsAttribNew() {\r
+        if (jButtonFfsAttribNew == null) {\r
+            jButtonFfsAttribNew = new JButton();\r
+            jButtonFfsAttribNew.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsAttribNew.setText("New");\r
+            jButtonFfsAttribNew.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent arg0) {\r
+                    if (jTableFfs.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    Object[] o = { "", "" };\r
+                    ffsAttributesTableModel.addRow(o);\r
+                    docConsole.setSaved(false);\r
+                    ffc.genBuildOptionsFfsAttribute(jTableFfs.getSelectedRow(), "", "");\r
+                }\r
+            });\r
         }\r
-        return jTextFieldOptionContents;\r
+        return jButtonFfsAttribNew;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField8     \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jButton18    \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JTextField getJTextFieldToolCmd() {\r
-        if (jTextFieldToolCmd == null) {\r
-            jTextFieldToolCmd = new JTextField();\r
-            jTextFieldToolCmd.setPreferredSize(new java.awt.Dimension(110,20));\r
+    private JButton getJButtonFfsAttribRemove() {\r
+        if (jButtonFfsAttribRemove == null) {\r
+            jButtonFfsAttribRemove = new JButton();\r
+            jButtonFfsAttribRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsAttribRemove.setText("Remove");\r
+            jButtonFfsAttribRemove.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent arg0) {\r
+                    if (jTableFfs.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    if (jTableFfsAttribs.getSelectedRow() >= 0) {\r
+                        docConsole.setSaved(false);\r
+                        ffsAttributesTableModel.removeRow(jTableFfsAttribs.getSelectedRow());\r
+                        ffc.removeBuildOptionsFfsAttribute(jTableFfs.getSelectedRow(),\r
+                                                           jTableFfsAttribs.getSelectedRow());\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jTextFieldToolCmd;\r
+        return jButtonFfsAttribRemove;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane6    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
+     * This method initializes jScrollPane  \r
+     *  \r
+     * @return javax.swing.JScrollPane  \r
      */\r
-    private JScrollPane getJScrollPaneOptions() {\r
-        if (jScrollPaneOptions == null) {\r
-            jScrollPaneOptions = new JScrollPane();\r
-            jScrollPaneOptions.setPreferredSize(new java.awt.Dimension(650,400));\r
-            jScrollPaneOptions.setViewportView(getJTableOptions());\r
+    private JScrollPane getJScrollPaneFfs() {\r
+        if (jScrollPaneFfs == null) {\r
+            jScrollPaneFfs = new JScrollPane();\r
+            jScrollPaneFfs.setPreferredSize(new java.awt.Dimension(150, 419));\r
+            jScrollPaneFfs.setViewportView(getJTableFfs());\r
         }\r
-        return jScrollPaneOptions;\r
+        return jScrollPaneFfs;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable5 \r
-     *         \r
-     * @return javax.swing.JTable      \r
+     * This method initializes jTable   \r
+     *  \r
+     * @return javax.swing.JTable   \r
      */\r
-    private JTable getJTableOptions() {\r
-        if (jTableOptions == null) {\r
-            optionsTableModel = new DefaultTableModel();\r
-            jTableOptions = new JTable(optionsTableModel);\r
-            jTableOptions.setRowHeight(20);\r
-            optionsTableModel.addColumn("BuildTargets");\r
-            optionsTableModel.addColumn("ToolChainFamily");\r
-            optionsTableModel.addColumn("SupportedArch");\r
-            optionsTableModel.addColumn("ToolCommand");\r
-            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
-            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
-            jTableOptions.getColumnModel().getColumn(2).setCellEditor(new ListEditor(vArch));\r
-            jTableOptions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTableOptions.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+    private JTable getJTableFfs() {\r
+        if (jTableFfs == null) {\r
+            ffsTableModel = new DefaultTableModel();\r
+            ffsTableModel.addColumn("FFS Type");\r
+            jTableFfs = new JTable(ffsTableModel);\r
+            jTableFfs.setShowGrid(false);\r
+            jTableFfs.setRowHeight(20);\r
+\r
+            jTableFfs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFfs.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
                 public void valueChanged(ListSelectionEvent e) {\r
-                    selectedRow = -1;\r
-                    if (e.getValueIsAdjusting()){\r
+\r
+                    if (e.getValueIsAdjusting()) {\r
                         return;\r
                     }\r
-                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
+                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
                     if (lsm.isSelectionEmpty()) {\r
                         return;\r
-                    }\r
-                    else{\r
-                        selectedRow = lsm.getMinSelectionIndex();\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
+                        jTextFieldFfsKey.setText(sArray[0]);\r
+                        jTextFieldEncapType.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
-            jTableOptions.getModel().addTableModelListener(new TableModelListener() {\r
+\r
+            jTableFfs.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
+                    TableModel m = (TableModel) arg0.getSource();\r
+                    if (arg0.getType() == TableModelEvent.UPDATE) {\r
                         //ToDo Data Validition check.\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 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
+                        String id = m.getValueAt(row, 0) + "";\r
+\r
+                        if (id.length() == 0) {\r
+                            return;\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
+                        ffc.updateBuildOptionsFfsKey(row, id);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jTableOptions;\r
+        return jTableFfs;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton10       \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jScrollPane1 \r
+     *  \r
+     * @return javax.swing.JScrollPane  \r
      */\r
-    private JButton getJButtonOptionsAdd() {\r
-        if (jButtonOptionsAdd == null) {\r
-            jButtonOptionsAdd = new JButton();\r
-            jButtonOptionsAdd.setText("Add");\r
-            jButtonOptionsAdd.setPreferredSize(new java.awt.Dimension(90,20));\r
-            jButtonOptionsAdd.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 = {jCheckBoxIA32.isSelected(),jCheckBoxIpf.isSelected(),jCheckBoxX64.isSelected(),\r
-                                           jCheckBoxEBC.isSelected(),jCheckBoxARM.isSelected(),jCheckBoxPPC.isSelected()};\r
-                    String s = boolToList(boolArray);\r
-                    Object[] o = {jTextFieldBuildTargets.getText(), jTextFieldToolChainFamily.getText(), s,\r
-                                  jTextFieldToolCmd.getText(), jTextFieldTagName.getText(), jTextFieldOptionContents.getText()};\r
-                    optionsTableModel.addRow(o);\r
-                    docConsole.setSaved(false);\r
-                    ffc.genBuildOptionsOpt(stringToVector(jTextFieldBuildTargets.getText()), jTextFieldToolChainFamily.getText(), jTextFieldTagName.getText(), jTextFieldToolCmd.getText(),  stringToVector(s), jTextFieldOptionContents.getText());\r
-                }\r
-            });\r
-        }\r
-        return jButtonOptionsAdd;\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
-            s += "IA32 ";\r
-        }\r
-        if (bool[1]) {\r
-            s += "IPF ";\r
-        }\r
-        if (bool[2]) {\r
-            s += "X64 ";\r
-        }\r
-        if (bool[3]) {\r
-            s += "EBC ";\r
-        }\r
-        if (bool[4]) {\r
-            s += "ARM ";\r
-        }\r
-        if (bool[5]) {\r
-            s += "PPC ";\r
-        }\r
-        if (s == " ") {\r
-            s += "IA32";\r
+    private JScrollPane getJScrollPaneFfsSection() {\r
+        if (jScrollPaneFfsSection == null) {\r
+            jScrollPaneFfsSection = new JScrollPane();\r
+            jScrollPaneFfsSection.setPreferredSize(new java.awt.Dimension(500, 80));\r
+            jScrollPaneFfsSection.setViewportView(getJTableFfsSection());\r
         }\r
-        return s.trim();\r
+        return jScrollPaneFfsSection;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton11       \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jTable1  \r
+     *  \r
+     * @return javax.swing.JTable   \r
      */\r
-    private JButton getJButtonOptionsDel() {\r
-        if (jButtonOptionsDel == null) {\r
-            jButtonOptionsDel = new JButton();\r
-            jButtonOptionsDel.setText("Delete");\r
-            jButtonOptionsDel.setPreferredSize(new java.awt.Dimension(90,20));\r
-            jButtonOptionsDel.addActionListener(new AbstractAction() {\r
-                /**\r
-                 * \r
-                 */\r
-                private static final long serialVersionUID = 1L;\r
+    private JTable getJTableFfsSection() {\r
+        if (jTableFfsSection == null) {\r
+            sectionTableModel = new DefaultTableModel();\r
+            sectionTableModel.addColumn("SectionType");\r
 \r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (selectedRow >= 0) {\r
-                        optionsTableModel.removeRow(selectedRow);\r
+            jTableFfsSection = new JTable(sectionTableModel);\r
+            jTableFfsSection.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
+            jTableFfsSection.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
+\r
+            jTableFfsSection.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+\r
+            jTableFfsSection.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    if (jTableFfs.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.removeBuildOptionsOpt(selectedRow);\r
+                        ffc.updateBuildOptionsFfsSectionsSection(jTableFfs.getSelectedRow(), row, type);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButtonOptionsDel;\r
+        return jTableFfsSection;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton17       \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jScrollPane3 \r
+     *  \r
+     * @return javax.swing.JScrollPane  \r
      */\r
-    private JButton getJButtonFfsAttribNew() {\r
-        if (jButtonFfsAttribNew == null) {\r
-            jButtonFfsAttribNew = new JButton();\r
-            jButtonFfsAttribNew.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsAttribNew.setText("New");\r
-            jButtonFfsAttribNew.addActionListener(new AbstractAction() {\r
-                /**\r
-                 * \r
-                 */\r
-                private static final long serialVersionUID = 1L;\r
-\r
-                public void actionPerformed(ActionEvent arg0){\r
-                    if (jTableFfs.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    Object[] o = {"", ""};\r
-                    ffsAttributesTableModel.addRow(o);\r
-                    docConsole.setSaved(false);\r
-                    ffc.genBuildOptionsFfsAttribute(jTableFfs.getSelectedRow(), "", "");\r
-                }\r
-            });\r
+    private JScrollPane getJScrollPaneFfsSubSection() {\r
+        if (jScrollPaneFfsSubSection == null) {\r
+            jScrollPaneFfsSubSection = new JScrollPane();\r
+            jScrollPaneFfsSubSection.setPreferredSize(new java.awt.Dimension(500, 90));\r
+            jScrollPaneFfsSubSection.setViewportView(getJTableFfsSubSection());\r
         }\r
-        return jButtonFfsAttribNew;\r
+        return jScrollPaneFfsSubSection;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton18       \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jTable3  \r
+     *  \r
+     * @return javax.swing.JTable   \r
      */\r
-    private JButton getJButtonFfsAttribRemove() {\r
-        if (jButtonFfsAttribRemove == null) {\r
-            jButtonFfsAttribRemove = new JButton();\r
-            jButtonFfsAttribRemove.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsAttribRemove.setText("Remove");\r
-            jButtonFfsAttribRemove.addActionListener(new AbstractAction(){\r
-                /**\r
-                 * \r
-                 */\r
-                private static final long serialVersionUID = 1L;\r
+    private JTable getJTableFfsSubSection() {\r
+        if (jTableFfsSubSection == null) {\r
+            subsectionsTableModel = new DefaultTableModel();\r
+            subsectionsTableModel.addColumn("SectionType");\r
+            jTableFfsSubSection = new JTable(subsectionsTableModel);\r
+            jTableFfsSubSection.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
+            jTableFfsSubSection.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
+            jTableFfsSubSection.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
 \r
-                public void actionPerformed(ActionEvent arg0){\r
-                    if (jTableFfs.getSelectedRow() < 0) {\r
+            jTableFfsSubSection.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0) {\r
                         return;\r
                     }\r
-                    if (jTableFfsAttribs.getSelectedRow() >= 0){\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
-                        ffsAttributesTableModel.removeRow(jTableFfsAttribs.getSelectedRow());\r
-                        ffc.removeBuildOptionsFfsAttribute(jTableFfs.getSelectedRow(), jTableFfsAttribs.getSelectedRow());\r
+                        ffc.updateBuildOptionsFfsSectionsSectionsSection(jTableFfs.getSelectedRow(),\r
+                                                                         jTableFfsSections.getSelectedRow(), row, type);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButtonFfsAttribRemove;\r
+        return jTableFfsSubSection;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox9      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jTextField   \r
+     *  \r
+     * @return javax.swing.JTextField   \r
      */\r
-    private JCheckBox getJCheckBoxIA32() {\r
-        if (jCheckBoxIA32 == null) {\r
-            jCheckBoxIA32 = new JCheckBox();\r
-            jCheckBoxIA32.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBoxIA32.setText("IA32");\r
+    private JTextField getJTextFieldEncapType() {\r
+        if (jTextFieldEncapType == null) {\r
+            jTextFieldEncapType = new JTextField();\r
+            jTextFieldEncapType.setPreferredSize(new java.awt.Dimension(100, 20));\r
+            jTextFieldEncapType.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    ffc.updateBuildOptionsFfsSectionsType(jTableFfs.getSelectedRow(), jTextFieldEncapType.getText());\r
+                }\r
+            });\r
         }\r
-        return jCheckBoxIA32;\r
+        return jTextFieldEncapType;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox10     \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jPanel4  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JCheckBox getJCheckBoxIpf() {\r
-        if (jCheckBoxIpf == null) {\r
-            jCheckBoxIpf = new JCheckBox();\r
-            jCheckBoxIpf.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBoxIpf.setText("IPF");\r
+    private JPanel getJPanelFfsAttribButtonGroup() {\r
+        if (jPanelFfsAttribButtonGroup == null) {\r
+            jPanelFfsAttribButtonGroup = new JPanel();\r
+            jPanelFfsAttribButtonGroup.setPreferredSize(new java.awt.Dimension(100, 100));\r
+            jPanelFfsAttribButtonGroup.add(getJButtonFfsAttribNew(), null);\r
+            jPanelFfsAttribButtonGroup.add(getJButtonFfsAttribRemove(), null);\r
         }\r
-        return jCheckBoxIpf;\r
+        return jPanelFfsAttribButtonGroup;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox11     \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jButton  \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JCheckBox getJCheckBoxX64() {\r
-        if (jCheckBoxX64 == null) {\r
-            jCheckBoxX64 = new JCheckBox();\r
-            jCheckBoxX64.setText("X64");\r
-            jCheckBoxX64.setPreferredSize(new java.awt.Dimension(47,20));\r
+    private JButton getJButtonFfsSectionNew() {\r
+        if (jButtonFfsSectionNew == null) {\r
+            jButtonFfsSectionNew = new JButton();\r
+            jButtonFfsSectionNew.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSectionNew.setText("New");\r
+            jButtonFfsSectionNew.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = { "EFI_SECTION_RAW" };\r
+                    sectionTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSection(jTableFfs.getSelectedRow(), row[0]);\r
+                }\r
+            });\r
         }\r
-        return jCheckBoxX64;\r
+        return jButtonFfsSectionNew;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox12     \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jButton1 \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JCheckBox getJCheckBoxEBC() {\r
-        if (jCheckBoxEBC == null) {\r
-            jCheckBoxEBC = new JCheckBox();\r
-            jCheckBoxEBC.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBoxEBC.setText("EBC");\r
+    private JButton getJButtonFfsSectionRemove() {\r
+        if (jButtonFfsSectionRemove == null) {\r
+            jButtonFfsSectionRemove = new JButton();\r
+            jButtonFfsSectionRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSectionRemove.setText("Remove");\r
+\r
+            jButtonFfsSectionRemove.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSection.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    sectionTableModel.removeRow(jTableFfsSection.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSection(jTableFfs.getSelectedRow(),\r
+                                                             jTableFfsSection.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jCheckBoxEBC;\r
+        return jButtonFfsSectionRemove;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox13     \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jButton2 \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JCheckBox getJCheckBoxARM() {\r
-        if (jCheckBoxARM == null) {\r
-            jCheckBoxARM = new JCheckBox();\r
-            jCheckBoxARM.setPreferredSize(new java.awt.Dimension(55,20));\r
-            jCheckBoxARM.setText("ARM");\r
+    private JButton getJButtonFfsSubSectionNew() {\r
+        if (jButtonFfsSubSectionNew == null) {\r
+            jButtonFfsSubSectionNew = new JButton();\r
+            jButtonFfsSubSectionNew.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSubSectionNew.setText("New");\r
+            jButtonFfsSubSectionNew.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = { "EFI_SECTION_RAW" };\r
+                    subsectionsTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSectionsSection(jTableFfs.getSelectedRow(),\r
+                                                                  jTableFfsSections.getSelectedRow(), row[0]);\r
+\r
+                }\r
+            });\r
         }\r
-        return jCheckBoxARM;\r
+        return jButtonFfsSubSectionNew;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox14     \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
+     * This method initializes jButton3 \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JCheckBox getJCheckBoxPPC() {\r
-        if (jCheckBoxPPC == null) {\r
-            jCheckBoxPPC = new JCheckBox();\r
-            jCheckBoxPPC.setPreferredSize(new java.awt.Dimension(50,20));\r
-            jCheckBoxPPC.setText("PPC");\r
+    private JButton getJButtonFfsSubSectionRemove() {\r
+        if (jButtonFfsSubSectionRemove == null) {\r
+            jButtonFfsSubSectionRemove = new JButton();\r
+            jButtonFfsSubSectionRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSubSectionRemove.setText("Remove");\r
+            jButtonFfsSubSectionRemove.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0\r
+                        || jTableFfsSubSection.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    subsectionsTableModel.removeRow(jTableFfsSubSection.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSectionsSection(jTableFfs.getSelectedRow(),\r
+                                                                     jTableFfsSections.getSelectedRow(),\r
+                                                                     jTableFfsSubSection.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jCheckBoxPPC;\r
+        return jButtonFfsSubSectionRemove;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField12    \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jButton6 \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JTextField getJTextFieldBuildTargets() {\r
-        if (jTextFieldBuildTargets == null) {\r
-            jTextFieldBuildTargets = new JTextField();\r
-            jTextFieldBuildTargets.setPreferredSize(new java.awt.Dimension(150,20));\r
+    private JButton getJButtonFfsSectionsNew() {\r
+        if (jButtonFfsSectionsNew == null) {\r
+            jButtonFfsSectionsNew = new JButton();\r
+            jButtonFfsSectionsNew.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSectionsNew.setText("New");\r
+            jButtonFfsSectionsNew.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    String[] row = { "" };\r
+                    sectionsTableModel.addRow(row);\r
+                    ffc.genBuildOptionsFfsSectionsSections(jTableFfs.getSelectedRow(), "");\r
+                }\r
+            });\r
         }\r
-        return jTextFieldBuildTargets;\r
+        return jButtonFfsSectionsNew;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField13    \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jButton7 \r
+     *  \r
+     * @return javax.swing.JButton  \r
      */\r
-    private JTextField getJTextFieldTagName() {\r
-        if (jTextFieldTagName == null) {\r
-            jTextFieldTagName = new JTextField();\r
-            jTextFieldTagName.setPreferredSize(new java.awt.Dimension(140,20));\r
+    private JButton getJButtonFfsSectionsRemove() {\r
+        if (jButtonFfsSectionsRemove == null) {\r
+            jButtonFfsSectionsRemove = new JButton();\r
+            jButtonFfsSectionsRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            jButtonFfsSectionsRemove.setText("Remove");\r
+            jButtonFfsSectionsRemove.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    sectionsTableModel.removeRow(jTableFfsSections.getSelectedRow());\r
+                    ffc.removeBuildOptionsFfsSectionsSections(jTableFfs.getSelectedRow(),\r
+                                                              jTableFfsSections.getSelectedRow());\r
+                }\r
+            });\r
         }\r
-        return jTextFieldTagName;\r
+        return jButtonFfsSectionsRemove;\r
     }\r
 \r
-    /**\r
-     * This method initializes jScrollPane     \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
-     */\r
-    private JScrollPane getJScrollPaneFfs() {\r
-        if (jScrollPaneFfs == null) {\r
-            jScrollPaneFfs = new JScrollPane();\r
-            jScrollPaneFfs.setPreferredSize(new java.awt.Dimension(150,419));\r
-            jScrollPaneFfs.setViewportView(getJTableFfs());\r
+    private JScrollPane getJScrollPaneFfsSections() {\r
+        if (jScrollPaneFfsSections == null) {\r
+            jScrollPaneFfsSections = new JScrollPane();\r
+            jScrollPaneFfsSections.setPreferredSize(new java.awt.Dimension(500, 80));\r
+            jScrollPaneFfsSections.setViewportView(getJTableFfsSections());\r
         }\r
-        return jScrollPaneFfs;\r
+        return jScrollPaneFfsSections;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable  \r
-     *         \r
-     * @return javax.swing.JTable      \r
+     * This method initializes jTable6  \r
+     *  \r
+     * @return javax.swing.JTable   \r
      */\r
-    private JTable getJTableFfs() {\r
-        if (jTableFfs == null) {\r
-            ffsTableModel = new DefaultTableModel();\r
-            ffsTableModel.addColumn("FFS Type");\r
-            jTableFfs = new JTable(ffsTableModel);\r
-            jTableFfs.setShowGrid(false);\r
-            jTableFfs.setRowHeight(20);\r
-            \r
-            jTableFfs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTableFfs.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+    private JTable getJTableFfsSections() {\r
+        if (jTableFfsSections == null) {\r
+            sectionsTableModel = new DefaultTableModel();\r
+            sectionsTableModel.addColumn("EncapsulationType");\r
+            jTableFfsSections = new JTable(sectionsTableModel);\r
+            jTableFfsSections.setRowHeight(20);\r
+            jTableFfsSections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFfsSections.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
                 public void valueChanged(ListSelectionEvent e) {\r
-                    \r
-                    if (e.getValueIsAdjusting()){\r
+                    if (e.getValueIsAdjusting()) {\r
                         return;\r
                     }\r
-                    ListSelectionModel lsm = (ListSelectionModel)e.getSource();\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
-                        jTextFieldFfsKey.setText(sArray[0]);\r
-                        jTextFieldEncapType.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
+                    } else {\r
+                        int sectionsRow = lsm.getMinSelectionIndex();\r
+                        if (jTableFfs.getSelectedRow() < 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
+                        subsectionsTableModel.setRowCount(0);\r
+                        ArrayList<String> al = new ArrayList<String>();\r
+                        ffc.getBuildOptionsFfsSectionsSectionsSection(jTableFfs.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
-            jTableFfs.getModel().addTableModelListener(new TableModelListener() {\r
+\r
+            jTableFfsSections.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
+                    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
+                        String encapType = m.getValueAt(row, 0) + "";\r
                         docConsole.setSaved(false);\r
-                        ffc.updateBuildOptionsFfsKey(row, id);\r
+                        ffc.updateBuildOptionsFfsSectionsSections(jTableFfs.getSelectedRow(), row, encapType);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jTableFfs;\r
+        return jTableFfsSections;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane1    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
+     * This method initializes jSplitPaneFfsC   \r
+     *  \r
+     * @return javax.swing.JSplitPane   \r
      */\r
-    private JScrollPane getJScrollPaneFfsSection() {\r
-        if (jScrollPaneFfsSection == null) {\r
-            jScrollPaneFfsSection = new JScrollPane();\r
-            jScrollPaneFfsSection.setPreferredSize(new java.awt.Dimension(500,80));\r
-            jScrollPaneFfsSection.setViewportView(getJTableFfsSection());\r
+    private JSplitPane getJSplitPaneFfsC() {\r
+        if (jSplitPaneFfsC == null) {\r
+            jSplitPaneFfsC = new JSplitPane();\r
+            jSplitPaneFfsC.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
+            jSplitPaneFfsC.setDividerLocation(130);\r
+            jSplitPaneFfsC.setTopComponent(getJPanelFfsCTop());\r
+            jSplitPaneFfsC.setBottomComponent(getJSplitPaneFfsCBottom());\r
+            jSplitPaneFfsC.setDividerSize(5);\r
         }\r
-        return jScrollPaneFfsSection;\r
+        return jSplitPaneFfsC;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable1 \r
-     *         \r
-     * @return javax.swing.JTable      \r
+     * This method initializes jPanelFfsCTop    \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JTable getJTableFfsSection() {\r
-        if (jTableFfsSection == null) {\r
-            sectionTableModel = new DefaultTableModel();\r
-            sectionTableModel.addColumn("SectionType");\r
-            \r
-            jTableFfsSection = new JTable(sectionTableModel);\r
-            jTableFfsSection.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
-            jTableFfsSection.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
-            \r
-            jTableFfsSection.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            \r
-            jTableFfsSection.getModel().addTableModelListener(new TableModelListener() {\r
-                public void tableChanged(TableModelEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-                    if (jTableFfs.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(jTableFfs.getSelectedRow(), row, type);\r
-                    }\r
-                }\r
-            });\r
+    private JPanel getJPanelFfsCTop() {\r
+        if (jPanelFfsCTop == null) {\r
+            jPanelFfsCTop = new JPanel();\r
+            jPanelFfsCTop.setLayout(new BorderLayout());\r
+            jPanelFfsCTop.add(getJPanelSectionN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFfsCTop.add(getJPanelSectionC(), java.awt.BorderLayout.CENTER);\r
         }\r
-        return jTableFfsSection;\r
+        return jPanelFfsCTop;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane3    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
+     * This method initializes jSplitPaneFfsCBottom \r
+     *  \r
+     * @return javax.swing.JSplitPane   \r
      */\r
-    private JScrollPane getJScrollPaneFfsSubSection() {\r
-        if (jScrollPaneFfsSubSection == null) {\r
-            jScrollPaneFfsSubSection = new JScrollPane();\r
-            jScrollPaneFfsSubSection.setPreferredSize(new java.awt.Dimension(500,90));\r
-            jScrollPaneFfsSubSection.setViewportView(getJTableFfsSubSection());\r
+    private JSplitPane getJSplitPaneFfsCBottom() {\r
+        if (jSplitPaneFfsCBottom == null) {\r
+            jSplitPaneFfsCBottom = new JSplitPane();\r
+            jSplitPaneFfsCBottom.setDividerSize(5);\r
+            jSplitPaneFfsCBottom.setDividerLocation(130);\r
+            jSplitPaneFfsCBottom.setTopComponent(getJPanelFfsCBottomTop());\r
+            jSplitPaneFfsCBottom.setBottomComponent(getJPanelFfsCBottomBottom());\r
+            jSplitPaneFfsCBottom.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
         }\r
-        return jScrollPaneFfsSubSection;\r
+        return jSplitPaneFfsCBottom;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable3 \r
-     *         \r
-     * @return javax.swing.JTable      \r
+     * This method initializes jPanelFfsCBottomTop  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JTable getJTableFfsSubSection() {\r
-        if (jTableFfsSubSection == null) {\r
-            subsectionsTableModel = new DefaultTableModel();\r
-            subsectionsTableModel.addColumn("SectionType");\r
-            jTableFfsSubSection = new JTable(subsectionsTableModel);\r
-            jTableFfsSubSection.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
-            jTableFfsSubSection.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(cb));\r
-            jTableFfsSubSection.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            \r
-            jTableFfsSubSection.getModel().addTableModelListener(new TableModelListener() {\r
-                public void tableChanged(TableModelEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.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(jTableFfs.getSelectedRow(), jTableFfsSections.getSelectedRow(), row, type);\r
-                    }\r
-                }\r
-            });\r
+    private JPanel getJPanelFfsCBottomTop() {\r
+        if (jPanelFfsCBottomTop == null) {\r
+            jPanelFfsCBottomTop = new JPanel();\r
+            jPanelFfsCBottomTop.setLayout(new BorderLayout());\r
+            jPanelFfsCBottomTop.add(getJPanelSectionsN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFfsCBottomTop.add(getJPanelSectionsC(), java.awt.BorderLayout.CENTER);\r
         }\r
-        return jTableFfsSubSection;\r
+        return jPanelFfsCBottomTop;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField      \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jPanelFfsCBottomBottom   \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JTextField getJTextFieldEncapType() {\r
-        if (jTextFieldEncapType == null) {\r
-            jTextFieldEncapType = new JTextField();\r
-            jTextFieldEncapType.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextFieldEncapType.addFocusListener(new java.awt.event.FocusAdapter() {\r
-                public void focusLost(java.awt.event.FocusEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    ffc.updateBuildOptionsFfsSectionsType(jTableFfs.getSelectedRow(), jTextFieldEncapType.getText());\r
-                }\r
-            });\r
+    private JPanel getJPanelFfsCBottomBottom() {\r
+        if (jPanelFfsCBottomBottom == null) {\r
+            jPanelFfsCBottomBottom = new JPanel();\r
+            jPanelFfsCBottomBottom.setLayout(new BorderLayout());\r
+            jPanelFfsCBottomBottom.add(getJPanelSubSectionN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFfsCBottomBottom.add(getJPanelSubSectionC(), java.awt.BorderLayout.CENTER);\r
         }\r
-        return jTextFieldEncapType;\r
+        return jPanelFfsCBottomBottom;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel4 \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jPanelSectionN   \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JPanel getJPanelFfsAttribButtonGroup() {\r
-        if (jPanelFfsAttribButtonGroup == null) {\r
-            jPanelFfsAttribButtonGroup = new JPanel();\r
-            jPanelFfsAttribButtonGroup.setPreferredSize(new java.awt.Dimension(100,100));\r
-            jPanelFfsAttribButtonGroup.add(getJButtonFfsAttribNew(), null);\r
-            jPanelFfsAttribButtonGroup.add(getJButtonFfsAttribRemove(), null);\r
+    private JPanel getJPanelSectionN() {\r
+        if (jPanelSectionN == null) {\r
+            jPanelSectionN = new JPanel();\r
+            jLabelFfsSection = new JLabel();\r
+            jLabelFfsSection.setText("Section");\r
+            jPanelSectionN.add(jLabelFfsSection, null);\r
+            jPanelSectionN.add(getJButtonFfsSectionNew(), null);\r
+            jPanelSectionN.add(getJButtonFfsSectionRemove(), null);\r
         }\r
-        return jPanelFfsAttribButtonGroup;\r
+        return jPanelSectionN;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jPanelSectionC   \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JButton getJButtonFfsSectionNew() {\r
-        if (jButtonFfsSectionNew == null) {\r
-            jButtonFfsSectionNew = new JButton();\r
-            jButtonFfsSectionNew.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSectionNew.setText("New");\r
-            jButtonFfsSectionNew.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    String[] row = {"EFI_SECTION_RAW"};\r
-                    sectionTableModel.addRow(row);\r
-                    ffc.genBuildOptionsFfsSectionsSection(jTableFfs.getSelectedRow(), row[0]);\r
-                }\r
-            });\r
+    private JPanel getJPanelSectionC() {\r
+        if (jPanelSectionC == null) {\r
+            jPanelSectionC = new JPanel();\r
+            jPanelSectionC.add(getJScrollPaneFfsSection(), null);\r
         }\r
-        return jButtonFfsSectionNew;\r
+        return jPanelSectionC;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton1        \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jPanelSectionsN  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JButton getJButtonFfsSectionRemove() {\r
-        if (jButtonFfsSectionRemove == null) {\r
-            jButtonFfsSectionRemove = new JButton();\r
-            jButtonFfsSectionRemove.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSectionRemove.setText("Remove");\r
-          \r
-            jButtonFfsSectionRemove.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSection.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    sectionTableModel.removeRow(jTableFfsSection.getSelectedRow());\r
-                    ffc.removeBuildOptionsFfsSectionsSection(jTableFfs.getSelectedRow(), jTableFfsSection.getSelectedRow());\r
-                }\r
-            });\r
+    private JPanel getJPanelSectionsN() {\r
+        if (jPanelSectionsN == null) {\r
+            jPanelSectionsN = new JPanel();\r
+            jLabelFfsSections = new JLabel();\r
+            jLabelFfsSections.setText("Sections");\r
+            jPanelSectionsN.add(jLabelFfsSections, null);\r
+            jPanelSectionsN.add(getJButtonFfsSectionsNew(), null);\r
+            jPanelSectionsN.add(getJButtonFfsSectionsRemove(), null);\r
         }\r
-        return jButtonFfsSectionRemove;\r
+        return jPanelSectionsN;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton2        \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jPanelSectionsC  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JButton getJButtonFfsSubSectionNew() {\r
-        if (jButtonFfsSubSectionNew == null) {\r
-            jButtonFfsSubSectionNew = new JButton();\r
-            jButtonFfsSubSectionNew.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSubSectionNew.setText("New");\r
-            jButtonFfsSubSectionNew.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    String[] row = {"EFI_SECTION_RAW"};\r
-                    subsectionsTableModel.addRow(row);\r
-                    ffc.genBuildOptionsFfsSectionsSectionsSection(jTableFfs.getSelectedRow(), jTableFfsSections.getSelectedRow(), row[0]);\r
-                    \r
-                }\r
-            });\r
+    private JPanel getJPanelSectionsC() {\r
+        if (jPanelSectionsC == null) {\r
+            jPanelSectionsC = new JPanel();\r
+            jPanelSectionsC.add(getJScrollPaneFfsSections(), null);\r
         }\r
-        return jButtonFfsSubSectionNew;\r
+        return jPanelSectionsC;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton3        \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jPanelSubSectionN    \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JButton getJButtonFfsSubSectionRemove() {\r
-        if (jButtonFfsSubSectionRemove == null) {\r
-            jButtonFfsSubSectionRemove = new JButton();\r
-            jButtonFfsSubSectionRemove.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSubSectionRemove.setText("Remove");\r
-            jButtonFfsSubSectionRemove.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0 || jTableFfsSubSection.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    subsectionsTableModel.removeRow(jTableFfsSubSection.getSelectedRow());\r
-                    ffc.removeBuildOptionsFfsSectionsSectionsSection(jTableFfs.getSelectedRow(), jTableFfsSections.getSelectedRow(), jTableFfsSubSection.getSelectedRow());\r
-                }\r
-            });\r
+    private JPanel getJPanelSubSectionN() {\r
+        if (jPanelSubSectionN == null) {\r
+            jPanelSubSectionN = new JPanel();\r
+            jLabelFfsSubSections = new JLabel();\r
+            jLabelFfsSubSections.setText("Sub-Sections");\r
+            jPanelSubSectionN.add(jLabelFfsSubSections, null);\r
+            jPanelSubSectionN.add(getJButtonFfsSubSectionNew(), null);\r
+            jPanelSubSectionN.add(getJButtonFfsSubSectionRemove(), null);\r
         }\r
-        return jButtonFfsSubSectionRemove;\r
+        return jPanelSubSectionN;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton6        \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jPanelSubSectionC    \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JButton getJButtonFfsSectionsNew() {\r
-        if (jButtonFfsSectionsNew == null) {\r
-            jButtonFfsSectionsNew = new JButton();\r
-            jButtonFfsSectionsNew.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSectionsNew.setText("New");\r
-            jButtonFfsSectionsNew.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    String[] row = {""};\r
-                    sectionsTableModel.addRow(row);\r
-                    ffc.genBuildOptionsFfsSectionsSections(jTableFfs.getSelectedRow(), "");\r
-                }\r
-            });\r
+    private JPanel getJPanelSubSectionC() {\r
+        if (jPanelSubSectionC == null) {\r
+            jPanelSubSectionC = new JPanel();\r
+            jPanelSubSectionC.add(getJScrollPaneFfsSubSection(), null);\r
         }\r
-        return jButtonFfsSectionsNew;\r
+        return jPanelSubSectionC;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton7        \r
+     * The following section contains all Build Options content\r
+     */\r
+\r
+    /**\r
+     * This method initializes jPanelOptionsTab\r
      *         \r
-     * @return javax.swing.JButton     \r
+     * This is the main Options screen\r
+     * \r
+     * @return javax.swing.JPanel      jPanelOptionsTab\r
      */\r
-    private JButton getJButtonFfsSectionsRemove() {\r
-        if (jButtonFfsSectionsRemove == null) {\r
-            jButtonFfsSectionsRemove = new JButton();\r
-            jButtonFfsSectionsRemove.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonFfsSectionsRemove.setText("Remove");\r
-            jButtonFfsSectionsRemove.addActionListener(new java.awt.event.ActionListener() {\r
-                public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTableFfs.getSelectedRow() < 0 || jTableFfsSections.getSelectedRow() < 0) {\r
-                        return;\r
-                    }\r
-                    docConsole.setSaved(false);\r
-                    sectionsTableModel.removeRow(jTableFfsSections.getSelectedRow());\r
-                    ffc.removeBuildOptionsFfsSectionsSections(jTableFfs.getSelectedRow(), jTableFfsSections.getSelectedRow());\r
-                }\r
-            });\r
+    private JPanel getJPanelOptionsTab() {\r
+        if (jPanelOptionsTab == null) {\r
+            // This container holds the Options Tab content\r
+\r
+            //            FlowLayout flowLayout9 = new FlowLayout();\r
+            //            flowLayout9.setAlignment(java.awt.FlowLayout.LEFT);\r
+\r
+            jPanelOptionsTab = new JPanel();\r
+            jPanelOptionsTab.setBounds(new java.awt.Rectangle(0, 0, dialogWidth * 2, dialogHeight * 3));\r
+            jPanelOptionsTab.setPreferredSize(new java.awt.Dimension(dialogWidth + 10, (dialogHeight * 3) + 10));\r
+            jPanelOptionsTab.setAutoscrolls(true);\r
+            jPanelOptionsTab.setLocation(0, 0);\r
+            jPanelOptionsTab.setLayout(null);\r
+            jPanelOptionsTab.add(getJPanelOptionsContainer(), null);\r
+            jPanelOptionsTab.add(getJScrollPaneOptions(), null);\r
+\r
         }\r
-        return jButtonFfsSectionsRemove;\r
+        return jPanelOptionsTab;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane4    \r
-     *         \r
-     * @return javax.swing.JScrollPane \r
+     * This method initializes jPanelOptionsContainer   \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    private JScrollPane getJScrollPaneFfsSections() {\r
-        if (jScrollPaneFfsSections == null) {\r
-            jScrollPaneFfsSections = new JScrollPane();\r
-            jScrollPaneFfsSections.setPreferredSize(new java.awt.Dimension(500,80));\r
-            jScrollPaneFfsSections.setViewportView(getJTableFfsSections());\r
+    private JPanel getJPanelOptionsContainer() {\r
+        if (jPanelOptionsContainer == null) {\r
+            jLabelTagName = new JLabel();\r
+            jLabelTagName.setBounds(new java.awt.Rectangle(labelColumn, rowOne, labelWidth, oneRowHeight));\r
+            jLabelTagName.setLocation(new java.awt.Point(labelColumn, rowOne));\r
+            jLabelTagName.setText("Tag Name");\r
+            jLabelBuildTargets = new JLabel();\r
+            jLabelBuildTargets.setBounds(new java.awt.Rectangle(labelColumn, rowTwo, labelWidth, oneRowHeight));\r
+            jLabelBuildTargets.setLocation(new java.awt.Point(labelColumn, rowTwo));\r
+            jLabelBuildTargets.setText("Build Targets");\r
+            jLabelToolCmd = new JLabel();\r
+            jLabelToolCmd.setBounds(new java.awt.Rectangle(labelColumn, rowThree, labelWidth, oneRowHeight));\r
+            jLabelToolCmd.setLocation(new java.awt.Point(labelColumn, rowThree));\r
+            jLabelToolCmd.setText("Tool Command");\r
+            jLabelSupArch = new JLabel();\r
+            jLabelSupArch.setBounds(new java.awt.Rectangle(labelColumn, rowFour, labelWidth, oneRowHeight));\r
+            jLabelSupArch.setLocation(new java.awt.Point(labelColumn, rowFour));\r
+            jLabelSupArch.setText("Supported Architectures");\r
+            jLabelToolChainFamily = new JLabel();\r
+            jLabelToolChainFamily.setBounds(new java.awt.Rectangle(labelColumn, rowFive, labelWidth, oneRowHeight));\r
+            jLabelToolChainFamily.setLocation(new java.awt.Point(labelColumn, rowFive));\r
+            jLabelToolChainFamily.setText("Tool Chain Family");\r
+\r
+            jLabelOptionContents = new JLabel();\r
+            jLabelOptionContents.setBounds(new java.awt.Rectangle(labelColumn, rowSix, labelWidth, oneRowHeight));\r
+            jLabelOptionContents.setLocation(new java.awt.Point(labelColumn, rowSix));\r
+            jLabelOptionContents.setText("Option Contents");\r
+\r
+            jPanelOptionsContainer = new JPanel();\r
+\r
+            jPanelOptionsContainer.setLayout(null);\r
+            \r
+            jPanelOptionsContainer.setLocation(new java.awt.Point(2, 2));\r
+            jPanelOptionsContainer.setBounds(new java.awt.Rectangle(2, 2, dialogWidth * 2, dialogHeight));\r
+            jPanelOptionsContainer.setPreferredSize(new java.awt.Dimension(dialogWidth, dialogHeight));\r
+            /*\r
+            jPanelOptionsContainer\r
+                                  .setBorder(javax.swing.BorderFactory\r
+                                                                      .createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));\r
+*/\r
+            jPanelOptionsContainer.add(jLabelTagName, null);\r
+            jPanelOptionsContainer.add(getJTextFieldTagName(), null);\r
+\r
+            jPanelOptionsContainer.add(jLabelBuildTargets, null);\r
+            jPanelOptionsContainer.add(getJTextFieldBuildTargets(), null);\r
+\r
+            jPanelOptionsContainer.add(jLabelToolChainFamily, null);\r
+            jPanelOptionsContainer.add(getJTextFieldToolChainFamily(), null);\r
+\r
+            jPanelOptionsContainer.add(jLabelToolCmd, null);\r
+            jPanelOptionsContainer.add(getJTextFieldToolCmd(), null);\r
+\r
+            jPanelOptionsContainer.add(jLabelSupArch, null);\r
+            jPanelOptionsContainer.add(getArchitectureSelections(), null);\r
+\r
+            jPanelOptionsContainer.add(jLabelOptionContents, null);\r
+            jPanelOptionsContainer.add(getJTextFieldOptionContents(), null);\r
+\r
+            jPanelOptionsContainer.add(getJButtonOptionsAdd(), null);\r
+            jPanelOptionsContainer.add(getJButtonOptionsDel(), null);\r
         }\r
-        return jScrollPaneFfsSections;\r
+        return jPanelOptionsContainer;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable6 \r
-     *         \r
-     * @return javax.swing.JTable      \r
+     * This method initializes jTextFieldOptionTagName  Row 1\r
+     *  \r
+     * @return javax.swing.JTextField   \r
      */\r
-    private JTable getJTableFfsSections() {\r
-        if (jTableFfsSections == null) {\r
-            sectionsTableModel = new DefaultTableModel();\r
-            sectionsTableModel.addColumn("EncapsulationType");\r
-            jTableFfsSections = new JTable(sectionsTableModel);\r
-            jTableFfsSections.setRowHeight(20);\r
-            jTableFfsSections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTableFfsSections.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 (jTableFfs.getSelectedRow() < 0) {\r
-                            return;\r
-                        }\r
-                        subsectionsTableModel.setRowCount(0);\r
-                        ArrayList<String> al = new ArrayList<String>();\r
-                        ffc.getBuildOptionsFfsSectionsSectionsSection(jTableFfs.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
-            jTableFfsSections.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(jTableFfs.getSelectedRow(), row, encapType);\r
-                    }\r
-                }\r
-            });\r
+    private JTextField getJTextFieldTagName() {\r
+        if (jTextFieldTagName == null) {\r
+            jTextFieldTagName = new JTextField();\r
+            jTextFieldTagName.setBounds(new java.awt.Rectangle(fieldColumn, rowOne, fieldWidth, oneRowHeight));\r
+            jTextFieldTagName.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jTextFieldTagName.setLocation(new java.awt.Point(fieldColumn, rowOne));\r
         }\r
-        return jTableFfsSections;\r
+        return jTextFieldTagName;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton12       \r
-     *         \r
-     * @return javax.swing.JButton     \r
+     * This method initializes jTextFieldBuildTargets  Row 2 \r
+     *  \r
+     * @return javax.swing.JTextField   jTextFieldBuildTargets\r
      */\r
-    private JButton getJButtonAntTaskFileBrowse() {\r
-        if (jButtonAntTaskFileBrowse == null) {\r
-            jButtonAntTaskFileBrowse = new JButton();\r
-            jButtonAntTaskFileBrowse.setPreferredSize(new Dimension(90, 20));\r
-            jButtonAntTaskFileBrowse.setText("Browse");\r
-            jButtonAntTaskFileBrowse.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
+    private JTextField getJTextFieldBuildTargets() {\r
+        if (jTextFieldBuildTargets == null) {\r
+            jTextFieldBuildTargets = new JTextField();\r
+            jTextFieldBuildTargets.setBounds(new java.awt.Rectangle(fieldColumn, rowTwo, fieldWidth, oneRowHeight));\r
+            jTextFieldBuildTargets.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jTextFieldBuildTargets.setLocation(new java.awt.Point(fieldColumn, rowTwo));\r
+        }\r
+        return jTextFieldBuildTargets;\r
+    }\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
-                    jTextFieldAntTaskFile.setText(headerDest.substring(dirPrefix.length()).replace('\\', '/'));\r
-               \r
-                }\r
+    /**\r
+     * This method initializes jTextFieldToolCmd Row 3    \r
+     * \r
+     *  This should be a dropdown box of command codes from tools_def.txt\r
+     *      \r
+     * @return javax.swing.JTextField   jTextFieldToolCmd\r
+     */\r
+    private JTextField getJTextFieldToolCmd() {\r
+        if (jTextFieldToolCmd == null) {\r
+            jTextFieldToolCmd = new JTextField();\r
+            jTextFieldToolCmd.setBounds(new java.awt.Rectangle(fieldColumn, rowThree, fieldWidth, oneRowHeight));\r
+            jTextFieldToolCmd.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jTextFieldToolCmd.setLocation(new java.awt.Point(fieldColumn, rowThree));\r
+        }\r
+        return jTextFieldToolCmd;\r
+    }\r
 \r
-            });\r
+    /**\r
+     * This method initializes jArchitectureSelections Row 4\r
+     * \r
+     * @return jArchitectureSelections\r
+     */\r
+    private JPanel getArchitectureSelections() {\r
+        if (jArchitectureSelections == null) {\r
+            jArchitectureSelections = new JPanel();\r
+            jArchitectureSelections.setLayout(null);\r
+            jArchitectureSelections.add(getJCheckBoxIA32(), null);\r
+            jArchitectureSelections.add(getJCheckBoxX64(), null);\r
+            jArchitectureSelections.add(getJCheckBoxIpf(), null);\r
+            jArchitectureSelections.add(getJCheckBoxEBC(), null);\r
+            jArchitectureSelections.add(getJCheckBoxARM(), null);\r
+            jArchitectureSelections.add(getJCheckBoxPPC(), null);\r
+            jArchitectureSelections.setBounds(new java.awt.Rectangle(fieldColumn, rowFour, fieldWidth, oneRowHeight));\r
+            jArchitectureSelections.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jArchitectureSelections.setLocation(new java.awt.Point(fieldColumn, rowFour));\r
         }\r
-        return jButtonAntTaskFileBrowse;\r
+        return jArchitectureSelections;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField1     \r
-     *         \r
-     * @return javax.swing.JTextField  \r
+     * This method initializes jCheckBoxIA32  \r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxIA32\r
      */\r
-    private JTextField getJTextFieldToolChainFamily() {\r
-        if (jTextFieldToolChainFamily == null) {\r
-            jTextFieldToolChainFamily = new JTextField();\r
-            jTextFieldToolChainFamily.setPreferredSize(new java.awt.Dimension(85,20));\r
+    private JCheckBox getJCheckBoxIA32() {\r
+        if (jCheckBoxIA32 == null) {\r
+            jCheckBoxIA32 = new JCheckBox();\r
+            jCheckBoxIA32.setBounds(new java.awt.Rectangle(0, 0, 55, 20));\r
+            jCheckBoxIA32.setText("IA32");\r
         }\r
-        return jTextFieldToolChainFamily;\r
+        return jCheckBoxIA32;\r
     }\r
 \r
     /**\r
-     * This method initializes jSplitPaneFfsC  \r
-     *         \r
-     * @return javax.swing.JSplitPane  \r
+     * This method initializes jCheckBoxX64 \r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxX64\r
      */\r
-    private JSplitPane getJSplitPaneFfsC() {\r
-        if (jSplitPaneFfsC == null) {\r
-            jSplitPaneFfsC = new JSplitPane();\r
-            jSplitPaneFfsC.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
-            jSplitPaneFfsC.setDividerLocation(130);\r
-            jSplitPaneFfsC.setTopComponent(getJPanelFfsCTop());\r
-            jSplitPaneFfsC.setBottomComponent(getJSplitPaneFfsCBottom());\r
-            jSplitPaneFfsC.setDividerSize(5);\r
+    private JCheckBox getJCheckBoxX64() {\r
+        if (jCheckBoxX64 == null) {\r
+            jCheckBoxX64 = new JCheckBox();\r
+            jCheckBoxX64.setText("X64");\r
+            jCheckBoxX64.setBounds(new java.awt.Rectangle(55, 0, 53, 20));\r
         }\r
-        return jSplitPaneFfsC;\r
+        return jCheckBoxX64;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelFfsCTop   \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jCheckBoxIpf\r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxIpf\r
      */\r
-    private JPanel getJPanelFfsCTop() {\r
-        if (jPanelFfsCTop == null) {\r
-            jPanelFfsCTop = new JPanel();\r
-            jPanelFfsCTop.setLayout(new BorderLayout());\r
-            jPanelFfsCTop.add(getJPanelSectionN(), java.awt.BorderLayout.NORTH);\r
-            jPanelFfsCTop.add(getJPanelSectionC(), java.awt.BorderLayout.CENTER);\r
+    private JCheckBox getJCheckBoxIpf() {\r
+        if (jCheckBoxIpf == null) {\r
+            jCheckBoxIpf = new JCheckBox();\r
+            jCheckBoxIpf.setBounds(new java.awt.Rectangle(108, 0, 52, 20));\r
+            jCheckBoxIpf.setText("IPF");\r
         }\r
-        return jPanelFfsCTop;\r
+        return jCheckBoxIpf;\r
     }\r
 \r
+\r
     /**\r
-     * This method initializes jSplitPaneFfsCBottom    \r
-     *         \r
-     * @return javax.swing.JSplitPane  \r
+     * This method initializes jCheckBoxEBC\r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxEBC\r
      */\r
-    private JSplitPane getJSplitPaneFfsCBottom() {\r
-        if (jSplitPaneFfsCBottom == null) {\r
-            jSplitPaneFfsCBottom = new JSplitPane();\r
-            jSplitPaneFfsCBottom.setDividerSize(5);\r
-            jSplitPaneFfsCBottom.setDividerLocation(130);\r
-            jSplitPaneFfsCBottom.setTopComponent(getJPanelFfsCBottomTop());\r
-            jSplitPaneFfsCBottom.setBottomComponent(getJPanelFfsCBottomBottom());\r
-            jSplitPaneFfsCBottom.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
+    private JCheckBox getJCheckBoxEBC() {\r
+        if (jCheckBoxEBC == null) {\r
+            jCheckBoxEBC = new JCheckBox();\r
+            jCheckBoxEBC.setBounds(new java.awt.Rectangle(160, 0, 53, 20));\r
+            jCheckBoxEBC.setText("EBC");\r
         }\r
-        return jSplitPaneFfsCBottom;\r
+        return jCheckBoxEBC;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelFfsCBottomTop     \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jCheckBoxARM\r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxARM\r
      */\r
-    private JPanel getJPanelFfsCBottomTop() {\r
-        if (jPanelFfsCBottomTop == null) {\r
-            jPanelFfsCBottomTop = new JPanel();\r
-            jPanelFfsCBottomTop.setLayout(new BorderLayout());\r
-            jPanelFfsCBottomTop.add(getJPanelSectionsN(), java.awt.BorderLayout.NORTH);\r
-            jPanelFfsCBottomTop.add(getJPanelSectionsC(), java.awt.BorderLayout.CENTER);\r
+    private JCheckBox getJCheckBoxARM() {\r
+        if (jCheckBoxARM == null) {\r
+            jCheckBoxARM = new JCheckBox();\r
+            jCheckBoxARM.setBounds(new java.awt.Rectangle(213, 0, 54, 20));\r
+            jCheckBoxARM.setText("ARM");\r
         }\r
-        return jPanelFfsCBottomTop;\r
+        return jCheckBoxARM;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelFfsCBottomBottom  \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jCheckBoxPPC \r
+     *  \r
+     * @return javax.swing.JCheckBox    jCheckBoxPPC\r
      */\r
-    private JPanel getJPanelFfsCBottomBottom() {\r
-        if (jPanelFfsCBottomBottom == null) {\r
-            jPanelFfsCBottomBottom = new JPanel();\r
-            jPanelFfsCBottomBottom.setLayout(new BorderLayout());\r
-            jPanelFfsCBottomBottom.add(getJPanelSubSectionN(), java.awt.BorderLayout.NORTH);\r
-            jPanelFfsCBottomBottom.add(getJPanelSubSectionC(), java.awt.BorderLayout.CENTER);\r
+    private JCheckBox getJCheckBoxPPC() {\r
+        if (jCheckBoxPPC == null) {\r
+            jCheckBoxPPC = new JCheckBox();\r
+            jCheckBoxPPC.setBounds(new java.awt.Rectangle(267, 0, 53, 20));\r
+            jCheckBoxPPC.setText("PPC");\r
         }\r
-        return jPanelFfsCBottomBottom;\r
+        return jCheckBoxPPC;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSectionN  \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jTextFieldToolChainFamily  Row 5    \r
+     *  \r
+     * This should be a drop down for MSFT, INTEL, GCC or USER_DEFINED\r
+     * \r
+     * @return javax.swing.JTextField   \r
      */\r
-    private JPanel getJPanelSectionN() {\r
-        if (jPanelSectionN == null) {\r
-            jPanelSectionN = new JPanel();\r
-            jLabelFfsSection = new JLabel();\r
-            jLabelFfsSection.setText("Section");\r
-            jPanelSectionN.add(jLabelFfsSection, null);\r
-            jPanelSectionN.add(getJButtonFfsSectionNew(), null);\r
-            jPanelSectionN.add(getJButtonFfsSectionRemove(), null);\r
+    private JTextField getJTextFieldToolChainFamily() {\r
+        if (jTextFieldToolChainFamily == null) {\r
+            jTextFieldToolChainFamily = new JTextField();\r
+            jTextFieldToolChainFamily.setBounds(new java.awt.Rectangle(fieldColumn, rowFive, fieldWidth, oneRowHeight));\r
+            jTextFieldToolChainFamily.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jTextFieldToolChainFamily.setLocation(new java.awt.Point(fieldColumn, rowFive));\r
         }\r
-        return jPanelSectionN;\r
+        return jTextFieldToolChainFamily;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSectionC  \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jTextFieldOptionContents Row 6\r
+     * \r
+     *         This is where we should put the checkbox & entry data for the command arguments\r
+     * \r
+     * @return javax.swing.JTextField  \r
      */\r
-    private JPanel getJPanelSectionC() {\r
-        if (jPanelSectionC == null) {\r
-            jPanelSectionC = new JPanel();\r
-            jPanelSectionC.add(getJScrollPaneFfsSection(), null);\r
+    private JTextField getJTextFieldOptionContents() {\r
+        if (jTextFieldOptionContents == null) {\r
+            jTextFieldOptionContents = new JTextField();\r
+            jTextFieldOptionContents.setPreferredSize(new java.awt.Dimension(fieldWidth, oneRowHeight));\r
+            jTextFieldOptionContents.setBounds(fieldColumn, rowSix, fieldWidth, oneRowHeight);\r
+            jTextFieldOptionContents.setLocation(new java.awt.Point(fieldColumn, rowSix));\r
         }\r
-        return jPanelSectionC;\r
+        return jTextFieldOptionContents;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSectionsN \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jButtonOptionsAdd\r
+     *  \r
+     * Add entry from the top screen to the table\r
+     * \r
+     * @return javax.swing.JButton  jButtonOptionsAdd\r
      */\r
-    private JPanel getJPanelSectionsN() {\r
-        if (jPanelSectionsN == null) {\r
-            jPanelSectionsN = new JPanel();\r
-            jLabelFfsSections = new JLabel();\r
-            jLabelFfsSections.setText("Sections");\r
-            jPanelSectionsN.add(jLabelFfsSections, null);\r
-            jPanelSectionsN.add(getJButtonFfsSectionsNew(), null);\r
-            jPanelSectionsN.add(getJButtonFfsSectionsRemove(), null);\r
+    private JButton getJButtonOptionsAdd() {\r
+        if (jButtonOptionsAdd == null) {\r
+            jButtonOptionsAdd = new JButton();\r
+            jButtonOptionsAdd.setText("Add");\r
+\r
+            jButtonOptionsAdd.setPreferredSize(new java.awt.Dimension(buttonWidth, oneRowHeight));\r
+            jButtonOptionsAdd.setBounds(new java.awt.Rectangle(firstButtonLoc, buttonRow, buttonWidth, oneRowHeight));            \r
+            jButtonOptionsAdd.setLocation(new java.awt.Point(firstButtonLoc, buttonRow));\r
+            jButtonOptionsAdd.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 = { jCheckBoxIA32.isSelected(), jCheckBoxIpf.isSelected(),\r
+                                           jCheckBoxX64.isSelected(), jCheckBoxEBC.isSelected(),\r
+                                           jCheckBoxARM.isSelected(), jCheckBoxPPC.isSelected() };\r
+                    String s = boolToList(boolArray);\r
+                    Object[] o = { jTextFieldBuildTargets.getText(), jTextFieldToolChainFamily.getText(), s,\r
+                                  jTextFieldToolCmd.getText(), jTextFieldTagName.getText(),\r
+                                  jTextFieldOptionContents.getText() };\r
+                    optionsTableModel.addRow(o);\r
+                    docConsole.setSaved(false);\r
+                    ffc.genBuildOptionsOpt(stringToVector(jTextFieldBuildTargets.getText()),\r
+                                           jTextFieldToolChainFamily.getText(), jTextFieldTagName.getText(),\r
+                                           jTextFieldToolCmd.getText(), stringToVector(s),\r
+                                           jTextFieldOptionContents.getText());\r
+                }\r
+            });\r
         }\r
-        return jPanelSectionsN;\r
+        return jButtonOptionsAdd;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSectionsC \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jButtonOptionsDel    \r
+     *  \r
+     * Remove a line from the table below\r
+     * \r
+     * @return javax.swing.JButton  jButtonOptionsDel\r
      */\r
-    private JPanel getJPanelSectionsC() {\r
-        if (jPanelSectionsC == null) {\r
-            jPanelSectionsC = new JPanel();\r
-            jPanelSectionsC.add(getJScrollPaneFfsSections(), null);\r
+    private JButton getJButtonOptionsDel() {\r
+        if (jButtonOptionsDel == null) {\r
+            jButtonOptionsDel = new JButton();\r
+            jButtonOptionsDel.setText("Delete");\r
+            jButtonOptionsDel.setPreferredSize(new java.awt.Dimension(buttonWidth, oneRowHeight));\r
+            jButtonOptionsDel.setBounds(new java.awt.Rectangle(next2LastButtonLoc, buttonRow, buttonWidth, oneRowHeight));\r
+            jButtonOptionsDel.setLocation(new java.awt.Point(next2LastButtonLoc, buttonRow));\r
+            jButtonOptionsDel.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
+            });\r
         }\r
-        return jPanelSectionsC;\r
+        return jButtonOptionsDel;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSubSectionN       \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * This method initializes jScrollPaneOptions      \r
+     *         Contains the Table and is located below the data entry section\r
+     * @return javax.swing.JScrollPane jScrollPaneOptoins\r
      */\r
-    private JPanel getJPanelSubSectionN() {\r
-        if (jPanelSubSectionN == null) {\r
-            jPanelSubSectionN = new JPanel();\r
-            jLabelFfsSubSections = new JLabel();\r
-            jLabelFfsSubSections.setText("Sub-Sections");\r
-            jPanelSubSectionN.add(jLabelFfsSubSections, null);\r
-            jPanelSubSectionN.add(getJButtonFfsSubSectionNew(), null);\r
-            jPanelSubSectionN.add(getJButtonFfsSubSectionRemove(), null);\r
+    private JScrollPane getJScrollPaneOptions() {\r
+        if (jScrollPaneOptions == null) {\r
+            jScrollPaneOptions = new JScrollPane();\r
+            jScrollPaneOptions.setPreferredSize(new java.awt.Dimension(dialogWidth, dialogHeight * 2));\r
+            jScrollPaneOptions.setBounds(new java.awt.Rectangle(2, (dialogHeight * 2) + 2, dialogWidth * 2, dialogHeight * 2));\r
+            jScrollPaneOptions.setLocation(new java.awt.Point(2, dialogHeight + 2));\r
+\r
+            jScrollPaneOptions.setViewportView(getJTableOptions());\r
         }\r
-        return jPanelSubSectionN;\r
+        return jScrollPaneOptions;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanelSubSectionC       \r
+     * This method initializes jTableOptions\r
      *         \r
-     * @return javax.swing.JPanel      \r
+     * @return javax.swing.JTable      jTableOptions\r
      */\r
-    private JPanel getJPanelSubSectionC() {\r
-        if (jPanelSubSectionC == null) {\r
-            jPanelSubSectionC = new JPanel();\r
-            jPanelSubSectionC.add(getJScrollPaneFfsSubSection(), null);\r
+    private JTable getJTableOptions() {\r
+        if (jTableOptions == null) {\r
+            jTitle = new JLabel();\r
+            jTitle.setText("Current Option Configuration Lines");\r
+            jTitle.setBounds(2, 2, labelWidth, oneRowHeight);\r
+            \r
+            optionsTableModel = new DefaultTableModel();\r
+            jTableOptions = new JTable(optionsTableModel);\r
+            jTableOptions.setRowHeight(20);\r
+            optionsTableModel.addColumn("Build Targets");\r
+            optionsTableModel.addColumn("Tool Chain Family");\r
+            optionsTableModel.addColumn("Supported Architectures");\r
+            optionsTableModel.addColumn("Tool Command Code");\r
+            optionsTableModel.addColumn("TagName");\r
+            optionsTableModel.addColumn("Contents");\r
+\r
+            javax.swing.table.TableColumn toolFamilyCol = jTableOptions.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
+            cb.addItem("USER_DEFINED");\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
+            jTableOptions.getColumnModel().getColumn(2).setCellEditor(new ListEditor(vArch));\r
+            jTableOptions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableOptions.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
+                public void valueChanged(ListSelectionEvent e) {\r
+                    selectedRow = -1;\r
+                    if (e.getValueIsAdjusting()) {\r
+                        return;\r
+                    }\r
+                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
+                    if (lsm.isSelectionEmpty()) {\r
+                        return;\r
+                    } else {\r
+                        selectedRow = lsm.getMinSelectionIndex();\r
+                    }\r
+                }\r
+            });\r
+\r
+            jTableOptions.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 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 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
+            });\r
+        }\r
+        return jTableOptions;\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
+            s += "IA32 ";\r
+        }\r
+        if (bool[1]) {\r
+            s += "IPF ";\r
+        }\r
+        if (bool[2]) {\r
+            s += "X64 ";\r
+        }\r
+        if (bool[3]) {\r
+            s += "EBC ";\r
+        }\r
+        if (bool[4]) {\r
+            s += "ARM ";\r
+        }\r
+        if (bool[5]) {\r
+            s += "PPC ";\r
+        }\r
+        if (s == " ") {\r
+            s += "IA32";\r
+        }\r
+        return s.trim();\r
+    }\r
+\r
+    private void initOptionTable() {\r
+        if (ffc.getBuildOptionsOptCount() == 0) {\r
+            //ToDo get default options from *.txt file\r
+            return;\r
+        }\r
+        String[][] saa = new String[ffc.getBuildOptionsOptCount()][6];\r
+        ffc.getBuildOptionsOpts(saa);\r
+        for (int i = 0; i < saa.length; ++i) {\r
+            optionsTableModel.addRow(saa[i]);\r
         }\r
-        return jPanelSubSectionC;\r
     }\r
 \r
+\r
     /**\r
-     * This method initializes jPanelOptionsContainer  \r
-     *         \r
-     * @return javax.swing.JPanel      \r
+     * Everything below should pertain to the ANT Task Tab\r
      */\r
-    private JPanel getJPanelOptionsContainer() {\r
-        if (jPanelOptionsContainer == null) {\r
-            FlowLayout flowLayout = new FlowLayout();\r
-            flowLayout.setAlignment(java.awt.FlowLayout.LEFT);\r
-            jPanelOptionsContainer = new JPanel();\r
-            jPanelOptionsContainer.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));\r
-            jPanelOptionsContainer.setLayout(flowLayout);\r
-            jPanelOptionsContainer.setPreferredSize(new java.awt.Dimension(650,100));\r
-            jPanelOptionsContainer.add(jLabelBuildTargets, null);\r
-            jPanelOptionsContainer.add(getJTextFieldBuildTargets(), null);\r
-            jPanelOptionsContainer.add(jLabelToolChainFamily, null);\r
-            jPanelOptionsContainer.add(getJTextFieldToolChainFamily(), null);\r
-            jPanelOptionsContainer.add(jLabelToolCmd, null);\r
-            jPanelOptionsContainer.add(getJTextFieldToolCmd(), null);\r
-            jPanelOptionsContainer.add(jLabelSupArch, null);\r
-            jPanelOptionsContainer.add(getJCheckBoxIA32(), null);\r
-            jPanelOptionsContainer.add(getJCheckBoxIpf(), null);\r
-            jPanelOptionsContainer.add(getJCheckBoxX64(), null);\r
-            jPanelOptionsContainer.add(getJCheckBoxEBC(), null);\r
-            jPanelOptionsContainer.add(getJCheckBoxARM(), null);\r
-            jPanelOptionsContainer.add(getJCheckBoxPPC(), null);\r
-            jPanelOptionsContainer.add(jLabelTagName, null);\r
-            jPanelOptionsContainer.add(getJTextFieldTagName(), null);\r
-            jPanelOptionsContainer.add(jLabelOptionContents, null);\r
-            jPanelOptionsContainer.add(getJTextFieldOptionContents(), null);\r
-            jPanelOptionsContainer.add(getJButtonOptionsAdd(), null);\r
-            jPanelOptionsContainer.add(getJButtonOptionsDel(), null);\r
+\r
+    /**\r
+     * This method initializes jButton12    \r
+     *  \r
+     * @return javax.swing.JButton  \r
+     */\r
+    private JButton getJButtonAntTaskFileBrowse() {\r
+        if (jButtonAntTaskFileBrowse == null) {\r
+            jButtonAntTaskFileBrowse = new JButton();\r
+            jButtonAntTaskFileBrowse.setPreferredSize(new Dimension(buttonWidth, oneRowHeight));\r
+            jButtonAntTaskFileBrowse.setText("Browse");\r
+            jButtonAntTaskFileBrowse.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
+                    } else {\r
+                        return;\r
+                    }\r
+\r
+                    headerDest = theFile.getPath();\r
+                    jTextFieldAntTaskFile.setText(headerDest.substring(dirPrefix.length()).replace('\\', '/'));\r
+\r
+                }\r
+\r
+            });\r
         }\r
-        return jPanelOptionsContainer;\r
+        return jButtonAntTaskFileBrowse;\r
     }\r
 \r
     /**\r
@@ -1857,73 +1992,232 @@ public class FpdBuildOptions extends IInternalFrame {
     }\r
 \r
     /**\r
-     * @param args\r
+     * This method initializes jPanel8  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    public static void main(String[] args) {\r
-        // TODO Auto-generated method stub\r
-        new FpdBuildOptions().setVisible(true);\r
+    private JPanel getJPanelUserDef() {\r
+        if (jPanelUserDef == null) {\r
+            jPanelUserDef = new JPanel();\r
+            jPanelUserDef.setLayout(new BorderLayout());\r
+            jPanelUserDef.add(getJPanelUserDefNorth(), java.awt.BorderLayout.NORTH);\r
+            jPanelUserDef.add(getJPanelUserDefCenter(), java.awt.BorderLayout.CENTER);\r
+\r
+        }\r
+        return jPanelUserDef;\r
     }\r
 \r
     /**\r
-     * This is the default constructor\r
+     * This method initializes jPanel9  \r
+     *  \r
+     * @return javax.swing.JPanel   \r
      */\r
-    public FpdBuildOptions() {\r
-        super();\r
-        initialize();\r
-        this.setVisible(true);\r
+    private JPanel getJPanelUserDefNorth() {\r
+        if (jPanelUserDefNorth == null) {\r
+            jLabelAntTaskFile = new JLabel();\r
+            jLabelAntTaskFile.setText("ANT Task File");\r
+            jLabelAntTaskFile.setPreferredSize(new java.awt.Dimension(80, 20));\r
+            FlowLayout flowLayout8 = new FlowLayout();\r
+            flowLayout8.setAlignment(java.awt.FlowLayout.CENTER);\r
+            jLabelAntTaskId = new JLabel();\r
+            jLabelAntTaskId.setText("ID");\r
+            jPanelUserDefNorth = new JPanel();\r
+            jPanelUserDefNorth.setLayout(flowLayout8);\r
+            jPanelUserDefNorth.add(jLabelAntTaskFile, null);\r
+            jPanelUserDefNorth.add(getJTextFieldAntTaskFile(), null);\r
+            jPanelUserDefNorth.add(getJButtonAntTaskFileBrowse(), null);\r
+            jPanelUserDefNorth.add(jLabelAntTaskId, null);\r
+            jPanelUserDefNorth.add(getJTextFieldAntTaskId(), null);\r
+        }\r
+        return jPanelUserDefNorth;\r
     }\r
-    \r
-    public FpdBuildOptions(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
-        this();\r
-        ffc = new FpdFileContents(fpd);\r
-        init(ffc);\r
+\r
+    /**\r
+     * This method initializes jPanel11 \r
+     *  \r
+     * @return javax.swing.JPanel   \r
+     */\r
+    private JPanel getJPanelUserDefCenter() {\r
+        if (jPanelUserDefCenter == null) {\r
+            jLabelAntCmdOpts = new JLabel();\r
+            jLabelAntCmdOpts.setText("ANT Command Options");\r
+            jLabelAntCmdOpts.setPreferredSize(new java.awt.Dimension(131, 20));\r
+            jPanelUserDefCenter = new JPanel();\r
+            jPanelUserDefCenter.setLayout(new BorderLayout());\r
+\r
+            jPanelUserDefCenter.add(getJPanelUserDefCenterN(), java.awt.BorderLayout.NORTH);\r
+            jPanelUserDefCenter.add(getJPanelUserDefCenterC(), java.awt.BorderLayout.CENTER);\r
+        }\r
+        return jPanelUserDefCenter;\r
     }\r
-    \r
-    public FpdBuildOptions(OpeningPlatformType opt) {\r
-        this(opt.getXmlFpd());\r
-        docConsole = opt;\r
+\r
+    /**\r
+     * This method initializes jTextField2  \r
+     *  \r
+     * @return javax.swing.JTextField   \r
+     */\r
+    private JTextField getJTextFieldAntTaskFile() {\r
+        if (jTextFieldAntTaskFile == null) {\r
+            jTextFieldAntTaskFile = new JTextField();\r
+            jTextFieldAntTaskFile.setPreferredSize(new java.awt.Dimension(200, 20));\r
+        }\r
+        return jTextFieldAntTaskFile;\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 (jTableFfs.isEditing()) {\r
-                    jTableFfs.getCellEditor().stopCellEditing();\r
-                }\r
-                if (jTableFfsSection.isEditing()) {\r
-                    jTableFfsSection.getCellEditor().stopCellEditing();\r
-                }\r
-                if (jTableAntTasks.isEditing()) {\r
-                    jTableAntTasks.getCellEditor().stopCellEditing();\r
-                }\r
-                if (jTableFfsSubSection.isEditing()) {\r
-                    jTableFfsSubSection.getCellEditor().stopCellEditing();\r
-                }\r
-                if (jTableFfsAttribs.isEditing()) {\r
-                    jTableFfsAttribs.getCellEditor().stopCellEditing();\r
+    /**\r
+     * This method initializes jTextField3  \r
+     *  \r
+     * @return javax.swing.JTextField   \r
+     */\r
+    private JTextField getJTextFieldAntTaskId() {\r
+        if (jTextFieldAntTaskId == null) {\r
+            jTextFieldAntTaskId = new JTextField();\r
+            jTextFieldAntTaskId.setPreferredSize(new java.awt.Dimension(100, 20));\r
+        }\r
+        return jTextFieldAntTaskId;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButton4 \r
+     *  \r
+     * @return javax.swing.JButton  \r
+     */\r
+    private JButton getJButtonAntTaskAdd() {\r
+        if (jButtonAntTaskAdd == null) {\r
+            jButtonAntTaskAdd = new JButton();\r
+            jButtonAntTaskAdd.setPreferredSize(new java.awt.Dimension(90, 20));\r
+            jButtonAntTaskAdd.setText("Add");\r
+            jButtonAntTaskAdd.addActionListener(new ActionListener() {\r
+                public void actionPerformed(ActionEvent e) {\r
+                    if (!DataValidation.isInt(jTextFieldAntTaskId.getText())\r
+                        || jTextFieldAntTaskId.getText().length() != 8) {\r
+                        JOptionPane.showMessageDialog(frame, "ID must be an 8-digit integer.");\r
+                        return;\r
+                    }\r
+                    Object[] o = { jTextFieldAntTaskId.getText(), null, null };\r
+                    o[1] = jTextFieldAntTaskFile.getText();\r
+                    o[2] = jTextFieldAntCmdOpts.getText();\r
+                    ffc.genBuildOptionsUserDefAntTask(o[0] + "", o[1] + "", o[2] + "");\r
+                    antTaskTableModel.addRow(o);\r
+                    docConsole.setSaved(false);\r
                 }\r
-                if (jTableOptions.isEditing()) {\r
-                    jTableOptions.getCellEditor().stopCellEditing();\r
+            });\r
+        }\r
+        return jButtonAntTaskAdd;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButton5 \r
+     *  \r
+     * @return javax.swing.JButton  \r
+     */\r
+    private JButton getJButtonAntTaskDel() {\r
+        if (jButtonAntTaskDel == null) {\r
+            jButtonAntTaskDel = new JButton();\r
+            jButtonAntTaskDel.setPreferredSize(new java.awt.Dimension(90, 20));\r
+            jButtonAntTaskDel.setText("Delete");\r
+            jButtonAntTaskDel.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
                 }\r
-            }\r
-        });\r
+            });\r
+        }\r
+        return jButtonAntTaskDel;\r
     }\r
-    \r
-    private void initOptionTable() {\r
-        if (ffc.getBuildOptionsOptCount() == 0) {\r
-            //ToDo get default options from *.txt file\r
-            return;\r
+\r
+    /**\r
+     * This method initializes jTextField4  \r
+     *  \r
+     * @return javax.swing.JTextField   \r
+     */\r
+    private JTextField getJTextFieldAntCmdOpts() {\r
+        if (jTextFieldAntCmdOpts == null) {\r
+            jTextFieldAntCmdOpts = new JTextField();\r
+            jTextFieldAntCmdOpts.setPreferredSize(new java.awt.Dimension(270, 20));\r
+            jTextFieldAntCmdOpts.setEnabled(true);\r
         }\r
-        String[][] saa = new String[ffc.getBuildOptionsOptCount()][6];\r
-        ffc.getBuildOptionsOpts(saa);\r
-        for (int i = 0; i < saa.length; ++i) {\r
-            optionsTableModel.addRow(saa[i]);\r
+        return jTextFieldAntCmdOpts;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jScrollPane2 \r
+     *  \r
+     * @return javax.swing.JScrollPane  \r
+     */\r
+    private JScrollPane getJScrollPaneAntTasks() {\r
+        if (jScrollPaneAntTasks == null) {\r
+            jScrollPaneAntTasks = new JScrollPane();\r
+            jScrollPaneAntTasks.setPreferredSize(new java.awt.Dimension(600, 400));\r
+            jScrollPaneAntTasks.setViewportView(getJTableAntTasks());\r
         }\r
+        return jScrollPaneAntTasks;\r
     }\r
-    \r
+\r
+    /**\r
+     * This method initializes jTable2  \r
+     *  \r
+     * @return javax.swing.JTable   \r
+     */\r
+    private JTable getJTableAntTasks() {\r
+        if (jTableAntTasks == null) {\r
+            antTaskTableModel = new DefaultTableModel();\r
+            jTableAntTasks = new JTable(antTaskTableModel);\r
+            jTableAntTasks.setRowHeight(20);\r
+            antTaskTableModel.addColumn("ID");\r
+            antTaskTableModel.addColumn("Filename");\r
+            antTaskTableModel.addColumn("ANT Command Options");\r
+\r
+            jTableAntTasks.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableAntTasks.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
+                public void valueChanged(ListSelectionEvent e) {\r
+                    selectedRow = -1;\r
+                    if (e.getValueIsAdjusting()) {\r
+                        return;\r
+                    }\r
+                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
+                    if (lsm.isSelectionEmpty()) {\r
+                        return;\r
+                    } else {\r
+                        selectedRow = lsm.getMinSelectionIndex();\r
+                    }\r
+                }\r
+            });\r
+\r
+            jTableAntTasks.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
+                        String file = m.getValueAt(row, 1) + "";\r
+                        String execOrder = m.getValueAt(row, 2) + "";\r
+                        if (id.length() == 0) {\r
+                            return;\r
+                        }\r
+                        if (file.length() == 0 && execOrder.length() == 0) {\r
+                            return;\r
+                        }\r
+                        if (file.length() == 0) {\r
+                            file = null;\r
+                        }\r
+                        if (execOrder.length() == 0) {\r
+                            execOrder = null;\r
+                        }\r
+                        ffc.updateBuildOptionsUserDefAntTask(row, id, file, execOrder);\r
+\r
+                    }\r
+                }\r
+            });\r
+        }\r
+        return jTableAntTasks;\r
+    }\r
+\r
     private void initAntTaskTable() {\r
         if (ffc.getBuildOptionsUserDefAntTaskCount() == 0) {\r
             return;\r
@@ -1934,45 +2228,5 @@ 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, 577);\r
-        this.setTitle("FPD Build Options");\r
-        this.setContentPane(getJContentPane());\r
-    }\r
-\r
-    /**\r
-     * This method initializes jContentPane\r
-     * \r
-     * @return javax.swing.JPanel\r
-     */\r
-    private JPanel getJContentPane() {\r
-        if (jContentPane == null) {\r
-            jContentPane = new JPanel();\r
-            jContentPane.setLayout(new BorderLayout());\r
-            jContentPane.add(getJPanelContentSouth(), java.awt.BorderLayout.SOUTH);\r
-            jContentPane.add(getJPanelContentNorth(), java.awt.BorderLayout.NORTH);\r
-            jContentPane.add(getJPanelContentWest(), java.awt.BorderLayout.WEST);\r
-            jContentPane.add(getJPanelContentEast(), java.awt.BorderLayout.EAST);\r
-            jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
-        }\r
-        return jContentPane;\r
-    }\r
 \r
-}  //  @jve:decl-index=0:visual-constraint="10,10"\r
+} //  @jve:decl-index=0:visual-constraint="10,10"\r