]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Modify FrameworkModules editor for FPD files to meet the new PCD type adjust operatio...
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
index 917585908ca0192258ed9dd374d66d2a4ba3bd06..8f6d31057f6956589ed9692086201246b8c2f15f 100644 (file)
@@ -282,8 +282,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             return;\r
         }\r
         \r
-        for (int j = 0; j < v.size(); ++j) {\r
-            LibraryClassDescriptor libInfo = v.get(j);\r
+        Iterator<LibraryClassDescriptor> iter = v.iterator();\r
+        while (iter.hasNext()) {\r
+            LibraryClassDescriptor libInfo = iter.next();\r
 \r
             Vector<String> vSupArchs = libInfo.getVectorFromString(libInfo.supArchs);\r
             \r
@@ -318,7 +319,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             //\r
             // remove this lib definition if it supports no archs module will be built under.\r
             //\r
-            v.iterator().remove();\r
+            iter.remove();\r
         }\r
     }\r
     \r
@@ -712,9 +713,10 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         // array for pcd related information: helpText, itemType, moduleType.\r
                         //\r
                         String[] pcdInfo = {"", "", ""};\r
-                        getPcdInfo(cName, tsGuid, pcdInfo);\r
+                        Vector<String> validPcdTypes = new Vector<String>();\r
+                        getPcdInfo(moduleKey, cName, tsGuid, pcdInfo, validPcdTypes);\r
                         jTextAreaPcdHelp.setText(pcdInfo[0]);\r
-                        initComboBox(pcdInfo[1], pcdInfo[2]);\r
+                        initComboBox(pcdInfo[1], pcdInfo[2], validPcdTypes);\r
                         jComboBoxItemType.setSelectedItem(itemType);\r
                         jTextFieldMaxDatumSize.setEnabled(true);\r
                         jTextFieldMaxDatumSize.setVisible(true);\r
@@ -768,15 +770,16 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         return jTablePcd;\r
     }\r
     \r
-    private void initComboBox(String originalType, String mType) {\r
+    private void initComboBox(String originalType, String mType, Vector<String> validPcdTypes) {\r
         jComboBoxItemType.removeAllItems();\r
-        jComboBoxItemType.addItem(originalType);\r
-        if (originalType.equals("PATCHABLE_IN_MODULE") && mType.equalsIgnoreCase("false")) {\r
-            jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
-        }\r
+\r
         if (originalType.equals("DYNAMIC")) {\r
-            jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
-            jComboBoxItemType.addItem("PATCHABLE_IN_MODULE");\r
+            for (int i = 0; i < validPcdTypes.size(); ++i) {\r
+                jComboBoxItemType.addItem(validPcdTypes.get(i));\r
+            }\r
+        }\r
+        else {\r
+            jComboBoxItemType.addItem(originalType);\r
         }\r
     }\r
     \r
@@ -785,17 +788,17 @@ public class FpdModuleSA extends JDialog implements ActionListener {
      * @param tsGuid\r
      * @param sa sa[0]: HelpText; sa[1]: itemType in Msa; sa[2]: isBinary;\r
      */\r
-    private void getPcdInfo(String cName, String tsGuid, String[] sa) {\r
+    private void getPcdInfo(String moduleKey, String cName, String tsGuid, String[] sa, Vector<String> validPcdTypes) {\r
         String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5];\r
         ffc.getLibraryInstances(moduleKey, saa);\r
         \r
         try{\r
-            if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa)) {\r
+            if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa, validPcdTypes)) {\r
                 return;\r
             }\r
             for (int j = 0; j < saa.length; ++j) {\r
                 if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),\r
-                                            cName, tsGuid, sa)) {\r
+                                            cName, tsGuid, sa, validPcdTypes)) {\r
                     return;\r
                 }\r
             }\r
@@ -1657,26 +1660,25 @@ private JComboBox getJComboBoxItemType() {
     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 = jTablePcd.getSelectedRow();\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
-                        \r
-                        if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
-                            jTextFieldPcdDefault.setText("");\r
-                            jTextFieldPcdDefault.setEnabled(true);\r
-                        }\r
-                    }\r
-                    else{\r
-                        \r
-                    }\r
-                }\r
-            }\r
-        });\r
+//        jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {\r
+//            public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+//                \r
+//                int row = jTablePcd.getSelectedRow();\r
+//                if (row < 0 || model.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
+//                    return;\r
+//                }\r
+//                    if (!jComboBoxItemType.getSelectedItem().equals("DYNAMIC")) {\r
+//                        \r
+//                        if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
+//                            jTextFieldPcdDefault.setText("");\r
+//                            jTextFieldPcdDefault.setEnabled(true);\r
+//                        }\r
+//                    }\r
+//                    else{\r
+//                        \r
+//                    }\r
+//                }\r
+//        });\r
     }\r
     return jComboBoxItemType;\r
 }\r
@@ -1698,8 +1700,8 @@ private void pcdDynamicToNonDynamic(String cName, String tsGuid) {
     for (int i = 0; i < al.size(); ++i) {\r
         String mKey = moduleInfo (al.get(i));\r
         value = null;\r
-        ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", maxSize, value);\r
         String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+        ffc.updatePcdData(mKey, cName, tsGuid, itemType, maxSize, value);\r
         al.set(i, mKey + " " + itemType);\r
     }\r
     \r
@@ -1710,8 +1712,8 @@ 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 mKey = moduleInfo (al.get(i));\r
-        ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
         String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+        ffc.updatePcdData(mKey, cName, tsGuid, itemType, jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
         al.set(i, mKey + " " + itemType);\r
     }\r
     try{\r
@@ -1722,6 +1724,16 @@ private void pcdNonDynamicToDynamic(String cName, String tsGuid) {
     }\r
 }\r
 \r
+private void changePcdTypeWithinSameCategory (String cName, String tsGuid) {\r
+    ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+    for (int i = 0; i < al.size(); ++i) {\r
+        String mKey = moduleInfo (al.get(i));\r
+        String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+        ffc.updatePcdData(mKey, cName, tsGuid, itemType, null, null);\r
+        al.set(i, mKey + " " + itemType);\r
+    }\r
+}\r
+\r
 private String moduleInfo (String pcdInfo) {\r
     \r
     return pcdInfo.substring(0, pcdInfo.lastIndexOf(" "));\r
@@ -1767,14 +1779,17 @@ private JButton getJButtonUpdatePcd() {
                 if (row < 0) {\r
                     return;\r
                 }\r
-                docConsole.setSaved(false);\r
+                \r
+                String cName = model.getValueAt(row, 0)+"";\r
+                String tsGuid = model.getValueAt(row, 1)+"";\r
                 String oldItemType = model.getValueAt(row, 2)+"";\r
                 String newItemType = jComboBoxItemType.getSelectedItem()+"";\r
-                model.setValueAt(newItemType, row, 2);\r
+                \r
                 model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);\r
                 \r
                 String[] pcdInfo = {"", "", ""};\r
-                getPcdInfo (model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", pcdInfo);\r
+                Vector<String> validPcdTypes = new Vector<String>();\r
+                getPcdInfo (moduleKey, cName, tsGuid, pcdInfo, validPcdTypes);\r
                 if (pcdInfo[1].equals("FIXED_AT_BUILD") && model.getValueAt(row, 5).equals("VOID*")) {\r
                     try {\r
                         jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(model.getValueAt(row, 6)+"")+"");\r
@@ -1786,18 +1801,62 @@ private JButton getJButtonUpdatePcd() {
                 }\r
                 model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);\r
                 \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
+                if (newItemType != oldItemType) {\r
+                    Vector<ModuleIdentification> moduleInfo = new Vector<ModuleIdentification>();\r
+                    try {\r
+                        boolean changable = itemTypeCouldBeChanged (cName, tsGuid, newItemType, moduleInfo);\r
+                        if (!changable) {\r
+                            JOptionPane.showMessageDialog(frame, "Can NOT Change Pcd Type in: " + moduleInfo.get(0).getName() + " contained in package " + moduleInfo.get(0).getPackageId().getName());\r
+                            return;\r
+                        }\r
+                    }\r
+                    catch (Exception exp) {\r
+                        JOptionPane.showMessageDialog(frame, "Can NOT Change Pcd Type in: " + moduleInfo.get(0).getName() + " contained in package " + moduleInfo.get(0).getPackageId().getName() + " " + exp.getMessage());\r
+                        return;\r
+                    }\r
+                    \r
+                    if ((oldItemType.equals("DYNAMIC") || oldItemType.equals("DYNAMIC_EX")) && !newItemType.equals("DYNAMIC") && !newItemType.equals("DYNAMIC_EX")) {\r
+                        pcdDynamicToNonDynamic(cName, tsGuid);\r
+                    }\r
+                    if (!oldItemType.equals("DYNAMIC") && !oldItemType.equals("DYNAMIC_EX") && (newItemType.equals("DYNAMIC") || newItemType.equals("DYNAMIC_EX"))) {\r
+                        pcdNonDynamicToDynamic(cName, tsGuid);\r
+                    }\r
+                    else {\r
+                        changePcdTypeWithinSameCategory (cName, tsGuid);\r
+                    }\r
+                    model.setValueAt(newItemType, row, 2);\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
+                ffc.updatePcdData(moduleKey, cName, tsGuid, model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");\r
+                docConsole.setSaved(false);\r
             }\r
         });\r
     }\r
     return jButtonUpdatePcd;\r
 }\r
+\r
+private boolean itemTypeCouldBeChanged (String cName, String tsGuid, String newItemType, Vector<ModuleIdentification> mi) throws Exception{\r
+    ArrayList<String> pcdConsumers = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+    for (int i = 0; i < pcdConsumers.size(); ++i) {\r
+        String consumerInfo = moduleInfo (pcdConsumers.get(i));\r
+        mi.removeAllElements();\r
+        mi.add(WorkspaceProfile.getModuleId(consumerInfo));\r
+        String[] sa = {"", "", ""};\r
+        Vector<String> validPcdTypes = new Vector<String>();\r
+        getPcdInfo (consumerInfo, cName, tsGuid, sa, validPcdTypes);\r
+        if (validPcdTypes.size() == 0) {\r
+            return false;\r
+        }\r
+        if (!sa[1].equals("DYNAMIC")) {\r
+            return false;\r
+        }\r
+        if (!validPcdTypes.contains(newItemType)) {\r
+            return false;\r
+        }\r
+    }\r
+    return true;\r
+}\r
+\r
 /**\r
  * This method initializes jComboBoxFeatureFlagValue\r
  *     \r