]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Fix EDKT337,Double click on modules in "Framework Modules" of Platforms should be...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
index d2ef9997b2f495a95358916a9f4afbd90975e1a4..dea31877f586cac2b3d6c7cd0de4b09f636a97e7 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,13 +24,14 @@ 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.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.GlobalData;\r
+import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
-import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\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
@@ -38,8 +40,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
@@ -86,10 +86,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JLabel jLabelPcdHelp = null;\r
     private JButton jButtonOk = null;\r
     private JButton jButtonCancel = null;\r
-    private PartialEditableTableModel model = null;\r
-    private LibraryTableModel selectedInstancesTableModel = null;\r
-    private LibraryTableModel libClassTableModel = null;\r
-    private LibraryTableModel libInstanceTableModel = null;\r
+    private IDefaultTableModel model = null;\r
+    private IDefaultTableModel selectedInstancesTableModel = null;\r
+    private IDefaultTableModel libClassTableModel = null;\r
+    private IDefaultTableModel libInstanceTableModel = null;\r
     private DefaultTableModel optionsTableModel = null;\r
     private FpdFileContents ffc = null;\r
     private String moduleKey = null;\r
@@ -121,7 +121,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JButton jButtonUpdatePcd = null;\r
     private JComboBox jComboBoxFeatureFlagValue = null;\r
     private OpeningPlatformType docConsole = null;\r
-    private JLabel jLabelPad = null;\r
+    private JPanel jPanelCustomToolChain = null;\r
+    private JPanel jPanelToolchainS = null;\r
+    private JPanel jPanelLibraryCenterN = null;\r
+    private JPanel jPanelLibraryCenterC = null;  //  @jve:decl-index=0:visual-constraint="20,224"\r
     /**\r
      * This is the default constructor\r
      */\r
@@ -153,6 +156,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         // display pcd for key.\r
         //\r
         model.setRowCount(0);\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
@@ -177,24 +184,23 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             String[][] saa = new String[instanceCount][5];\r
             ffc.getLibraryInstances(key, saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
-                ModuleIdentification mi = GlobalData.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
                     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
@@ -213,6 +219,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         if (ffsKey != null) {\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
@@ -223,51 +232,41 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     }\r
     \r
     private void resolveLibraryInstances(String key) {\r
-        ModuleIdentification mi = GlobalData.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
@@ -289,7 +288,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 \r
             }\r
             \r
-            showClassToResolved();\r
+//            showClassToResolved();\r
         }\r
         catch(Exception e) {\r
             e.printStackTrace();\r
@@ -299,12 +298,13 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private ArrayList<String> getInstancesForClass(String cls, PackageIdentification[] depPkgList) throws Exception{\r
         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
+//        for (int i = 0; i < depPkgList.length; ++i) {\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
@@ -322,16 +322,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 }\r
                 if (isPotential) {\r
                     al.add(mi.getGuid() + " " + mi.getVersion() + " " + \r
-                           depPkgList[i].getGuid() + " " + depPkgList[i].getVersion());\r
+                           mi.getPackageId().getGuid() + " " + mi.getPackageId().getVersion());\r
                 }\r
             }\r
-        }\r
+//        }\r
         \r
         return al;\r
     }\r
     \r
     private void removeInstance(String key) {\r
-        ModuleIdentification mi = GlobalData.getModuleId(key); \r
+        ModuleIdentification mi = WorkspaceProfile.getModuleId(key); \r
         //\r
         // remove pcd information of instance from current ModuleSA\r
         //\r
@@ -370,10 +370,12 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     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
@@ -384,16 +386,17 @@ 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
@@ -405,25 +408,36 @@ 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
                 libClassTableModel.addRow(s);\r
             }\r
         }\r
         libInstanceTableModel.setRowCount(0);\r
     }\r
+    \r
+    private void addLibInstance (ModuleIdentification libMi) throws Exception{\r
+        \r
+        //\r
+        // Add pcd information of selected instance to current moduleSA\r
+        //\r
+        ffc.addFrameworkModulesPcdBuildDefs(libMi, null, ffc.getModuleSA(moduleKey));\r
+        \r
+        ffc.genLibraryInstance(libMi, moduleKey);\r
+    }\r
     /**\r
      * This method initializes this\r
      * \r
      * @return void\r
      */\r
     private void initialize() {\r
-        this.setSize(664, 515);\r
+        this.setSize(877, 555);\r
+        this.setResizable(false);\r
         this.centerWindow();\r
         this.setModal(true);\r
         this.setTitle("Module Settings");\r
@@ -454,8 +468,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         if (jTabbedPane == null) {\r
             jTabbedPane = new JTabbedPane();\r
             jTabbedPane.addTab("PCD Build Definition", null, getJPanelPcd(), null);\r
-            jTabbedPane.addTab("Module SA Options", null, getJPanelModuleSaOpts(), 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
@@ -468,7 +484,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JPanel getJPanelPcd() {\r
         if (jPanelPcd == null) {\r
             jLabelPcdData = new JLabel();\r
-            jLabelPcdData.setText("PcdData");\r
+            jLabelPcdData.setText(" PCD Data");\r
             jPanelPcd = new JPanel();\r
             jPanelPcd.setLayout(new BorderLayout());\r
             jPanelPcd.add(jLabelPcdData, java.awt.BorderLayout.NORTH);\r
@@ -525,10 +541,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private JTable getJTablePcd() {\r
         if (jTablePcd == null) {\r
-            model = new PartialEditableTableModel();\r
+            model = new IDefaultTableModel();\r
             jTablePcd = new JTable(model);\r
             jTablePcd.setRowHeight(20);\r
-            jTablePcd.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+            jTablePcd.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);\r
             model.addColumn("CName");\r
             model.addColumn("TokenSpaceGUID");\r
             model.addColumn("ItemType");\r
@@ -550,18 +566,23 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                     }\r
                     else{\r
                         int selectedRow = lsm.getMinSelectionIndex();\r
-                        String cName = jTablePcd.getValueAt(selectedRow, 0)+"";\r
-                        String[] pcdInfo = {"", ""};\r
-                        getPcdInfo(cName, pcdInfo);\r
+                        String cName = model.getValueAt(selectedRow, 0)+"";\r
+                        String tsGuid = model.getValueAt(selectedRow, 1)+"";\r
+                        String itemType = model.getValueAt(selectedRow, 2)+"";\r
+                        //\r
+                        // array for pcd related information: helpText, itemType, moduleType.\r
+                        //\r
+                        String[] pcdInfo = {"", "", ""};\r
+                        getPcdInfo(cName, tsGuid, pcdInfo);\r
                         jTextAreaPcdHelp.setText(pcdInfo[0]);\r
-                        initComboBox(pcdInfo[1]);\r
-                        jComboBoxItemType.setSelectedItem(pcdInfo[1]);\r
+                        initComboBox(pcdInfo[1], pcdInfo[2]);\r
+                        jComboBoxItemType.setSelectedItem(itemType);\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 (model.getValueAt(selectedRow, 5).equals("VOID*")) {\r
                             if (pcdInfo[1].equals("FEATURE_FLAG")) {\r
                                 jTextFieldMaxDatumSize.setVisible(false);\r
                             }\r
@@ -582,12 +603,12 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                             jTextFieldMaxDatumSize.setEnabled(false);\r
                         }\r
                         \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
+                        if (!model.getValueAt(selectedRow, 2).equals("DYNAMIC") && !model.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) {\r
+                            jTextFieldPcdDefault.setText(model.getValueAt(selectedRow, 6)+"");\r
+                            if (model.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){\r
                                 jTextFieldPcdDefault.setVisible(false);\r
                                 jComboBoxFeatureFlagValue.setVisible(true);\r
-                                jComboBoxFeatureFlagValue.setSelectedItem(jTablePcd.getValueAt(selectedRow, 6)+"");\r
+                                jComboBoxFeatureFlagValue.setSelectedItem(model.getValueAt(selectedRow, 6)+"");\r
                             }\r
                             else{\r
                                 jTextFieldPcdDefault.setVisible(true);\r
@@ -604,26 +625,14 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 }\r
             });\r
             \r
-            jTablePcd.getModel().addTableModelListener(new TableModelListener() {\r
-                public void tableChanged(TableModelEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-//                    int row = arg0.getFirstRow();\r
-//                    TableModel m = (TableModel)arg0.getSource();\r
-                    \r
-                    if (arg0.getType() == TableModelEvent.UPDATE){\r
-                        //update xml doc here.\r
-                        \r
-                    }\r
-                }\r
-            });\r
         }\r
         return jTablePcd;\r
     }\r
     \r
-    private void initComboBox(String originalType) {\r
+    private void initComboBox(String originalType, String mType) {\r
         jComboBoxItemType.removeAllItems();\r
         jComboBoxItemType.addItem(originalType);\r
-        if (originalType.equals("PATCHABLE_IN_MODULE")) {\r
+        if (originalType.equals("PATCHABLE_IN_MODULE") && mType.equalsIgnoreCase("false")) {\r
             jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
         }\r
         if (originalType.equals("DYNAMIC")) {\r
@@ -632,17 +641,17 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         }\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(GlobalData.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(GlobalData.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
@@ -770,7 +779,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JScrollPane getJScrollPaneSelectedInstances() {\r
         if (jScrollPaneSelectedInstances == null) {\r
             jScrollPaneSelectedInstances = new JScrollPane();\r
-            jScrollPaneSelectedInstances.setPreferredSize(new java.awt.Dimension(453,150));\r
+            jScrollPaneSelectedInstances.setPreferredSize(new java.awt.Dimension(600,150));\r
             jScrollPaneSelectedInstances.setViewportView(getJTableSelectedInstances());\r
         }\r
         return jScrollPaneSelectedInstances;\r
@@ -783,7 +792,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private JTable getJTableSelectedInstances() {\r
         if (jTableSelectedInstances == null) {\r
-            selectedInstancesTableModel = new LibraryTableModel();\r
+            selectedInstancesTableModel = new IDefaultTableModel();\r
             selectedInstancesTableModel.addColumn("Name");\r
             selectedInstancesTableModel.addColumn("ModuleGUID");\r
             selectedInstancesTableModel.addColumn("ModuleVersion");\r
@@ -819,7 +828,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private JTable getJTableLibClass() {\r
         if (jTableLibClass == null) {\r
-            libClassTableModel = new LibraryTableModel();\r
+            libClassTableModel = new IDefaultTableModel();\r
             libClassTableModel.addColumn("LibraryClass");\r
             jTableLibClass = new JTable(libClassTableModel);\r
             jTableLibClass.setRowHeight(20);\r
@@ -849,8 +858,8 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         while(li.hasNext()) {\r
                             String instance = li.next();\r
                             String[] s = {"", "", "", "", ""};\r
-                            if (GlobalData.getModuleId(instance) != null) {\r
-                                s[0] = GlobalData.getModuleId(instance).getName();\r
+                            if (WorkspaceProfile.getModuleId(instance) != null) {\r
+                                s[0] = WorkspaceProfile.getModuleId(instance).getName();\r
                             }\r
                             \r
                             String[] instancePart = instance.split(" ");\r
@@ -875,7 +884,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JScrollPane getJScrollPaneQualifiedInstance() {\r
         if (jScrollPaneQualifiedInstance == null) {\r
             jScrollPaneQualifiedInstance = new JScrollPane();\r
-            jScrollPaneQualifiedInstance.setPreferredSize(new java.awt.Dimension(430,170));\r
+            jScrollPaneQualifiedInstance.setPreferredSize(new java.awt.Dimension(600,170));\r
             jScrollPaneQualifiedInstance.setViewportView(getJTableLibInstances());\r
         }\r
         return jScrollPaneQualifiedInstance;\r
@@ -888,7 +897,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private JTable getJTableLibInstances() {\r
         if (jTableLibInstances == null) {\r
-            libInstanceTableModel = new LibraryTableModel();\r
+            libInstanceTableModel = new IDefaultTableModel();\r
             libInstanceTableModel.addColumn("Name");\r
             libInstanceTableModel.addColumn("ModuleGUID");\r
             libInstanceTableModel.addColumn("ModuleVersion");\r
@@ -927,12 +936,11 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             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
+            jPanelLibraryCenter.setLayout(new BorderLayout());\r
+\r
+            jPanelLibraryCenter.add(getJPanelLibraryCenterC(), java.awt.BorderLayout.CENTER);\r
+            jPanelLibraryCenter.add(getJPanelLibraryCenterN(), java.awt.BorderLayout.NORTH);\r
+\r
         }\r
         return jPanelLibraryCenter;\r
     }\r
@@ -945,7 +953,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JScrollPane getJScrollPaneInstanceHelp() {\r
         if (jScrollPaneInstanceHelp == null) {\r
             jScrollPaneInstanceHelp = new JScrollPane();\r
-            jScrollPaneInstanceHelp.setPreferredSize(new java.awt.Dimension(300,50));\r
+            jScrollPaneInstanceHelp.setPreferredSize(new java.awt.Dimension(400,50));\r
             jScrollPaneInstanceHelp.setViewportView(getJTextAreaInstanceHelp());\r
         }\r
         return jScrollPaneInstanceHelp;\r
@@ -980,27 +988,26 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                     if (row < 0) {\r
                         return;\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
+                    \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 = GlobalData.getModuleId(instanceValue);\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
+                    ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceValue);\r
+                    try {\r
+                        addLibInstance (libMi);\r
                     }\r
                     catch (Exception exception) {\r
-                        JOptionPane.showMessageDialog(frame, "Adding Instance" + s[0] + ": "+ exception.getMessage());\r
+                        JOptionPane.showMessageDialog(frame, "Adding Instance" + libMi.getName() + ": "+ exception.getMessage());\r
+                        return;\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
                     resolveLibraryInstances(instanceValue);\r
+                    showClassToResolved();\r
                 }\r
             });\r
         }\r
@@ -1082,9 +1089,6 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      */\r
     private JPanel getJPanelModuleSaOpts() {\r
         if (jPanelModuleSaOpts == null) {\r
-            jLabelPad = new JLabel();\r
-            jLabelPad.setText("");\r
-            jLabelPad.setPreferredSize(new java.awt.Dimension(250,16));\r
             FlowLayout flowLayout4 = new FlowLayout();\r
             flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);\r
             jLabelFfsFormatKey = new JLabel();\r
@@ -1093,6 +1097,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             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
@@ -1104,13 +1109,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             jPanelModuleSaOpts.add(getJTextFieldFileGuid(), null);\r
             jPanelModuleSaOpts.add(jLabelFfsFormatKey, null);\r
             jPanelModuleSaOpts.add(getJTextFieldFfsKey(), null);\r
-            jPanelModuleSaOpts.add(getJScrollPaneModuleSaOptions(), null);\r
-            jPanelModuleSaOpts.add(jLabelPad, null);\r
-            jPanelModuleSaOpts.add(getJButtonNew(), null);\r
-            jPanelModuleSaOpts.add(getJButtonDeleteOption(), 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
@@ -1124,7 +1125,8 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JTextField getJTextFieldFvBinding() {\r
         if (jTextFieldFvBinding == null) {\r
             jTextFieldFvBinding = new JTextField();\r
-            jTextFieldFvBinding.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jTextFieldFvBinding.setPreferredSize(new java.awt.Dimension(400,20));\r
+            jTextFieldFvBinding.setEditable(false);\r
             jTextFieldFvBinding.addFocusListener(new java.awt.event.FocusAdapter() {\r
                 public void focusLost(java.awt.event.FocusEvent e) {\r
                     String originalFvBinding = ffc.getFvBinding(moduleKey);\r
@@ -1152,6 +1154,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         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
                     String originalFileGuid = ffc.getFfsFileNameGuid(moduleKey);\r
@@ -1215,7 +1218,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     private JScrollPane getJScrollPaneModuleSaOptions() {\r
         if (jScrollPaneModuleSaOptions == null) {\r
             jScrollPaneModuleSaOptions = new JScrollPane();\r
-            jScrollPaneModuleSaOptions.setPreferredSize(new java.awt.Dimension(600,200));\r
+            jScrollPaneModuleSaOptions.setPreferredSize(new java.awt.Dimension(600,350));\r
             jScrollPaneModuleSaOptions.setViewportView(getJTableModuleSaOptions());\r
         }\r
         return jScrollPaneModuleSaOptions;\r
@@ -1236,6 +1239,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             optionsTableModel.addColumn("Contents");\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
@@ -1244,6 +1257,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             vArch.add("ARM");\r
             vArch.add("PPC");\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
@@ -1403,6 +1419,7 @@ private JPanel getJPanelPcdFieldsThirdRow() {
         jPanelPcdFieldsThirdRow.add(jLabelPcdDefaultValue, null);\r
         jPanelPcdFieldsThirdRow.add(getJTextFieldPcdDefault(), null);\r
         jPanelPcdFieldsThirdRow.add(getJComboBoxFeatureFlagValue(), null);\r
+        jPanelPcdFieldsThirdRow.add(getJButtonUpdatePcd(), null);\r
     }\r
     return jPanelPcdFieldsThirdRow;\r
 }\r
@@ -1422,7 +1439,6 @@ private JPanel getJPanelPcdFieldsFirstRow() {
         jPanelPcdFieldsFirstRow.setLayout(flowLayout1);\r
         jPanelPcdFieldsFirstRow.add(jLabelItemType, null);\r
         jPanelPcdFieldsFirstRow.add(getJComboBoxItemType(), null);\r
-        jPanelPcdFieldsFirstRow.add(getJButtonUpdatePcd(), null);\r
     }\r
     return jPanelPcdFieldsFirstRow;\r
 }\r
@@ -1438,15 +1454,19 @@ private JComboBox getJComboBoxItemType() {
         jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {\r
             public void itemStateChanged(java.awt.event.ItemEvent e) {\r
                 int row = jTablePcd.getSelectedRow();\r
-                if (row < 0 || jTablePcd.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
+                if (row < 0 || model.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
                     return;\r
                 }\r
                 if (jComboBoxItemType.getItemCount() == 3) {\r
                     if (!jComboBoxItemType.getSelectedItem().equals("DYNAMIC")) {\r
-                        pcdDynamicToNonDynamic(jTablePcd.getValueAt(row, 0)+"", jTablePcd.getValueAt(row, 1)+"");\r
+                        \r
+                        if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
+                            jTextFieldPcdDefault.setText("");\r
+                            jTextFieldPcdDefault.setEnabled(true);\r
+                        }\r
                     }\r
                     else{\r
-                        pcdNonDynamicToDynamic(jTablePcd.getValueAt(row, 0)+"", jTablePcd.getValueAt(row, 1)+"");\r
+                        \r
                     }\r
                 }\r
             }\r
@@ -1470,11 +1490,10 @@ private void pcdDynamicToNonDynamic(String cName, String tsGuid) {
     \r
     ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
     for (int i = 0; i < al.size(); ++i) {\r
-        String[] s = al.get(i).split(" ");\r
-        String mKey = s[0] + s[1] + s[2] + s[3];\r
+        String mKey = moduleInfo (al.get(i));\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
+        String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+        al.set(i, mKey + " " + itemType);\r
     }\r
     \r
     ffc.removeDynamicPcdBuildData(cName, tsGuid);\r
@@ -1483,11 +1502,10 @@ private void pcdDynamicToNonDynamic(String cName, String tsGuid) {
 private void pcdNonDynamicToDynamic(String cName, String tsGuid) {\r
     ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
     for (int i = 0; i < al.size(); ++i) {\r
-        String[] s = al.get(i).split(" ");\r
-        String mKey = s[0] + " " + s[1]+ " " + s[2] + " " + s[3];\r
+        String mKey = moduleInfo (al.get(i));\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
+        String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+        al.set(i, mKey + " " + itemType);\r
     }\r
     try{\r
         ffc.addDynamicPcdBuildData(cName, jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 5)+"", jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
@@ -1496,6 +1514,12 @@ private void pcdNonDynamicToDynamic(String cName, String tsGuid) {
         JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage());\r
     }\r
 }\r
+\r
+private String moduleInfo (String pcdInfo) {\r
+    \r
+    return pcdInfo.substring(0, pcdInfo.lastIndexOf(" "));\r
+}\r
+\r
 /**\r
  * This method initializes jTextFieldMaxDatumSize\r
  *     \r
@@ -1537,9 +1561,17 @@ private JButton getJButtonUpdatePcd() {
                     return;\r
                 }\r
                 docConsole.setSaved(false);\r
-                model.setValueAt(jComboBoxItemType.getSelectedItem(), row, 2);\r
+                String oldItemType = model.getValueAt(row, 2)+"";\r
+                String newItemType = jComboBoxItemType.getSelectedItem()+"";\r
+                model.setValueAt(newItemType, row, 2);\r
                 model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);\r
                 model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);\r
+                if (oldItemType.equals("DYNAMIC") && !newItemType.equals("DYNAMIC")) {\r
+                    pcdDynamicToNonDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");\r
+                }\r
+                if (!oldItemType.equals("DYNAMIC") && newItemType.equals("DYNAMIC")) {\r
+                    pcdNonDynamicToDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");\r
+                }\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
@@ -1556,39 +1588,76 @@ private JComboBox getJComboBoxFeatureFlagValue() {
         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
+        jComboBoxFeatureFlagValue.addItem("TRUE");\r
+        jComboBoxFeatureFlagValue.addItem("FALSE");\r
     }\r
     return jComboBoxFeatureFlagValue;\r
 }\r
-\r
-\r
-}  //  @jve:decl-index=0:visual-constraint="10,10"\r
-\r
-class PartialEditableTableModel extends DefaultTableModel {\r
-    /**\r
-     * \r
-     */\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    public boolean isCellEditable(int row, int col) {\r
-        switch (col){\r
-        case 2:\r
-            return false;\r
-        default:\r
-            return false; \r
-        }\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(getJScrollPaneModuleSaOptions(), 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
-class LibraryTableModel extends DefaultTableModel {\r
-    /**\r
-     * \r
-     */\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    public boolean isCellEditable(int row, int col) {\r
-        return false;\r
+/**\r
+ * This method initializes jPanelLibraryCenterN        \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanelLibraryCenterN() {\r
+    if (jPanelLibraryCenterN == null) {\r
+        FlowLayout flowLayout5 = new FlowLayout();\r
+        flowLayout5.setAlignment(java.awt.FlowLayout.CENTER);\r
+        flowLayout5.setHgap(10);\r
+        jPanelLibraryCenterN = new JPanel();\r
+        jPanelLibraryCenterN.setLayout(flowLayout5);\r
+        jPanelLibraryCenterN.add(jLabelInstanceHelp, null);\r
+        jPanelLibraryCenterN.add(getJScrollPaneInstanceHelp(), null);\r
+        jPanelLibraryCenterN.add(getJButtonAdd(), null);\r
+        jPanelLibraryCenterN.add(getJButtonDeleteInstance(), null);\r
+    }\r
+    return jPanelLibraryCenterN;\r
+}\r
+/**\r
+ * This method initializes jPanelLibraryCenterC        \r
+ *     \r
+ * @return javax.swing.JPanel  \r
+ */\r
+private JPanel getJPanelLibraryCenterC() {\r
+    if (jPanelLibraryCenterC == null) {\r
+        jPanelLibraryCenterC = new JPanel();\r
+        jPanelLibraryCenterC.add(jLabelSelectedInstances, null);\r
+        jPanelLibraryCenterC.add(getJScrollPaneSelectedInstances(), null);\r
     }\r
+    return jPanelLibraryCenterC;\r
 }\r
+\r
+\r
+}  //  @jve:decl-index=0:visual-constraint="10,10"\r