]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
a. Enhanced toolchain setting UI for ModuleSa build options and global build options.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
index a849f5ab464d44fc5f53816e08e95eeee7002b74..14fd02499f7c0a001e9137fc57572e9eaf158931 100644 (file)
@@ -4,6 +4,7 @@ import java.awt.BorderLayout;
 import java.awt.Dimension;\r
 import java.awt.Toolkit;\r
 \r
+import javax.swing.DefaultCellEditor;\r
 import javax.swing.JFrame;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
@@ -23,11 +24,13 @@ import javax.swing.event.TableModelListener;
 import javax.swing.table.DefaultTableModel;\r
 import javax.swing.table.TableModel;\r
 \r
-import org.apache.xmlbeans.XmlObject;\r
-import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
+import org.tianocore.frameworkwizard.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.GlobalData;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
+import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
 import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
-import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
-import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
+import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
+import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
 \r
 import java.awt.FlowLayout;\r
 import java.awt.event.ActionEvent;\r
@@ -36,8 +39,6 @@ import java.util.ArrayList;
 import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.ListIterator;\r
-import java.util.Map;\r
-import java.util.Set;\r
 import java.util.Vector;\r
 \r
 import javax.swing.JTextField;\r
@@ -53,70 +54,75 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     static JFrame frame;\r
     private JPanel jContentPane = null;\r
     private JTabbedPane jTabbedPane = null;\r
-    private JPanel jPanel = null;\r
-    private JPanel jPanel1 = null;\r
-    private JLabel jLabel = null;\r
-    private JScrollPane jScrollPane = null;\r
-    private JTable jTable = null;\r
-    private JPanel jPanel2 = null;\r
-    private JScrollPane jScrollPane1 = null;\r
-    private JTextArea jTextArea = null;\r
-    private JPanel jPanel3 = null;\r
+    private JPanel jPanelPcd = null;\r
+    private JPanel jPanelLibrary = null;\r
+    private JLabel jLabelPcdData = null;\r
+    private JScrollPane jScrollPaneTablePcd = null;\r
+    private JTable jTablePcd = null;\r
+    private JPanel jPanelPcdSouth = null;\r
+    private JScrollPane jScrollPanePcdHelp = null;\r
+    private JTextArea jTextAreaPcdHelp = null;\r
+    private JPanel jPanelContentPaneSouth = null;\r
     private JSplitPane jSplitPane = null;\r
-    private JPanel jPanel4 = null;\r
-    private JPanel jPanel5 = null;\r
-    private JLabel jLabel1 = null;\r
-    private JLabel jLabel2 = null;\r
-    private JScrollPane jScrollPane2 = null;\r
-    private JTable jTable1 = null;\r
-    private JScrollPane jScrollPane3 = null;\r
-    private JTable jTable2 = null;\r
-    private JScrollPane jScrollPane4 = null;\r
-    private JTable jTable3 = null;\r
-    private JPanel jPanel6 = null;\r
-    private JPanel jPanel7 = null;\r
-    private JScrollPane jScrollPane5 = null;\r
-    private JTextArea jTextArea1 = null;\r
-    private JLabel jLabel3 = null;\r
-    private JLabel jLabel4 = null;\r
-    private JButton jButton = null;\r
-    private JButton jButton1 = null;\r
-    private JLabel jLabel5 = null;\r
-    private JButton jButton2 = null;\r
-    private JButton jButton3 = null;\r
+    private JPanel jPanelLibraryLeft = null;\r
+    private JPanel jPanelLibraryRight = null;\r
+    private JLabel jLabelLibClass = null;\r
+    private JLabel jLabelQualifiedInstance = null;\r
+    private JScrollPane jScrollPaneSelectedInstances = null;\r
+    private JTable jTableSelectedInstances = null;\r
+    private JScrollPane jScrollPaneLibClass = null;\r
+    private JTable jTableLibClass = null;\r
+    private JScrollPane jScrollPaneQualifiedInstance = null;\r
+    private JTable jTableLibInstances = null;\r
+    private JPanel jPanelLibrarySouth = null;\r
+    private JPanel jPanelLibraryCenter = null;\r
+    private JScrollPane jScrollPaneInstanceHelp = null;\r
+    private JTextArea jTextAreaInstanceHelp = null;\r
+    private JLabel jLabelSelectedInstances = null;\r
+    private JLabel jLabelInstanceHelp = null;\r
+    private JButton jButtonAdd = null;\r
+    private JButton jButtonDeleteInstance = null;\r
+    private JLabel jLabelPcdHelp = null;\r
+    private JButton jButtonOk = null;\r
+    private JButton jButtonCancel = null;\r
     private PartialEditableTableModel model = null;\r
-    private LibraryTableModel model1 = null;\r
-    private LibraryTableModel model2 = null;\r
-    private LibraryTableModel model3 = null;\r
+    private LibraryTableModel selectedInstancesTableModel = null;\r
+    private LibraryTableModel libClassTableModel = null;\r
+    private LibraryTableModel libInstanceTableModel = null;\r
     private DefaultTableModel optionsTableModel = null;\r
     private FpdFileContents ffc = null;\r
     private String moduleKey = null;\r
+    private int moduleSaNum = -1;\r
     private HashMap<String, ArrayList<String>> classInstanceMap = null;\r
     private ArrayList<String> classProduced = null;\r
     private HashMap<String, ArrayList<String>> classConsumed = null;\r
-    private JPanel jPanel8 = null;\r
-    private JLabel jLabel6 = null;\r
-    private JTextField jTextField = null;\r
-    private JLabel jLabel7 = null;\r
-    private JTextField jTextField1 = null;\r
-    private JLabel jLabel8 = null;\r
-    private JTextField jTextField2 = null;\r
-    private JScrollPane jScrollPane6 = null;\r
-    private JTable jTable4 = null;\r
-    private JButton jButton4 = null;\r
-    private JButton jButton5 = null;\r
-    private JPanel jPanel9 = null;\r
-    private JPanel jPanel10 = null;\r
-    private JPanel jPanel11 = null;\r
-    private JPanel jPanel12 = null;\r
-    private JLabel jLabel9 = null;\r
-    private JComboBox jComboBox = null;\r
-    private JLabel jLabel10 = null;\r
-    private JTextField jTextField3 = null;\r
-    private JLabel jLabel11 = null;\r
-    private JTextField jTextField4 = null;\r
-    private JButton jButton6 = null;\r
-    private JComboBox jComboBox1 = null;\r
+    private JPanel jPanelModuleSaOpts = null;\r
+    private JLabel jLabelFvBinding = null;\r
+    private JTextField jTextFieldFvBinding = null;\r
+    private JLabel jLabelFfsFileGuid = null;\r
+    private JTextField jTextFieldFileGuid = null;\r
+    private JLabel jLabelFfsFormatKey = null;\r
+    private JTextField jTextFieldFfsKey = null;\r
+    private JScrollPane jScrollPaneModuleSaOptions = null;\r
+    private JTable jTableModuleSaOptions = null;\r
+    private JButton jButtonNew = null;\r
+    private JButton jButtonDeleteOption = null;\r
+    private JPanel jPanelPcdFields = null;\r
+    private JPanel jPanelPcdFieldsSecondRow = null;\r
+    private JPanel jPanelPcdFieldsThirdRow = null;\r
+    private JPanel jPanelPcdFieldsFirstRow = null;\r
+    private JLabel jLabelItemType = null;\r
+    private JComboBox jComboBoxItemType = null;\r
+    private JLabel jLabelMaxDatumSize = null;\r
+    private JTextField jTextFieldMaxDatumSize = null;\r
+    private JLabel jLabelPcdDefaultValue = null;\r
+    private JTextField jTextFieldPcdDefault = null;\r
+    private JButton jButtonUpdatePcd = null;\r
+    private JComboBox jComboBoxFeatureFlagValue = null;\r
+    private OpeningPlatformType docConsole = null;\r
+    private JPanel jPanelCustomToolChain = null;\r
+    private JPanel jPanelToolchainS = null;\r
+    private JPanel jPanelToolchainC = null;\r
     /**\r
      * This is the default constructor\r
      */\r
@@ -129,26 +135,35 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         this.ffc = ffc;\r
     }\r
     \r
-    public void setKey(String k){\r
+    public void setKey(String k, int i, OpeningPlatformType dc){\r
         this.moduleKey = k;\r
+        moduleSaNum = i;\r
+        this.docConsole = dc;\r
+        classProduced = null;\r
+        classConsumed = null;\r
         jTabbedPane.setSelectedIndex(0);\r
+        initPcdBuildDefinition(i);\r
     }\r
 \r
     /**\r
       init will be called each time FpdModuleSA object is to be shown.\r
       @param key Module information.\r
      **/\r
-    public void initPcdBuildDefinition(String key) {\r
+    public void initPcdBuildDefinition(int i) {\r
         //\r
         // display pcd for key.\r
         //\r
         model.setRowCount(0);\r
-        int pcdCount = ffc.getPcdDataCount(key);\r
+        jTextAreaPcdHelp.setText("");\r
+        jComboBoxItemType.setSelectedIndex(-1);\r
+        jTextFieldMaxDatumSize.setText("");\r
+        jTextFieldPcdDefault.setText("");\r
+        int pcdCount = ffc.getPcdDataCount(i);\r
         if (pcdCount != 0) {\r
             String[][] saa = new String[pcdCount][7];\r
-            ffc.getPcdData(key, saa);\r
-            for (int i = 0; i < saa.length; ++i) {\r
-                model.addRow(saa[i]);\r
+            ffc.getPcdData(i, saa);\r
+            for (int j = 0; j < saa.length; ++j) {\r
+                model.addRow(saa[j]);\r
             }\r
         }\r
     }\r
@@ -157,97 +172,99 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         //\r
         // display library classes that need to be resolved. also potential instances for them.\r
         //\r
-        resolveLibraryInstances(key);\r
+        resolveLibraryInstances(moduleKey);\r
         //\r
         // display lib instances already selected for key\r
         //\r
-        model1.setRowCount(0);\r
+        selectedInstancesTableModel.setRowCount(0);\r
         int instanceCount = ffc.getLibraryInstancesCount(key);\r
         if (instanceCount != 0) {\r
             String[][] saa = new String[instanceCount][5];\r
             ffc.getLibraryInstances(key, saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
-                ModuleIdentification mi = getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
+                ModuleIdentification mi = WorkspaceProfile.getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
                 if (mi != null) {\r
                     saa[i][0] = mi.getName();\r
                     saa[i][2] = mi.getVersion();\r
-                    saa[i][4] = mi.getPackage().getVersion();\r
+                    saa[i][4] = mi.getPackageId().getVersion();\r
                     //\r
                     // re-evaluate lib instance usage when adding a already-selected lib instance.\r
                     //\r
                     resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
-                    model1.addRow(saa[i]);\r
+                    selectedInstancesTableModel.addRow(saa[i]);\r
                 }\r
-                \r
-                \r
             }\r
         }\r
+        showClassToResolved();\r
     }\r
     \r
-    public void initModuleSAOptions(String key) {\r
+    public void initFvInfo (String key) {\r
         //\r
         // display module SA options\r
         //\r
+        jTextFieldFvBinding.setText("");\r
         String fvBinding = ffc.getFvBinding(key);\r
         if (fvBinding != null) {\r
-            jTextField.setText(fvBinding);\r
+            jTextFieldFvBinding.setText(fvBinding);\r
         }\r
+        jTextFieldFileGuid.setText("");\r
         String fileGuid = ffc.getFfsFileNameGuid(key);\r
         if (fileGuid != null) {\r
-            jTextField1.setText(fileGuid);\r
+            jTextFieldFileGuid.setText(fileGuid);\r
         }\r
+        jTextFieldFfsKey.setText("");\r
         String ffsKey = ffc.getFfsFormatKey(key);\r
         if (ffsKey != null) {\r
-            jTextField2.setText(ffsKey);\r
+            jTextFieldFfsKey.setText(ffsKey);\r
+        }\r
+    }\r
+    \r
+    public void initToolChainOptions(String key) {\r
+        \r
+        optionsTableModel.setRowCount(0);\r
+        String[][] saa = new String[ffc.getModuleSAOptionsCount(key)][6];\r
+        ffc.getModuleSAOptions(key, saa);\r
+        for (int i = 0; i < saa.length; ++i) {\r
+            optionsTableModel.addRow(saa[i]);\r
         }\r
     }\r
     \r
     private void resolveLibraryInstances(String key) {\r
-        ModuleIdentification mi = getModuleId(key);\r
+        ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
         PackageIdentification[] depPkgList = null;\r
         try{\r
-            Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
-            SurfaceAreaQuery.setDoc(m);\r
             //\r
             // Get dependency pkg list into which we will search lib instances.\r
             //\r
-            depPkgList = SurfaceAreaQuery.getDependencePkg(null);\r
+            depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);\r
             //\r
             // Get the lib class consumed, produced by this module itself.\r
             //\r
-            String[] classConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
+            Vector<String> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
             \r
             if (this.classConsumed == null) {\r
                 this.classConsumed = new HashMap<String, ArrayList<String>>();\r
             }\r
             \r
-            for(int i = 0; i < classConsumed.length; ++i){\r
-                ArrayList<String> consumedBy = this.classConsumed.get(classConsumed[i]);\r
+            for(int i = 0; i < vClassConsumed.size(); ++i){\r
+                ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));\r
                 if (consumedBy == null) {\r
                     consumedBy = new ArrayList<String>();\r
                 }\r
                 consumedBy.add(key);\r
-                this.classConsumed.put(classConsumed[i], consumedBy);\r
+                this.classConsumed.put(vClassConsumed.get(i), consumedBy);\r
             }\r
             \r
-            String[] classProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
+            Vector<String> vClassProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);\r
             if (this.classProduced == null) {\r
                 this.classProduced = new ArrayList<String>();\r
             }\r
-            for(int i = 0; i < classProduced.length; ++i){\r
-                if (!this.classProduced.contains(classProduced[i])){\r
-                    this.classProduced.add(classProduced[i]);\r
+            for(int i = 0; i < vClassProduced.size(); ++i){\r
+                if (!this.classProduced.contains(vClassProduced.get(i))){\r
+                    this.classProduced.add(vClassProduced.get(i));\r
                 }\r
             }\r
-            //\r
-            // Get classes unresolved\r
-            //\r
-//            Iterator<String> lip = this.classProduced.listIterator();\r
-//            while(lip.hasNext()){\r
-//                String clsProduced = lip.next();\r
-//                this.classConsumed.remove(clsProduced);\r
-//\r
-//            }\r
+            \r
             //\r
             // find potential instances in all dependency pkgs for classes still in classConsumed.\r
             //\r
@@ -269,7 +286,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 \r
             }\r
             \r
-            showClassToResolved();\r
+//            showClassToResolved();\r
         }\r
         catch(Exception e) {\r
             e.printStackTrace();\r
@@ -280,11 +297,12 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         ArrayList<String> al = new ArrayList<String>();\r
         \r
         for (int i = 0; i < depPkgList.length; ++i) {\r
-            Set<ModuleIdentification> smi = GlobalData.getModules(depPkgList[i]);\r
-            Iterator ismi = smi.iterator();\r
+            Iterator ismi = GlobalData.vModuleList.iterator();\r
             while(ismi.hasNext()) {\r
                 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
-                \r
+                if (!mi.getPackageId().getGuid().equalsIgnoreCase(depPkgList[i].getGuid())) {\r
+                    continue;\r
+                }\r
                 String[] clsProduced = getClassProduced(mi);\r
                 \r
                 boolean isPotential = false;\r
@@ -311,7 +329,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     }\r
     \r
     private void removeInstance(String key) {\r
-        ModuleIdentification mi = getModuleId(key); \r
+        ModuleIdentification mi = WorkspaceProfile.getModuleId(key); \r
         //\r
         // remove pcd information of instance from current ModuleSA\r
         //\r
@@ -346,40 +364,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         \r
     }\r
     \r
-    private ModuleIdentification getModuleId(String key){\r
-        //\r
-        // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.\r
-        //\r
-        String[] keyPart = key.split(" ");\r
-        Set<PackageIdentification> spi = GlobalData.getPackageList();\r
-        Iterator ispi = spi.iterator();\r
-        \r
-        while(ispi.hasNext()) {\r
-            PackageIdentification pi = (PackageIdentification)ispi.next();\r
-            if ( !pi.getGuid().equals(keyPart[2])){\r
-//                            || !pi.getVersion().equals(keyPart[3])){\r
-                continue;\r
-            }\r
-            Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
-            Iterator ismi = smi.iterator();\r
-            while(ismi.hasNext()) {\r
-                ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
-                if (mi.getGuid().equals(keyPart[0])){\r
-//                                && mi.getVersion().equals(keyPart[1])){\r
-                    return mi;\r
-                }\r
-            }\r
-        }\r
-        return null;\r
-    }\r
     \r
     private String[] getClassProduced(ModuleIdentification mi){\r
         \r
         try{\r
-            Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
-            SurfaceAreaQuery.setDoc(m);\r
-            String[] clsProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
-            return clsProduced;\r
+            Vector<String> clsProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);\r
+            String[] sClassProduced = new String[clsProduced.size()];\r
+            for (int i = 0; i < clsProduced.size(); ++i) {\r
+                sClassProduced[i] = clsProduced.get(i);\r
+            }\r
+            return sClassProduced;\r
             \r
         }catch (Exception e) {\r
             e.printStackTrace();\r
@@ -390,20 +384,21 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     \r
     private String[] getClassConsumed(ModuleIdentification mi){\r
         \r
-        String[] clsConsumed = null;\r
         try{\r
-            Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
-            SurfaceAreaQuery.setDoc(m);\r
-            clsConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED");\r
-            \r
+            Vector<String> clsConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
+            String[] sClassConsumed = new String[clsConsumed.size()];\r
+            for (int i = 0; i < clsConsumed.size(); ++i) {\r
+                sClassConsumed[i] = clsConsumed.get(i);\r
+            }\r
+            return sClassConsumed;\r
         }catch (Exception e) {\r
             e.printStackTrace();\r
         }\r
-        return clsConsumed;\r
+        return new String[0];\r
     }\r
     \r
     private void showClassToResolved(){\r
-        model2.setRowCount(0);\r
+        libClassTableModel.setRowCount(0);\r
         if (classConsumed.size() == 0) {\r
             return;\r
         }\r
@@ -411,17 +406,32 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         while(li.hasNext()){\r
             \r
             String[] s = {li.next()};\r
-            if (classConsumed.get(s[0]) == null) {\r
-                continue;\r
-            }\r
-            if (classConsumed.get(s[0]).size() == 0) {\r
-                continue;\r
-            }\r
+//            if (classConsumed.get(s[0]) == null) {\r
+//                continue;\r
+//            }\r
+//            if (classConsumed.get(s[0]).size() == 0) {\r
+//                continue;\r
+//            }\r
             if (!classProduced.contains(s[0])){\r
-                model2.addRow(s);\r
+                libClassTableModel.addRow(s);\r
             }\r
         }\r
-        model3.setRowCount(0);\r
+        libInstanceTableModel.setRowCount(0);\r
+    }\r
+    \r
+    private void addLibInstance (ModuleIdentification libMi) {\r
+        \r
+        ffc.genLibraryInstance(libMi, moduleKey);\r
+        //\r
+        // Add pcd information of selected instance to current moduleSA\r
+        //\r
+        try{\r
+            ffc.addFrameworkModulesPcdBuildDefs(libMi, null, ffc.getModuleSA(moduleKey));\r
+        }\r
+        catch (Exception exception) {\r
+            JOptionPane.showMessageDialog(frame, "Adding Instance" + libMi.getName() + ": "+ exception.getMessage());\r
+        }\r
+        \r
     }\r
     /**\r
      * This method initializes this\r
@@ -446,7 +456,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             jContentPane = new JPanel();\r
             jContentPane.setLayout(new BorderLayout());\r
             jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
-            jContentPane.add(getJPanel3(), java.awt.BorderLayout.SOUTH);\r
+            jContentPane.add(getJPanelContentPaneSouth(), java.awt.BorderLayout.SOUTH);\r
         }\r
         return jContentPane;\r
     }\r
@@ -459,69 +469,71 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JTabbedPane getJTabbedPane() {\r
         if (jTabbedPane == null) {\r
             jTabbedPane = new JTabbedPane();\r
-            jTabbedPane.addTab("PCD Build Definition", null, getJPanel(), null);\r
-            jTabbedPane.addTab("Module SA Options", null, getJPanel8(), null);\r
-            jTabbedPane.addTab("Libraries", null, getJPanel1(), null);\r
+            jTabbedPane.addTab("PCD Build Definition", null, getJPanelPcd(), null);\r
+            jTabbedPane.addTab("Libraries", null, getJPanelLibrary(), null);\r
+            jTabbedPane.addTab("FV Info", null, getJPanelModuleSaOpts(), null);\r
+            jTabbedPane.addTab("Custom Toolchain", null, getJPanelCustomToolChain(), null);\r
+            \r
         }\r
         return jTabbedPane;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel  \r
+     * This method initializes jPanelPcd\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel() {\r
-        if (jPanel == null) {\r
-            jLabel = new JLabel();\r
-            jLabel.setText("PcdData");\r
-            jPanel = new JPanel();\r
-            jPanel.setLayout(new BorderLayout());\r
-            jPanel.add(jLabel, java.awt.BorderLayout.NORTH);\r
-            jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER);\r
-            jPanel.add(getJPanel2(), java.awt.BorderLayout.SOUTH);\r
-            jPanel.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+    private JPanel getJPanelPcd() {\r
+        if (jPanelPcd == null) {\r
+            jLabelPcdData = new JLabel();\r
+            jLabelPcdData.setText("PcdData");\r
+            jPanelPcd = new JPanel();\r
+            jPanelPcd.setLayout(new BorderLayout());\r
+            jPanelPcd.add(jLabelPcdData, java.awt.BorderLayout.NORTH);\r
+            jPanelPcd.add(getJScrollPaneTablePcd(), java.awt.BorderLayout.CENTER);\r
+            jPanelPcd.add(getJPanelPcdSouth(), java.awt.BorderLayout.SOUTH);\r
+            jPanelPcd.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
-                    initPcdBuildDefinition(moduleKey);\r
+                    initPcdBuildDefinition(moduleSaNum);\r
                 }\r
             });\r
             \r
         }\r
-        return jPanel;\r
+        return jPanelPcd;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelLibrary\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel1() {\r
-        if (jPanel1 == null) {\r
-            jPanel1 = new JPanel();\r
-            jPanel1.setLayout(new BorderLayout());\r
-            jPanel1.add(getJSplitPane(), java.awt.BorderLayout.NORTH);\r
-            jPanel1.add(getJPanel6(), java.awt.BorderLayout.SOUTH);\r
-            jPanel1.add(getJPanel7(), java.awt.BorderLayout.CENTER);\r
-            jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+    private JPanel getJPanelLibrary() {\r
+        if (jPanelLibrary == null) {\r
+            jPanelLibrary = new JPanel();\r
+            jPanelLibrary.setLayout(new BorderLayout());\r
+            jPanelLibrary.add(getJSplitPane(), java.awt.BorderLayout.NORTH);\r
+            jPanelLibrary.add(getJPanelLibrarySouth(), java.awt.BorderLayout.SOUTH);\r
+            jPanelLibrary.add(getJPanelLibraryCenter(), java.awt.BorderLayout.CENTER);\r
+            jPanelLibrary.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
                     initLibraries(moduleKey);\r
                 }\r
             });\r
         }\r
-        return jPanel1;\r
+        return jPanelLibrary;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane     \r
+     * This method initializes jScrollPaneTablePcd\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane() {\r
-        if (jScrollPane == null) {\r
-            jScrollPane = new JScrollPane();\r
-            jScrollPane.setViewportView(getJTable());\r
+    private JScrollPane getJScrollPaneTablePcd() {\r
+        if (jScrollPaneTablePcd == null) {\r
+            jScrollPaneTablePcd = new JScrollPane();\r
+            jScrollPaneTablePcd.setViewportView(getJTablePcd());\r
         }\r
-        return jScrollPane;\r
+        return jScrollPaneTablePcd;\r
     }\r
 \r
     /**\r
@@ -529,12 +541,12 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable() {\r
-        if (jTable == null) {\r
+    private JTable getJTablePcd() {\r
+        if (jTablePcd == null) {\r
             model = new PartialEditableTableModel();\r
-            jTable = new JTable(model);\r
-            jTable.setRowHeight(20);\r
-            jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+            jTablePcd = new JTable(model);\r
+            jTablePcd.setRowHeight(20);\r
+            jTablePcd.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
             model.addColumn("CName");\r
             model.addColumn("TokenSpaceGUID");\r
             model.addColumn("ItemType");\r
@@ -543,8 +555,8 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             model.addColumn("DataType");\r
             model.addColumn("DefaultValue");\r
                         \r
-            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+            jTablePcd.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTablePcd.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
                     \r
                     if (e.getValueIsAdjusting()){\r
@@ -556,53 +568,54 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                     }\r
                     else{\r
                         int selectedRow = lsm.getMinSelectionIndex();\r
-                        String cName = jTable.getValueAt(selectedRow, 0)+"";\r
+                        String cName = jTablePcd.getValueAt(selectedRow, 0)+"";\r
+                        String tsGuid = jTablePcd.getValueAt(selectedRow, 1)+"";\r
                         String[] pcdInfo = {"", ""};\r
-                        getPcdInfo(cName, pcdInfo);\r
-                        jTextArea.setText(pcdInfo[0]);\r
+                        getPcdInfo(cName, tsGuid, pcdInfo);\r
+                        jTextAreaPcdHelp.setText(pcdInfo[0]);\r
                         initComboBox(pcdInfo[1]);\r
-                        jComboBox.setSelectedItem(pcdInfo[1]);\r
-                        jTextField3.setEnabled(true);\r
-                        jTextField3.setVisible(true);\r
-                        jTextField3.setText(jTable.getValueAt(selectedRow, 4)+"");\r
-                        jTextField4.setEnabled(true);\r
-                        jTextField4.setText(jTable.getValueAt(selectedRow, 6)+"");\r
-                        if (jTable.getValueAt(selectedRow, 5).equals("VOID*")) {\r
+                        jComboBoxItemType.setSelectedItem(pcdInfo[1]);\r
+                        jTextFieldMaxDatumSize.setEnabled(true);\r
+                        jTextFieldMaxDatumSize.setVisible(true);\r
+                        jTextFieldMaxDatumSize.setText(jTablePcd.getValueAt(selectedRow, 4)+"");\r
+                        jTextFieldPcdDefault.setEnabled(true);\r
+                        jTextFieldPcdDefault.setText(jTablePcd.getValueAt(selectedRow, 6)+"");\r
+                        if (jTablePcd.getValueAt(selectedRow, 5).equals("VOID*")) {\r
                             if (pcdInfo[1].equals("FEATURE_FLAG")) {\r
-                                jTextField3.setVisible(false);\r
+                                jTextFieldMaxDatumSize.setVisible(false);\r
                             }\r
                             else if (pcdInfo[1].equals("FIXED_AT_BUILD")) {\r
                                 try{\r
-                                    jTextField3.setEnabled(false);\r
-                                    jTextField3.setText(ffc.setMaxSizeForPointer(jTable.getValueAt(selectedRow, 6)+"")+"");\r
+                                    jTextFieldMaxDatumSize.setEnabled(false);\r
+                                    jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(jTablePcd.getValueAt(selectedRow, 6)+"")+"");\r
                                 }\r
                                 catch(Exception except){\r
                                     JOptionPane.showMessageDialog(frame, "Unacceptable PCD Value: " + except.getMessage());\r
                                 }\r
                             }\r
                             else{\r
-                                jTextField3.setText(jTable.getValueAt(selectedRow, 4)+"");\r
+                                jTextFieldMaxDatumSize.setText(jTablePcd.getValueAt(selectedRow, 4)+"");\r
                             }\r
                         }\r
                         else {\r
-                            jTextField3.setEnabled(false);\r
+                            jTextFieldMaxDatumSize.setEnabled(false);\r
                         }\r
                         \r
-                        if (!jTable.getValueAt(selectedRow, 2).equals("DYNAMIC") && !jTable.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) {\r
-                            jTextField4.setText(jTable.getValueAt(selectedRow, 6)+"");\r
-                            if (jTable.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){\r
-                                jTextField4.setVisible(false);\r
-                                jComboBox1.setVisible(true);\r
-                                jComboBox1.setSelectedItem(jTable.getValueAt(selectedRow, 6)+"");\r
+                        if (!jTablePcd.getValueAt(selectedRow, 2).equals("DYNAMIC") && !jTablePcd.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) {\r
+                            jTextFieldPcdDefault.setText(jTablePcd.getValueAt(selectedRow, 6)+"");\r
+                            if (jTablePcd.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){\r
+                                jTextFieldPcdDefault.setVisible(false);\r
+                                jComboBoxFeatureFlagValue.setVisible(true);\r
+                                jComboBoxFeatureFlagValue.setSelectedItem(jTablePcd.getValueAt(selectedRow, 6)+"");\r
                             }\r
                             else{\r
-                                jTextField4.setVisible(true);\r
-                                jTextField4.setEnabled(true);\r
-                                jComboBox1.setVisible(false);\r
+                                jTextFieldPcdDefault.setVisible(true);\r
+                                jTextFieldPcdDefault.setEnabled(true);\r
+                                jComboBoxFeatureFlagValue.setVisible(false);\r
                             }\r
                         }\r
                         else{\r
-                            jTextField4.setEnabled(false);\r
+                            jTextFieldPcdDefault.setEnabled(false);\r
                         }\r
                     }\r
                     \r
@@ -610,7 +623,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 }\r
             });\r
             \r
-            jTable.getModel().addTableModelListener(new TableModelListener() {\r
+            jTablePcd.getModel().addTableModelListener(new TableModelListener() {\r
                 public void tableChanged(TableModelEvent arg0) {\r
                     // TODO Auto-generated method stub\r
 //                    int row = arg0.getFirstRow();\r
@@ -623,32 +636,32 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 }\r
             });\r
         }\r
-        return jTable;\r
+        return jTablePcd;\r
     }\r
     \r
     private void initComboBox(String originalType) {\r
-        jComboBox.removeAllItems();\r
-        jComboBox.addItem(originalType);\r
+        jComboBoxItemType.removeAllItems();\r
+        jComboBoxItemType.addItem(originalType);\r
         if (originalType.equals("PATCHABLE_IN_MODULE")) {\r
-            jComboBox.addItem("FIXED_AT_BUILD");\r
+            jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
         }\r
         if (originalType.equals("DYNAMIC")) {\r
-            jComboBox.addItem("FIXED_AT_BUILD");\r
-            jComboBox.addItem("PATCHABLE_IN_MODULE");\r
+            jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
+            jComboBoxItemType.addItem("PATCHABLE_IN_MODULE");\r
         }\r
     }\r
     \r
-    private void getPcdInfo(String cName, String[] sa) {\r
+    private void getPcdInfo(String cName, String tsGuid, String[] sa) {\r
         String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5];\r
         ffc.getLibraryInstances(moduleKey, saa);\r
         \r
         try{\r
-            if (ffc.getPcdBuildDataInfo(getModuleId(moduleKey), cName, sa)) {\r
+            if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa)) {\r
                 return;\r
             }\r
             for (int j = 0; j < saa.length; ++j) {\r
-                if (ffc.getPcdBuildDataInfo(getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),\r
-                                            cName, sa)) {\r
+                if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),\r
+                                            cName, tsGuid, sa)) {\r
                     return;\r
                 }\r
             }\r
@@ -659,65 +672,65 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelPcdSouth\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel2() {\r
-        if (jPanel2 == null) {\r
-            jLabel5 = new JLabel();\r
-            jLabel5.setText("PCD Description");\r
-            jPanel2 = new JPanel();\r
-            jPanel2.setPreferredSize(new java.awt.Dimension(607,200));\r
-            jPanel2.add(jLabel5, null);\r
-            jPanel2.add(getJScrollPane1(), null);\r
-            jPanel2.add(getJPanel9(), null);\r
+    private JPanel getJPanelPcdSouth() {\r
+        if (jPanelPcdSouth == null) {\r
+            jLabelPcdHelp = new JLabel();\r
+            jLabelPcdHelp.setText("PCD Description");\r
+            jPanelPcdSouth = new JPanel();\r
+            jPanelPcdSouth.setPreferredSize(new java.awt.Dimension(607,200));\r
+            jPanelPcdSouth.add(jLabelPcdHelp, null);\r
+            jPanelPcdSouth.add(getJScrollPanePcdHelp(), null);\r
+            jPanelPcdSouth.add(getJPanelPcdFields(), null);\r
         }\r
-        return jPanel2;\r
+        return jPanelPcdSouth;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane1    \r
+     * This method initializes jScrollPanePcdHelp\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane1() {\r
-        if (jScrollPane1 == null) {\r
-            jScrollPane1 = new JScrollPane();\r
-            jScrollPane1.setPreferredSize(new java.awt.Dimension(500,100));\r
-            jScrollPane1.setViewportView(getJTextArea());\r
+    private JScrollPane getJScrollPanePcdHelp() {\r
+        if (jScrollPanePcdHelp == null) {\r
+            jScrollPanePcdHelp = new JScrollPane();\r
+            jScrollPanePcdHelp.setPreferredSize(new java.awt.Dimension(500,100));\r
+            jScrollPanePcdHelp.setViewportView(getJTextAreaPcdHelp());\r
         }\r
-        return jScrollPane1;\r
+        return jScrollPanePcdHelp;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextArea       \r
+     * This method initializes jTextAreaPcdHelp\r
      *         \r
      * @return javax.swing.JTextArea   \r
      */\r
-    private JTextArea getJTextArea() {\r
-        if (jTextArea == null) {\r
-            jTextArea = new JTextArea();\r
-            jTextArea.setEditable(false);\r
+    private JTextArea getJTextAreaPcdHelp() {\r
+        if (jTextAreaPcdHelp == null) {\r
+            jTextAreaPcdHelp = new JTextArea();\r
+            jTextAreaPcdHelp.setEditable(false);\r
         }\r
-        return jTextArea;\r
+        return jTextAreaPcdHelp;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelContentPaneSouth\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel3() {\r
-        if (jPanel3 == null) {\r
+    private JPanel getJPanelContentPaneSouth() {\r
+        if (jPanelContentPaneSouth == null) {\r
             FlowLayout flowLayout = new FlowLayout();\r
             flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
-            jPanel3 = new JPanel();\r
-            jPanel3.setLayout(flowLayout);\r
-            jPanel3.add(getJButton2(), null);\r
-            jPanel3.add(getJButton3(), null);\r
+            jPanelContentPaneSouth = new JPanel();\r
+            jPanelContentPaneSouth.setLayout(flowLayout);\r
+            jPanelContentPaneSouth.add(getJButtonOk(), null);\r
+            jPanelContentPaneSouth.add(getJButtonCancel(), null);\r
         }\r
-        return jPanel3;\r
+        return jPanelContentPaneSouth;\r
     }\r
 \r
     /**\r
@@ -729,109 +742,109 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         if (jSplitPane == null) {\r
             jSplitPane = new JSplitPane();\r
             jSplitPane.setDividerLocation(200);\r
-            jSplitPane.setLeftComponent(getJPanel4());\r
-            jSplitPane.setRightComponent(getJPanel5());\r
+            jSplitPane.setLeftComponent(getJPanelLibraryLeft());\r
+            jSplitPane.setRightComponent(getJPanelLibraryRight());\r
             jSplitPane.setPreferredSize(new java.awt.Dimension(202,200));\r
         }\r
         return jSplitPane;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelLibraryLeft\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel4() {\r
-        if (jPanel4 == null) {\r
-            jLabel1 = new JLabel();\r
-            jLabel1.setText("Library Classes Consumed");\r
-            jPanel4 = new JPanel();\r
-            jPanel4.add(jLabel1, null);\r
-            jPanel4.add(getJScrollPane3(), null);\r
+    private JPanel getJPanelLibraryLeft() {\r
+        if (jPanelLibraryLeft == null) {\r
+            jLabelLibClass = new JLabel();\r
+            jLabelLibClass.setText("Library Classes Uninstantiated");\r
+            jPanelLibraryLeft = new JPanel();\r
+            jPanelLibraryLeft.add(jLabelLibClass, null);\r
+            jPanelLibraryLeft.add(getJScrollPaneLibClass(), null);\r
         }\r
-        return jPanel4;\r
+        return jPanelLibraryLeft;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelLibraryRight\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel5() {\r
-        if (jPanel5 == null) {\r
-            jLabel2 = new JLabel();\r
-            jLabel2.setText("Instances Available");\r
-            jPanel5 = new JPanel();\r
-            jPanel5.add(jLabel2, null);\r
-            jPanel5.add(getJScrollPane4(), null);\r
+    private JPanel getJPanelLibraryRight() {\r
+        if (jPanelLibraryRight == null) {\r
+            jLabelQualifiedInstance = new JLabel();\r
+            jLabelQualifiedInstance.setText("Instances Available");\r
+            jPanelLibraryRight = new JPanel();\r
+            jPanelLibraryRight.add(jLabelQualifiedInstance, null);\r
+            jPanelLibraryRight.add(getJScrollPaneQualifiedInstance(), null);\r
         }\r
-        return jPanel5;\r
+        return jPanelLibraryRight;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane2    \r
+     * This method initializes jScrollPaneSelectedInstances\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane2() {\r
-        if (jScrollPane2 == null) {\r
-            jScrollPane2 = new JScrollPane();\r
-            jScrollPane2.setPreferredSize(new java.awt.Dimension(453,150));\r
-            jScrollPane2.setViewportView(getJTable1());\r
+    private JScrollPane getJScrollPaneSelectedInstances() {\r
+        if (jScrollPaneSelectedInstances == null) {\r
+            jScrollPaneSelectedInstances = new JScrollPane();\r
+            jScrollPaneSelectedInstances.setPreferredSize(new java.awt.Dimension(453,150));\r
+            jScrollPaneSelectedInstances.setViewportView(getJTableSelectedInstances());\r
         }\r
-        return jScrollPane2;\r
+        return jScrollPaneSelectedInstances;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable\r
+     * This method initializes jTableSelectedInstances\r
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable1() {\r
-        if (jTable1 == null) {\r
-            model1 = new LibraryTableModel();\r
-            model1.addColumn("Name");\r
-            model1.addColumn("ModuleGUID");\r
-            model1.addColumn("ModuleVersion");\r
-            model1.addColumn("PackageGUID");\r
-            model1.addColumn("PackageVersion");\r
-            jTable1 = new JTable(model1);\r
-            jTable1.setRowHeight(20);\r
-            jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
-            jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+    private JTable getJTableSelectedInstances() {\r
+        if (jTableSelectedInstances == null) {\r
+            selectedInstancesTableModel = new LibraryTableModel();\r
+            selectedInstancesTableModel.addColumn("Name");\r
+            selectedInstancesTableModel.addColumn("ModuleGUID");\r
+            selectedInstancesTableModel.addColumn("ModuleVersion");\r
+            selectedInstancesTableModel.addColumn("PackageGUID");\r
+            selectedInstancesTableModel.addColumn("PackageVersion");\r
+            jTableSelectedInstances = new JTable(selectedInstancesTableModel);\r
+            jTableSelectedInstances.setRowHeight(20);\r
+            jTableSelectedInstances.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
+            jTableSelectedInstances.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             \r
         }\r
-        return jTable1;\r
+        return jTableSelectedInstances;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane3    \r
+     * This method initializes jScrollPaneLibClass\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane3() {\r
-        if (jScrollPane3 == null) {\r
-            jScrollPane3 = new JScrollPane();\r
-            jScrollPane3.setPreferredSize(new java.awt.Dimension(200,170));\r
-            jScrollPane3.setViewportView(getJTable2());\r
+    private JScrollPane getJScrollPaneLibClass() {\r
+        if (jScrollPaneLibClass == null) {\r
+            jScrollPaneLibClass = new JScrollPane();\r
+            jScrollPaneLibClass.setPreferredSize(new java.awt.Dimension(200,170));\r
+            jScrollPaneLibClass.setViewportView(getJTableLibClass());\r
         }\r
-        return jScrollPane3;\r
+        return jScrollPaneLibClass;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable\r
+     * This method initializes jTableLibClass\r
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable2() {\r
-        if (jTable2 == null) {\r
-            model2 = new LibraryTableModel();\r
-            model2.addColumn("LibraryClass");\r
-            jTable2 = new JTable(model2);\r
-            jTable2.setRowHeight(20);\r
-            jTable2.setShowGrid(false);\r
-            jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+    private JTable getJTableLibClass() {\r
+        if (jTableLibClass == null) {\r
+            libClassTableModel = new LibraryTableModel();\r
+            libClassTableModel.addColumn("LibraryClass");\r
+            jTableLibClass = new JTable(libClassTableModel);\r
+            jTableLibClass.setRowHeight(20);\r
+            jTableLibClass.setShowGrid(false);\r
+            jTableLibClass.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableLibClass.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
                     if (e.getValueIsAdjusting()){\r
                         return;\r
@@ -848,196 +861,191 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         //\r
                         // display potential lib instances according to class selection\r
                         //\r
-                        model3.setRowCount(0);\r
-                        String cls = model2.getValueAt(selectedRow2, 0).toString();\r
+                        libInstanceTableModel.setRowCount(0);\r
+                        String cls = libClassTableModel.getValueAt(selectedRow2, 0).toString();\r
                         ArrayList<String> al = classInstanceMap.get(cls);\r
                         ListIterator<String> li = al.listIterator();\r
                         while(li.hasNext()) {\r
                             String instance = li.next();\r
                             String[] s = {"", "", "", "", ""};\r
-                            if (getModuleId(instance) != null) {\r
-                                s[0] = getModuleId(instance).getName();\r
+                            if (WorkspaceProfile.getModuleId(instance) != null) {\r
+                                s[0] = WorkspaceProfile.getModuleId(instance).getName();\r
                             }\r
                             \r
                             String[] instancePart = instance.split(" ");\r
                             for (int i = 0; i < instancePart.length; ++i){\r
                                 s[i+1] = instancePart[i];\r
                             }\r
-                            model3.addRow(s);\r
+                            libInstanceTableModel.addRow(s);\r
                         }\r
                         \r
                     }\r
                 }\r
             });\r
         }\r
-        return jTable2;\r
+        return jTableLibClass;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane4    \r
+     * This method initializes jScrollPaneQualifiedInstance\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane4() {\r
-        if (jScrollPane4 == null) {\r
-            jScrollPane4 = new JScrollPane();\r
-            jScrollPane4.setPreferredSize(new java.awt.Dimension(450,170));\r
-            jScrollPane4.setViewportView(getJTable3());\r
+    private JScrollPane getJScrollPaneQualifiedInstance() {\r
+        if (jScrollPaneQualifiedInstance == null) {\r
+            jScrollPaneQualifiedInstance = new JScrollPane();\r
+            jScrollPaneQualifiedInstance.setPreferredSize(new java.awt.Dimension(430,170));\r
+            jScrollPaneQualifiedInstance.setViewportView(getJTableLibInstances());\r
         }\r
-        return jScrollPane4;\r
+        return jScrollPaneQualifiedInstance;\r
     }\r
 \r
     /**\r
-     * This method initializes jTable\r
+     * This method initializes jTableLibInstances\r
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable3() {\r
-        if (jTable3 == null) {\r
-            model3 = new LibraryTableModel();\r
-            model3.addColumn("Name");\r
-            model3.addColumn("ModuleGUID");\r
-            model3.addColumn("ModuleVersion");\r
-            model3.addColumn("PackageGUID");\r
-            model3.addColumn("PackageVersion");\r
-            jTable3 = new JTable(model3);\r
-            jTable3.setRowHeight(20);\r
-            jTable3.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
-            jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+    private JTable getJTableLibInstances() {\r
+        if (jTableLibInstances == null) {\r
+            libInstanceTableModel = new LibraryTableModel();\r
+            libInstanceTableModel.addColumn("Name");\r
+            libInstanceTableModel.addColumn("ModuleGUID");\r
+            libInstanceTableModel.addColumn("ModuleVersion");\r
+            libInstanceTableModel.addColumn("PackageGUID");\r
+            libInstanceTableModel.addColumn("PackageVersion");\r
+            jTableLibInstances = new JTable(libInstanceTableModel);\r
+            jTableLibInstances.setRowHeight(20);\r
+            jTableLibInstances.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);\r
+            jTableLibInstances.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             \r
         }\r
-        return jTable3;\r
+        return jTableLibInstances;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelLibrarySouth\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel6() {\r
-        if (jPanel6 == null) {\r
-            jPanel6 = new JPanel();\r
+    private JPanel getJPanelLibrarySouth() {\r
+        if (jPanelLibrarySouth == null) {\r
+            jPanelLibrarySouth = new JPanel();\r
         }\r
-        return jPanel6;\r
+        return jPanelLibrarySouth;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelLibraryCenter\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel7() {\r
-        if (jPanel7 == null) {\r
-            jLabel4 = new JLabel();\r
-            jLabel4.setText("Instance Description");\r
-            jLabel3 = new JLabel();\r
-            jLabel3.setText("Selected Instances");\r
-            jPanel7 = new JPanel();\r
-            jPanel7.add(jLabel4, null);\r
-            jPanel7.add(getJScrollPane5(), null);\r
-            jPanel7.add(getJButton(), null);\r
-            jPanel7.add(getJButton1(), null);\r
-            jPanel7.add(jLabel3, null);\r
-            jPanel7.add(getJScrollPane2(), null);\r
+    private JPanel getJPanelLibraryCenter() {\r
+        if (jPanelLibraryCenter == null) {\r
+            jLabelInstanceHelp = new JLabel();\r
+            jLabelInstanceHelp.setText("Instance Description");\r
+            jLabelSelectedInstances = new JLabel();\r
+            jLabelSelectedInstances.setText("Selected Instances");\r
+            jPanelLibraryCenter = new JPanel();\r
+            jPanelLibraryCenter.add(jLabelInstanceHelp, null);\r
+            jPanelLibraryCenter.add(getJScrollPaneInstanceHelp(), null);\r
+            jPanelLibraryCenter.add(getJButtonAdd(), null);\r
+            jPanelLibraryCenter.add(getJButtonDeleteInstance(), null);\r
+            jPanelLibraryCenter.add(jLabelSelectedInstances, null);\r
+            jPanelLibraryCenter.add(getJScrollPaneSelectedInstances(), null);\r
         }\r
-        return jPanel7;\r
+        return jPanelLibraryCenter;\r
     }\r
 \r
     /**\r
-     * This method initializes jScrollPane5    \r
+     * This method initializes jScrollPaneInstanceHelp\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane5() {\r
-        if (jScrollPane5 == null) {\r
-            jScrollPane5 = new JScrollPane();\r
-            jScrollPane5.setPreferredSize(new java.awt.Dimension(300,50));\r
-            jScrollPane5.setViewportView(getJTextArea1());\r
+    private JScrollPane getJScrollPaneInstanceHelp() {\r
+        if (jScrollPaneInstanceHelp == null) {\r
+            jScrollPaneInstanceHelp = new JScrollPane();\r
+            jScrollPaneInstanceHelp.setPreferredSize(new java.awt.Dimension(300,50));\r
+            jScrollPaneInstanceHelp.setViewportView(getJTextAreaInstanceHelp());\r
         }\r
-        return jScrollPane5;\r
+        return jScrollPaneInstanceHelp;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextArea1      \r
+     * This method initializes jTextAreaInstanceHelp\r
      *         \r
      * @return javax.swing.JTextArea   \r
      */\r
-    private JTextArea getJTextArea1() {\r
-        if (jTextArea1 == null) {\r
-            jTextArea1 = new JTextArea();\r
-            jTextArea1.setEditable(false);\r
+    private JTextArea getJTextAreaInstanceHelp() {\r
+        if (jTextAreaInstanceHelp == null) {\r
+            jTextAreaInstanceHelp = new JTextArea();\r
+            jTextAreaInstanceHelp.setEditable(false);\r
         }\r
-        return jTextArea1;\r
+        return jTextAreaInstanceHelp;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton \r
+     * This method initializes jButtonAdd\r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton() {\r
-        if (jButton == null) {\r
-            jButton = new JButton();\r
-            jButton.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton.setText("Add");\r
-            jButton.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonAdd() {\r
+        if (jButtonAdd == null) {\r
+            jButtonAdd = new JButton();\r
+            jButtonAdd.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonAdd.setText("Add");\r
+            jButtonAdd.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    int row = jTable3.getSelectedRow();\r
+                    int row = jTableLibInstances.getSelectedRow();\r
                     if (row < 0) {\r
                         return;\r
                     }\r
-                    Object[] s = {model3.getValueAt(row, 0), model3.getValueAt(row, 1),\r
-                                  model3.getValueAt(row, 2), model3.getValueAt(row, 3),\r
-                                  model3.getValueAt(row, 4)};\r
-                    model1.addRow(s);\r
-                    String instanceValue = model3.getValueAt(row, 1) + " " + \r
-                    model3.getValueAt(row, 2) + " " +\r
-                    model3.getValueAt(row, 3) + " " +\r
-                    model3.getValueAt(row, 4);\r
-                    ffc.genLibraryInstance(model3.getValueAt(row, 1)+"", model3.getValueAt(row, 2)+"", model3.getValueAt(row, 3)+"", model3.getValueAt(row, 4)+"", moduleKey);\r
-                    //\r
-                    // Add pcd information of selected instance to current moduleSA\r
-                    //\r
-                    try{\r
-                        ffc.addFrameworkModulesPcdBuildDefs(getModuleId(instanceValue), ffc.getModuleSA(moduleKey));\r
-                    }\r
-                    catch (Exception exception) {\r
-                        JOptionPane.showMessageDialog(frame, "PCD Insertion Fail. " + exception.getMessage());\r
-                    }\r
+                    docConsole.setSaved(false);\r
+                    Object[] s = {libInstanceTableModel.getValueAt(row, 0), libInstanceTableModel.getValueAt(row, 1),\r
+                                  libInstanceTableModel.getValueAt(row, 2), libInstanceTableModel.getValueAt(row, 3),\r
+                                  libInstanceTableModel.getValueAt(row, 4)};\r
+                    selectedInstancesTableModel.addRow(s);\r
+                    String instanceValue = libInstanceTableModel.getValueAt(row, 1) + " " +\r
+                    libInstanceTableModel.getValueAt(row, 2) + " " +\r
+                    libInstanceTableModel.getValueAt(row, 3) + " " +\r
+                    libInstanceTableModel.getValueAt(row, 4);\r
+                    ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceValue);\r
+                    addLibInstance (libMi);\r
                     resolveLibraryInstances(instanceValue);\r
+                    showClassToResolved();\r
                 }\r
             });\r
         }\r
-        return jButton;\r
+        return jButtonAdd;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton1        \r
+     * This method initializes jButton1\r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton1() {\r
-        if (jButton1 == null) {\r
-            jButton1 = new JButton();\r
-            jButton1.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton1.setText("Delete");\r
-            jButton1.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonDeleteInstance() {\r
+        if (jButtonDeleteInstance == null) {\r
+            jButtonDeleteInstance = new JButton();\r
+            jButtonDeleteInstance.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonDeleteInstance.setText("Delete");\r
+            jButtonDeleteInstance.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    int row = jTable1.getSelectedRow();\r
+                    int row = jTableSelectedInstances.getSelectedRow();\r
                     if (row < 0) {\r
                         return;\r
                     }\r
-                    removeInstance(model1.getValueAt(row, 1) + " " + \r
-                                   model1.getValueAt(row, 2) + " " +\r
-                                   model1.getValueAt(row, 3) + " " +\r
-                                   model1.getValueAt(row, 4));\r
+                    docConsole.setSaved(false);\r
+                    removeInstance(selectedInstancesTableModel.getValueAt(row, 1) + " " +\r
+                                   selectedInstancesTableModel.getValueAt(row, 2) + " " +\r
+                                   selectedInstancesTableModel.getValueAt(row, 3) + " " +\r
+                                   selectedInstancesTableModel.getValueAt(row, 4));\r
                     ffc.removeLibraryInstance(moduleKey, row);\r
-                    model1.removeRow(row);\r
+                    selectedInstancesTableModel.removeRow(row);\r
                     \r
                 }\r
             });\r
         }\r
-        return jButton1;\r
+        return jButtonDeleteInstance;\r
     }\r
 \r
     /**\r
@@ -1045,14 +1053,14 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton2() {\r
-        if (jButton2 == null) {\r
-            jButton2 = new JButton();\r
-            jButton2.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton2.setText("Ok");\r
-            jButton2.addActionListener(this);\r
+    private JButton getJButtonOk() {\r
+        if (jButtonOk == null) {\r
+            jButtonOk = new JButton();\r
+            jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonOk.setText("Ok");\r
+            jButtonOk.addActionListener(this);\r
         }\r
-        return jButton2;\r
+        return jButtonOk;\r
     }\r
 \r
     /**\r
@@ -1060,131 +1068,171 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton3() {\r
-        if (jButton3 == null) {\r
-            jButton3 = new JButton();\r
-            jButton3.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton3.setText("Cancel");\r
-            jButton3.setVisible(false);\r
+    private JButton getJButtonCancel() {\r
+        if (jButtonCancel == null) {\r
+            jButtonCancel = new JButton();\r
+            jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonCancel.setText("Cancel");\r
+            jButtonCancel.setVisible(false);\r
         }\r
-        return jButton3;\r
+        return jButtonCancel;\r
     }\r
     public void actionPerformed(ActionEvent arg0) {\r
 \r
-        if (arg0.getSource() == jButton2) {\r
-//            ffc.removeLibraryInstances(moduleKey);\r
-//            for (int i = 0; i < model1.getRowCount(); ++i) {\r
-//                String mg = model1.getValueAt(i, 1)+"";\r
-//                String mv = model1.getValueAt(i, 2)+"";\r
-//                String pg = model1.getValueAt(i, 3)+"";\r
-//                String pv = model1.getValueAt(i, 4)+"";\r
-//                ffc.genLibraryInstance(mg, mv, pg, pv, moduleKey);\r
-//            }\r
+        if (arg0.getSource() == jButtonOk) {\r
+            if (jTableModuleSaOptions.isEditing()) {\r
+                jTableModuleSaOptions.getCellEditor().stopCellEditing();\r
+            }\r
             this.setVisible(false);\r
         }\r
     }\r
     /**\r
-     * This method initializes jPanel\r
+     * This method initializes jPanelModuleSaOpts\r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel8() {\r
-        if (jPanel8 == null) {\r
-            jLabel8 = new JLabel();\r
-            jLabel8.setText("FFS Format Key");\r
-            jLabel7 = new JLabel();\r
-            jLabel7.setText("FFS File GUID");\r
-            jLabel6 = new JLabel();\r
-            jLabel6.setText("FV Binding");\r
-            jPanel8 = new JPanel();\r
-            jPanel8.add(jLabel6, null);\r
-            jPanel8.add(getJTextField(), null);\r
-            jPanel8.add(jLabel7, null);\r
-            jPanel8.add(getJTextField1(), null);\r
-            jPanel8.add(jLabel8, null);\r
-            jPanel8.add(getJTextField2(), null);\r
-            jPanel8.add(getJScrollPane6(), null);\r
-            jPanel8.add(getJButton4(), null);\r
-            jPanel8.add(getJButton5(), null);\r
-            jPanel8.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+    private JPanel getJPanelModuleSaOpts() {\r
+        if (jPanelModuleSaOpts == null) {\r
+            FlowLayout flowLayout4 = new FlowLayout();\r
+            flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);\r
+            jLabelFfsFormatKey = new JLabel();\r
+            jLabelFfsFormatKey.setText("FFS Format Key");\r
+            jLabelFfsFormatKey.setPreferredSize(new java.awt.Dimension(90,16));\r
+            jLabelFfsFileGuid = new JLabel();\r
+            jLabelFfsFileGuid.setText("FFS File GUID");\r
+            jLabelFfsFileGuid.setPreferredSize(new java.awt.Dimension(90,16));\r
+            jLabelFfsFileGuid.setVisible(false);\r
+            jLabelFvBinding = new JLabel();\r
+            jLabelFvBinding.setText("FV Binding");\r
+            jLabelFvBinding.setPreferredSize(new java.awt.Dimension(90,16));\r
+            jPanelModuleSaOpts = new JPanel();\r
+            jPanelModuleSaOpts.setLayout(flowLayout4);\r
+            jPanelModuleSaOpts.add(jLabelFvBinding, null);\r
+            jPanelModuleSaOpts.add(getJTextFieldFvBinding(), null);\r
+            jPanelModuleSaOpts.add(jLabelFfsFileGuid, null);\r
+            jPanelModuleSaOpts.add(getJTextFieldFileGuid(), null);\r
+            jPanelModuleSaOpts.add(jLabelFfsFormatKey, null);\r
+            jPanelModuleSaOpts.add(getJTextFieldFfsKey(), null);\r
+            jPanelModuleSaOpts.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
-                    initModuleSAOptions(moduleKey);\r
+                    initFvInfo(moduleKey);\r
                 }\r
             });\r
         }\r
-        return jPanel8;\r
+        return jPanelModuleSaOpts;\r
     }\r
     /**\r
      * This method initializes jTextField      \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField() {\r
-        if (jTextField == null) {\r
-            jTextField = new JTextField();\r
-            jTextField.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField.addFocusListener(new java.awt.event.FocusAdapter() {\r
+    private JTextField getJTextFieldFvBinding() {\r
+        if (jTextFieldFvBinding == null) {\r
+            jTextFieldFvBinding = new JTextField();\r
+            jTextFieldFvBinding.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jTextFieldFvBinding.addFocusListener(new java.awt.event.FocusAdapter() {\r
                 public void focusLost(java.awt.event.FocusEvent e) {\r
-                    ffc.setFvBinding(moduleKey, jTextField.getText());\r
+                    String originalFvBinding = ffc.getFvBinding(moduleKey);\r
+                    String newFvBinding = jTextFieldFvBinding.getText();\r
+                    if (newFvBinding.equals(originalFvBinding)) {\r
+                        return;\r
+                    }\r
+                    if (newFvBinding.length() == 0 && originalFvBinding == null) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    ffc.setFvBinding(moduleKey, newFvBinding);\r
                 }\r
             });\r
+            \r
         }\r
-        return jTextField;\r
+        return jTextFieldFvBinding;\r
     }\r
     /**\r
      * This method initializes jTextField1     \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField1() {\r
-        if (jTextField1 == null) {\r
-            jTextField1 = new JTextField();\r
-            jTextField1.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {\r
+    private JTextField getJTextFieldFileGuid() {\r
+        if (jTextFieldFileGuid == null) {\r
+            jTextFieldFileGuid = new JTextField();\r
+            jTextFieldFileGuid.setPreferredSize(new java.awt.Dimension(300,20));\r
+            jTextFieldFileGuid.setVisible(false);\r
+            jTextFieldFileGuid.addFocusListener(new java.awt.event.FocusAdapter() {\r
                 public void focusLost(java.awt.event.FocusEvent e) {\r
-                    ffc.setFfsFileNameGuid(moduleKey, jTextField1.getText());\r
+                    String originalFileGuid = ffc.getFfsFileNameGuid(moduleKey);\r
+                    String newFileGuid = jTextFieldFileGuid.getText();\r
+                    if (newFileGuid.equals(originalFileGuid)) {\r
+                        return;\r
+                    }\r
+                    if (newFileGuid.length() == 0 && originalFileGuid == null) {\r
+                        return;\r
+                    }\r
+                    if (newFileGuid.length() > 0) {\r
+                        if (!DataValidation.isGuid(newFileGuid)) {\r
+                            JOptionPane.showMessageDialog(frame, "FFS File Guid is NOT GUID Type.");\r
+                            return;\r
+                        }\r
+                    }\r
+                    \r
+                    docConsole.setSaved(false);\r
+                    if (newFileGuid.length() == 0) {\r
+                        newFileGuid = null;\r
+                    }\r
+                    ffc.setFfsFileNameGuid(moduleKey, newFileGuid);\r
                 }\r
             });\r
+            \r
         }\r
-        return jTextField1;\r
+        return jTextFieldFileGuid;\r
     }\r
     /**\r
-     * This method initializes jTextField2     \r
+     * This method initializes jTextFieldFfsKey        \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField2() {\r
-        if (jTextField2 == null) {\r
-            jTextField2 = new JTextField();\r
-            jTextField2.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField2.addFocusListener(new java.awt.event.FocusAdapter() {\r
+    private JTextField getJTextFieldFfsKey() {\r
+        if (jTextFieldFfsKey == null) {\r
+            jTextFieldFfsKey = new JTextField();\r
+            jTextFieldFfsKey.setPreferredSize(new java.awt.Dimension(250,20));\r
+            jTextFieldFfsKey.addFocusListener(new java.awt.event.FocusAdapter() {\r
                 public void focusLost(java.awt.event.FocusEvent e) {\r
-                    ffc.setFfsFormatKey(moduleKey, jTextField2.getText());\r
+                    String originalFfsKey = ffc.getFfsFormatKey(moduleKey);\r
+                    String newFfsKey = jTextFieldFfsKey.getText();\r
+                    if (newFfsKey.equals(originalFfsKey)) {\r
+                        return;\r
+                    }\r
+                    if (newFfsKey.length() == 0 && originalFfsKey == null) {\r
+                        return;\r
+                    }\r
+                    docConsole.setSaved(false);\r
+                    ffc.setFfsFormatKey(moduleKey, newFfsKey);\r
                 }\r
             });\r
+            \r
         }\r
-        return jTextField2;\r
+        return jTextFieldFfsKey;\r
     }\r
     /**\r
-     * This method initializes jScrollPane6    \r
+     * This method initializes jScrollPaneModuleSaOptions\r
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane6() {\r
-        if (jScrollPane6 == null) {\r
-            jScrollPane6 = new JScrollPane();\r
-            jScrollPane6.setPreferredSize(new java.awt.Dimension(600,200));\r
-            jScrollPane6.setViewportView(getJTable4());\r
+    private JScrollPane getJScrollPaneModuleSaOptions() {\r
+        if (jScrollPaneModuleSaOptions == null) {\r
+            jScrollPaneModuleSaOptions = new JScrollPane();\r
+            jScrollPaneModuleSaOptions.setPreferredSize(new java.awt.Dimension(600,350));\r
+            jScrollPaneModuleSaOptions.setViewportView(getJTableModuleSaOptions());\r
         }\r
-        return jScrollPane6;\r
+        return jScrollPaneModuleSaOptions;\r
     }\r
     /**\r
-     * This method initializes jTable\r
+     * This method initializes jTableModuleSaOptions\r
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable4() {\r
-        if (jTable4 == null) {\r
+    private JTable getJTableModuleSaOptions() {\r
+        if (jTableModuleSaOptions == null) {\r
             optionsTableModel = new DefaultTableModel();\r
             optionsTableModel.addColumn("BuildTargets");\r
             optionsTableModel.addColumn("ToolChainFamily");\r
@@ -1192,8 +1240,18 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             optionsTableModel.addColumn("ToolCode");\r
             optionsTableModel.addColumn("SupportedArchs");\r
             optionsTableModel.addColumn("Contents");\r
-            jTable4 = new JTable(optionsTableModel);\r
-            jTable4.setRowHeight(20);\r
+            jTableModuleSaOptions = new JTable(optionsTableModel);\r
+            jTableModuleSaOptions.setRowHeight(20);\r
+            \r
+            javax.swing.table.TableColumn toolFamilyCol = jTableModuleSaOptions.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
+            \r
             Vector<String> vArch = new Vector<String>();\r
             vArch.add("IA32");\r
             vArch.add("X64");\r
@@ -1201,10 +1259,13 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             vArch.add("EBC");\r
             vArch.add("ARM");\r
             vArch.add("PPC");\r
-            jTable4.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));\r
-            jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-                       jTable4.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
-            jTable4.getModel().addTableModelListener(new TableModelListener() {\r
+            jTableModuleSaOptions.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));\r
+            \r
+            jTableModuleSaOptions.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());\r
+            \r
+            jTableModuleSaOptions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+                       jTableModuleSaOptions.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+            jTableModuleSaOptions.getModel().addTableModelListener(new TableModelListener() {\r
                 public void tableChanged(TableModelEvent arg0) {\r
                     // TODO Auto-generated method stub\r
                     int row = arg0.getFirstRow();\r
@@ -1236,59 +1297,59 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         }\r
                         \r
                         String contents = m.getValueAt(row, 5) + "";\r
-                        \r
+                        docConsole.setSaved(false);\r
                         ffc.updateModuleSAOptionsOpt(moduleKey, row, targetName, toolChain, tagName, toolCode, supArch, contents);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jTable4;\r
+        return jTableModuleSaOptions;\r
     }\r
     /**\r
-     * This method initializes jButton4        \r
+     * This method initializes jButtonNew\r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton4() {\r
-        if (jButton4 == null) {\r
-            jButton4 = new JButton();\r
-            jButton4.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton4.setText("New");\r
-            jButton4.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonNew() {\r
+        if (jButtonNew == null) {\r
+            jButtonNew = new JButton();\r
+            jButtonNew.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonNew.setText("New");\r
+            jButtonNew.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    String[] row = {"", "", "", "", "IA32", ""};\r
+                    String[] row = {"", "", "", "", "", ""};\r
                     optionsTableModel.addRow(row);\r
                     Vector<Object> v = new Vector<Object>();\r
-                    Vector<Object> v1 = new Vector<Object>();\r
-                    v1.add("IA32");\r
+                    Vector<Object> v1 = null;\r
+                    docConsole.setSaved(false);\r
                     ffc.genModuleSAOptionsOpt(moduleKey, v, "", "", "", v1, "");\r
                 }\r
             });\r
         }\r
-        return jButton4;\r
+        return jButtonNew;\r
     }\r
     /**\r
-     * This method initializes jButton5        \r
+     * This method initializes jButtonDelete\r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton5() {\r
-        if (jButton5 == null) {\r
-            jButton5 = new JButton();\r
-            jButton5.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton5.setText("Delete");\r
-            jButton5.addActionListener(new java.awt.event.ActionListener() {\r
+    private JButton getJButtonDeleteOption() {\r
+        if (jButtonDeleteOption == null) {\r
+            jButtonDeleteOption = new JButton();\r
+            jButtonDeleteOption.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonDeleteOption.setText("Delete");\r
+            jButtonDeleteOption.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTable4.getSelectedRow() < 0) {\r
+                    if (jTableModuleSaOptions.getSelectedRow() < 0) {\r
                         return;\r
                     }\r
-                    \r
-                    ffc.removeModuleSAOptionsOpt(moduleKey, jTable4.getSelectedRow());\r
-                    optionsTableModel.removeRow(jTable4.getSelectedRow());\r
+                    docConsole.setSaved(false);\r
+                    ffc.removeModuleSAOptionsOpt(moduleKey, jTableModuleSaOptions.getSelectedRow());\r
+                    optionsTableModel.removeRow(jTableModuleSaOptions.getSelectedRow());\r
                 }\r
             });\r
         }\r
-        return jButton5;\r
+        return jButtonDeleteOption;\r
     }\r
     \r
     /**\r
@@ -1308,109 +1369,113 @@ public class FpdModuleSA extends JDialog implements ActionListener {
        centerWindow(this.getSize().width, this.getSize().height);\r
    }\r
 /**\r
- * This method initializes jPanel9     \r
+ * This method initializes jPanelPcdFields\r
  *     \r
  * @return javax.swing.JPanel  \r
  */\r
-private JPanel getJPanel9() {\r
-    if (jPanel9 == null) {\r
+private JPanel getJPanelPcdFields() {\r
+    if (jPanelPcdFields == null) {\r
         GridLayout gridLayout = new GridLayout();\r
         gridLayout.setRows(3);\r
         gridLayout.setColumns(2);\r
-        jPanel9 = new JPanel();\r
-        jPanel9.setLayout(gridLayout);\r
-        jPanel9.setPreferredSize(new java.awt.Dimension(600,90));\r
-        jPanel9.add(getJPanel12(), null);\r
-        jPanel9.add(getJPanel10(), null);\r
-        jPanel9.add(getJPanel11(), null);\r
-    }\r
-    return jPanel9;\r
+        jPanelPcdFields = new JPanel();\r
+        jPanelPcdFields.setLayout(gridLayout);\r
+        jPanelPcdFields.setPreferredSize(new java.awt.Dimension(600,90));\r
+        jPanelPcdFields.add(getJPanelPcdFieldsFirstRow(), null);\r
+        jPanelPcdFields.add(getJPanelPcdFieldsSecondRow(), null);\r
+        jPanelPcdFields.add(getJPanelPcdFieldsThirdRow(), null);\r
+    }\r
+    return jPanelPcdFields;\r
 }\r
 /**\r
- * This method initializes jPanel10    \r
+ * This method initializes jPanelPcdFieldsSecondRow\r
  *     \r
  * @return javax.swing.JPanel  \r
  */\r
-private JPanel getJPanel10() {\r
-    if (jPanel10 == null) {\r
+private JPanel getJPanelPcdFieldsSecondRow() {\r
+    if (jPanelPcdFieldsSecondRow == null) {\r
         FlowLayout flowLayout2 = new FlowLayout();\r
         flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);\r
-        jLabel10 = new JLabel();\r
-        jLabel10.setText("Max Datum Size");\r
-        jPanel10 = new JPanel();\r
-        jPanel10.setLayout(flowLayout2);\r
-        jPanel10.add(jLabel10, null);\r
-        jPanel10.add(getJTextField3(), null);\r
-    }\r
-    return jPanel10;\r
+        jLabelMaxDatumSize = new JLabel();\r
+        jLabelMaxDatumSize.setText("Max Datum Size");\r
+        jPanelPcdFieldsSecondRow = new JPanel();\r
+        jPanelPcdFieldsSecondRow.setLayout(flowLayout2);\r
+        jPanelPcdFieldsSecondRow.add(jLabelMaxDatumSize, null);\r
+        jPanelPcdFieldsSecondRow.add(getJTextFieldMaxDatumSize(), null);\r
+    }\r
+    return jPanelPcdFieldsSecondRow;\r
 }\r
 /**\r
- * This method initializes jPanel11    \r
+ * This method initializes jPanelPcdFieldsThirdRow\r
  *     \r
  * @return javax.swing.JPanel  \r
  */\r
-private JPanel getJPanel11() {\r
-    if (jPanel11 == null) {\r
+private JPanel getJPanelPcdFieldsThirdRow() {\r
+    if (jPanelPcdFieldsThirdRow == null) {\r
         FlowLayout flowLayout3 = new FlowLayout();\r
         flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);\r
-        jLabel11 = new JLabel();\r
-        jLabel11.setText("Default Value");\r
-        jLabel11.setPreferredSize(new java.awt.Dimension(91,16));\r
-        jPanel11 = new JPanel();\r
-        jPanel11.setLayout(flowLayout3);\r
-        jPanel11.add(jLabel11, null);\r
-        jPanel11.add(getJTextField4(), null);\r
-        jPanel11.add(getJComboBox1(), null);\r
-    }\r
-    return jPanel11;\r
+        jLabelPcdDefaultValue = new JLabel();\r
+        jLabelPcdDefaultValue.setText("Default Value");\r
+        jLabelPcdDefaultValue.setPreferredSize(new java.awt.Dimension(91,16));\r
+        jPanelPcdFieldsThirdRow = new JPanel();\r
+        jPanelPcdFieldsThirdRow.setLayout(flowLayout3);\r
+        jPanelPcdFieldsThirdRow.add(jLabelPcdDefaultValue, null);\r
+        jPanelPcdFieldsThirdRow.add(getJTextFieldPcdDefault(), null);\r
+        jPanelPcdFieldsThirdRow.add(getJComboBoxFeatureFlagValue(), null);\r
+    }\r
+    return jPanelPcdFieldsThirdRow;\r
 }\r
 /**\r
- * This method initializes jPanel12    \r
+ * This method initializes jPanelPcdFieldsFirstRow\r
  *     \r
  * @return javax.swing.JPanel  \r
  */\r
-private JPanel getJPanel12() {\r
-    if (jPanel12 == null) {\r
+private JPanel getJPanelPcdFieldsFirstRow() {\r
+    if (jPanelPcdFieldsFirstRow == null) {\r
         FlowLayout flowLayout1 = new FlowLayout();\r
         flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);\r
-        jLabel9 = new JLabel();\r
-        jLabel9.setText("Item Type");\r
-        jLabel9.setPreferredSize(new java.awt.Dimension(91,16));\r
-        jPanel12 = new JPanel();\r
-        jPanel12.setLayout(flowLayout1);\r
-        jPanel12.add(jLabel9, null);\r
-        jPanel12.add(getJComboBox(), null);\r
-        jPanel12.add(getJButton6(), null);\r
-    }\r
-    return jPanel12;\r
+        jLabelItemType = new JLabel();\r
+        jLabelItemType.setText("Item Type");\r
+        jLabelItemType.setPreferredSize(new java.awt.Dimension(91,16));\r
+        jPanelPcdFieldsFirstRow = new JPanel();\r
+        jPanelPcdFieldsFirstRow.setLayout(flowLayout1);\r
+        jPanelPcdFieldsFirstRow.add(jLabelItemType, null);\r
+        jPanelPcdFieldsFirstRow.add(getJComboBoxItemType(), null);\r
+        jPanelPcdFieldsFirstRow.add(getJButtonUpdatePcd(), null);\r
+    }\r
+    return jPanelPcdFieldsFirstRow;\r
 }\r
 /**\r
- * This method initializes jComboBox   \r
+ * This method initializes jComboBoxItemType\r
  *     \r
  * @return javax.swing.JComboBox       \r
  */\r
-private JComboBox getJComboBox() {\r
-    if (jComboBox == null) {\r
-        jComboBox = new JComboBox();\r
-        jComboBox.setPreferredSize(new java.awt.Dimension(200,20));\r
-        jComboBox.addItemListener(new java.awt.event.ItemListener() {\r
+private JComboBox getJComboBoxItemType() {\r
+    if (jComboBoxItemType == null) {\r
+        jComboBoxItemType = new JComboBox();\r
+        jComboBoxItemType.setPreferredSize(new java.awt.Dimension(200,20));\r
+        jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {\r
             public void itemStateChanged(java.awt.event.ItemEvent e) {\r
-                int row = jTable.getSelectedRow();\r
-                if (row < 0 || jTable.getValueAt(row, 2).equals(jComboBox.getSelectedItem())) {\r
+                int row = jTablePcd.getSelectedRow();\r
+                if (row < 0 || jTablePcd.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
                     return;\r
                 }\r
-                if (jComboBox.getItemCount() == 3) {\r
-                    if (!jComboBox.getSelectedItem().equals("DYNAMIC")) {\r
-                        pcdDynamicToNonDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+"");\r
+                if (jComboBoxItemType.getItemCount() == 3) {\r
+                    if (!jComboBoxItemType.getSelectedItem().equals("DYNAMIC")) {\r
+                        pcdDynamicToNonDynamic(jTablePcd.getValueAt(row, 0)+"", jTablePcd.getValueAt(row, 1)+"");\r
+                        if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
+                            jTextFieldPcdDefault.setText("");\r
+                            jTextFieldPcdDefault.setEnabled(true);\r
+                        }\r
                     }\r
                     else{\r
-                        pcdNonDynamicToDynamic(jTable.getValueAt(row, 0)+"", jTable.getValueAt(row, 1)+"");\r
+                        pcdNonDynamicToDynamic(jTablePcd.getValueAt(row, 0)+"", jTablePcd.getValueAt(row, 1)+"");\r
                     }\r
                 }\r
             }\r
         });\r
     }\r
-    return jComboBox;\r
+    return jComboBoxItemType;\r
 }\r
 \r
 private void pcdDynamicToNonDynamic(String cName, String tsGuid) {\r
@@ -1430,8 +1495,8 @@ private void pcdDynamicToNonDynamic(String cName, String tsGuid) {
     for (int i = 0; i < al.size(); ++i) {\r
         String[] s = al.get(i).split(" ");\r
         String mKey = s[0] + s[1] + s[2] + s[3];\r
-        ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", maxSize, value);\r
-        s[4] = jComboBox.getSelectedItem()+"";\r
+        ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", maxSize, value);\r
+        s[4] = jComboBoxItemType.getSelectedItem()+"";\r
         al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]);\r
     }\r
     \r
@@ -1442,81 +1507,126 @@ private void pcdNonDynamicToDynamic(String cName, String tsGuid) {
     ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
     for (int i = 0; i < al.size(); ++i) {\r
         String[] s = al.get(i).split(" ");\r
-        String mKey = s[0] + s[1] + s[2] + s[3];\r
-        ffc.updatePcdData(mKey, cName, tsGuid, jComboBox.getSelectedItem()+"", jTextField3.getText(), jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+"");\r
-        s[4] = jComboBox.getSelectedItem()+"";\r
+        String mKey = s[0] + " " + s[1]+ " " + s[2] + " " + s[3];\r
+        ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
+        s[4] = jComboBoxItemType.getSelectedItem()+"";\r
         al.set(i, s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]);\r
     }\r
     try{\r
-        ffc.addDynamicPcdBuildData(cName, jTable.getValueAt(jTable.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTable.getValueAt(jTable.getSelectedRow(), 5)+"", jTextField4.isVisible() ? jTextField4.getText() : jComboBox1.getSelectedItem()+"");\r
+        ffc.addDynamicPcdBuildData(cName, jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 5)+"", jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
     }\r
     catch(Exception e){\r
         JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage());\r
     }\r
 }\r
 /**\r
- * This method initializes jTextField\r
+ * This method initializes jTextFieldMaxDatumSize\r
  *     \r
  * @return javax.swing.JTextField      \r
  */\r
-private JTextField getJTextField3() {\r
-    if (jTextField3 == null) {\r
-        jTextField3 = new JTextField();\r
-        jTextField3.setPreferredSize(new java.awt.Dimension(200,20));\r
+private JTextField getJTextFieldMaxDatumSize() {\r
+    if (jTextFieldMaxDatumSize == null) {\r
+        jTextFieldMaxDatumSize = new JTextField();\r
+        jTextFieldMaxDatumSize.setPreferredSize(new java.awt.Dimension(200,20));\r
     }\r
-    return jTextField3;\r
+    return jTextFieldMaxDatumSize;\r
 }\r
 /**\r
  * This method initializes jTextField4 \r
  *     \r
  * @return javax.swing.JTextField      \r
  */\r
-private JTextField getJTextField4() {\r
-    if (jTextField4 == null) {\r
-        jTextField4 = new JTextField();\r
-        jTextField4.setPreferredSize(new java.awt.Dimension(200,20));\r
+private JTextField getJTextFieldPcdDefault() {\r
+    if (jTextFieldPcdDefault == null) {\r
+        jTextFieldPcdDefault = new JTextField();\r
+        jTextFieldPcdDefault.setPreferredSize(new java.awt.Dimension(200,20));\r
     }\r
-    return jTextField4;\r
+    return jTextFieldPcdDefault;\r
 }\r
 /**\r
  * This method initializes jButton6    \r
  *     \r
  * @return javax.swing.JButton \r
  */\r
-private JButton getJButton6() {\r
-    if (jButton6 == null) {\r
-        jButton6 = new JButton();\r
-        jButton6.setPreferredSize(new java.awt.Dimension(150,20));\r
-        jButton6.setText("Update PCD Data");\r
-        jButton6.addActionListener(new java.awt.event.ActionListener() {\r
+private JButton getJButtonUpdatePcd() {\r
+    if (jButtonUpdatePcd == null) {\r
+        jButtonUpdatePcd = new JButton();\r
+        jButtonUpdatePcd.setPreferredSize(new java.awt.Dimension(150,20));\r
+        jButtonUpdatePcd.setText("Update PCD Data");\r
+        jButtonUpdatePcd.addActionListener(new java.awt.event.ActionListener() {\r
             public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                int row = jTable.getSelectedRow();\r
+                int row = jTablePcd.getSelectedRow();\r
                 if (row < 0) {\r
                     return;\r
                 }\r
-                model.setValueAt(jComboBox.getSelectedItem(), row, 2);\r
-                model.setValueAt(jTextField3.getText(), row, 4);\r
-                model.setValueAt(jTextField4.isVisible()? jTextField4.getText():jComboBox1.getSelectedItem(), row, 6);\r
+                docConsole.setSaved(false);\r
+                model.setValueAt(jComboBoxItemType.getSelectedItem(), row, 2);\r
+                model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);\r
+                model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);\r
                 ffc.updatePcdData(moduleKey, model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");\r
             }\r
         });\r
     }\r
-    return jButton6;\r
+    return jButtonUpdatePcd;\r
 }\r
 /**\r
- * This method initializes jComboBox1  \r
+ * This method initializes jComboBoxFeatureFlagValue\r
  *     \r
  * @return javax.swing.JComboBox       \r
  */\r
-private JComboBox getJComboBox1() {\r
-    if (jComboBox1 == null) {\r
-        jComboBox1 = new JComboBox();\r
-        jComboBox1.setPreferredSize(new java.awt.Dimension(100,20));\r
-        jComboBox1.setVisible(false);\r
-        jComboBox1.addItem("true");\r
-        jComboBox1.addItem("false");\r
-    }\r
-    return jComboBox1;\r
+private JComboBox getJComboBoxFeatureFlagValue() {\r
+    if (jComboBoxFeatureFlagValue == null) {\r
+        jComboBoxFeatureFlagValue = new JComboBox();\r
+        jComboBoxFeatureFlagValue.setPreferredSize(new java.awt.Dimension(100,20));\r
+        jComboBoxFeatureFlagValue.setVisible(false);\r
+        jComboBoxFeatureFlagValue.addItem("TRUE");\r
+        jComboBoxFeatureFlagValue.addItem("FALSE");\r
+    }\r
+    return jComboBoxFeatureFlagValue;\r
+}\r
+/**\r
+ * This method initializes jPanelCustomToolChain       \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanelCustomToolChain() {\r
+    if (jPanelCustomToolChain == null) {\r
+        jPanelCustomToolChain = new JPanel();\r
+        jPanelCustomToolChain.setLayout(new BorderLayout());\r
+        jPanelCustomToolChain.add(getJPanelToolchainS(), java.awt.BorderLayout.SOUTH);\r
+        jPanelCustomToolChain.add(getJPanelToolchainC(), java.awt.BorderLayout.CENTER);\r
+        jPanelCustomToolChain.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+            public void componentShown(java.awt.event.ComponentEvent e) {\r
+                initToolChainOptions(moduleKey);\r
+            }\r
+        });\r
+    }\r
+    return jPanelCustomToolChain;\r
+}\r
+/**\r
+ * This method initializes jPanelToolchainS    \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanelToolchainS() {\r
+    if (jPanelToolchainS == null) {\r
+        jPanelToolchainS = new JPanel();\r
+        jPanelToolchainS.add(getJButtonNew(), null);\r
+        jPanelToolchainS.add(getJButtonDeleteOption(), null);\r
+    }\r
+    return jPanelToolchainS;\r
+}\r
+/**\r
+ * This method initializes jPanelToolchainC    \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanelToolchainC() {\r
+    if (jPanelToolchainC == null) {\r
+        jPanelToolchainC = new JPanel();\r
+        jPanelToolchainC.add(getJScrollPaneModuleSaOptions(), null);\r
+    }\r
+    return jPanelToolchainC;\r
 }\r
 \r
 \r