]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
Add Fv option value edit support;
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFileContents.java
index b15e5d28d8ddebdba0920722c9d3cc5670fa5459..a59b2d4f792b5f6078ab37ac623fafade111942a 100644 (file)
@@ -115,8 +115,8 @@ public class FpdFileContents {
               if (moduleSa.getPcdBuildDefinition() == null || moduleSa.getPcdBuildDefinition().getPcdDataList() == null) {\r
                   continue;\r
               }\r
-              String ModuleInfo = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() +\r
-               " " + moduleSa.getPackageGuid() + " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList());\r
+              String ModuleInfo = moduleSa.getModuleGuid().toLowerCase() + " " + moduleSa.getModuleVersion() +\r
+               " " + moduleSa.getPackageGuid().toLowerCase() + " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList());\r
               List<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lp = moduleSa.getPcdBuildDefinition().getPcdDataList();\r
               ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lpi = lp.listIterator();\r
               while (lpi.hasNext()) {\r
@@ -358,6 +358,9 @@ public class FpdFileContents {
                 if (!cursor.isText()) {\r
                     break;\r
                 }\r
+                if (cursor.getObject() == null) {\r
+                    break;\r
+                }\r
                 String s = cursor.getTextValue();\r
                 if (s.matches(regExpNewLineAndSpaces)) {\r
                     continue;\r
@@ -371,8 +374,10 @@ public class FpdFileContents {
             cursor.pop();\r
             cursor.removeXml();\r
             if (getFrameworkModulesCount() == 0) {\r
-                cursor.toParent();\r
-                cursor.removeXml();\r
+                cursor.dispose();\r
+                removeElement(getfpdFrameworkModules());\r
+                fpdFrameworkModules = null;\r
+                return;\r
             }\r
         }\r
         cursor.dispose();\r
@@ -475,7 +480,7 @@ public class FpdFileContents {
         String[] s = moduleInfo.split(" ");\r
         for(int i = 0; i < al.size(); ++i){\r
             String consumer = al.get(i);\r
-            if (consumer.contains(s[0]) && consumer.contains(s[2])){\r
+            if (consumer.contains(s[0].toLowerCase()) && consumer.contains(s[2].toLowerCase())){\r
                 String[] consumerPart = consumer.split(" ");\r
                 if (!consumerPart[4].equals(s[4])) {\r
                     continue;\r
@@ -573,12 +578,21 @@ public class FpdFileContents {
                     //\r
                     // change item type while not updating dynPcdData????\r
                     //\r
-                    pcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
-                    if(pcdData.getDatumType().equals("VOID*")) {\r
+                    if (itemType != null) {\r
+                        pcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
+                    }\r
+                    \r
+                    if(pcdData.getDatumType().equals("VOID*") && maxSize != null) {\r
                         pcdData.setMaxDatumSize(new Integer(maxSize));\r
                     }\r
-                    pcdData.setValue(value);\r
-                    defaultPcdValue.put(cName + " " + tsGuid, value);\r
+                    //\r
+                    // if value input is null, keep old value untouched.\r
+                    //\r
+                    if (value != null) {\r
+                        pcdData.setValue(value);\r
+                        defaultPcdValue.put(cName + " " + tsGuid, value);\r
+                    }\r
+                    \r
                     break;\r
                 }\r
             }\r
@@ -1517,7 +1531,10 @@ public class FpdFileContents {
                 if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
                     \r
                     if (getDynamicPcdBuildDataCount() == 1) {\r
-                        cursor.toParent();\r
+                        cursor.dispose();\r
+                        removeElement(o);\r
+                        fpdDynPcdBuildDefs = null;\r
+                        return;\r
                     }\r
                     cursor.removeXml();\r
                     cursor.dispose();\r
@@ -1534,6 +1551,8 @@ public class FpdFileContents {
     public int getDynamicPcdSkuInfoCount(int i){\r
         if (fpdRoot.getDynamicPcdBuildDefinitions() == null || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null \r
                         || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {\r
+            removeElement(getfpdDynPcdBuildDefs());\r
+            fpdDynPcdBuildDefs = null;\r
             return 0;\r
         }\r
         \r
@@ -1702,9 +1721,11 @@ public class FpdFileContents {
     \r
     public void updateDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
                                                  String hiiDefault, String vpdOffset, String value, int i){\r
-//        if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
-//            return;\r
-//        }\r
+        if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
+            removeElement(getfpdDynPcdBuildDefs());\r
+            fpdDynPcdBuildDefs = null;\r
+            return;\r
+        }\r
         \r
         XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
         if (cursor.toFirstChild()) {\r
@@ -1977,7 +1998,16 @@ public class FpdFileContents {
     }\r
     \r
     public void removeModuleInBuildOptionsUserExtensions (String fvName, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
-        if (getUserExtsIncModCount(fvName) > 0) {\r
+        //\r
+        // if there is only one module before remove operation, the whole user extension should be removed.\r
+        //\r
+        int moduleAmount = getUserExtsIncModCount(fvName);\r
+        if (moduleAmount == 1) {\r
+            removeBuildOptionsUserExtensions(fvName);\r
+            return;\r
+        }\r
+        \r
+        if (moduleAmount > 1) {\r
             \r
             XmlCursor cursor = getfpdBuildOpts().newCursor();\r
             QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
@@ -2034,6 +2064,45 @@ public class FpdFileContents {
         }\r
     }\r
     \r
+    public void addModuleIntoBuildOptionsUserExtensions (String fvName, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
+        if (moduleInBuildOptionsUserExtensions (fvName, moduleGuid, moduleVersion, packageGuid, packageVersion, arch)) {\r
+            return;\r
+        }\r
+        ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
+        QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
+        QName elementModule = new QName(xmlNs, "Module");\r
+        while (li.hasNext()) {\r
+            UserExtensionsDocument.UserExtensions ues = li.next();\r
+            if (!ues.getUserID().equals("IMAGES")) {\r
+                continue;\r
+            }\r
+            XmlCursor cursor = ues.newCursor();\r
+            cursor.toFirstChild();\r
+            String elementName = cursor.getTextValue();\r
+            if (elementName.equals(fvName)) {\r
+                cursor.toNextSibling(elementIncludeModules);\r
+                cursor.toLastChild();\r
+                cursor.toEndToken();\r
+                cursor.toNextToken();\r
+                cursor.beginElement(elementModule);\r
+                cursor.insertAttributeWithValue("ModuleGuid", moduleGuid);\r
+                if (!moduleVersion.equals("null") && moduleVersion.length() != 0) {\r
+                    cursor.insertAttributeWithValue("ModuleVersion", moduleVersion);\r
+                }\r
+                cursor.insertAttributeWithValue("PackageGuid", packageGuid);\r
+                if (!packageVersion.equals("null") && packageVersion.length() != 0) {\r
+                    cursor.insertAttributeWithValue("PackageVersion", packageVersion);\r
+                }\r
+                \r
+                cursor.insertAttributeWithValue("Arch", arch);\r
+                cursor.dispose();\r
+                return;\r
+            }\r
+            cursor.dispose();\r
+        }\r
+        \r
+    }\r
+    \r
     public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
         UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
         if (udats == null) {\r
@@ -2369,7 +2438,9 @@ public class FpdFileContents {
         if (sections == null){\r
             sections = ffs.addNewSections();\r
         }\r
-        sections.addNewSections().setEncapsulationType(encapType);\r
+        BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = sections.addNewSections();\r
+        sections2.setEncapsulationType(encapType);\r
+        sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString("EFI_SECTION_PE32"));\r
     }\r
     \r
     public void removeBuildOptionsFfsSectionsSections(int i, int j) {\r
@@ -2495,9 +2566,9 @@ public class FpdFileContents {
             ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section> li = sections2.getSectionList().listIterator();\r
             while(li.hasNext()) {\r
                 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = li.next();\r
-                if (section.isSetSectionType()) {\r
-                    al.add(section.getSectionType().toString());\r
-                }\r
+//                if (section.isSetSectionType()) {\r
+                    al.add(section.getSectionType()+"");\r
+//                }\r
                 \r
             }\r
         }\r
@@ -2546,7 +2617,7 @@ public class FpdFileContents {
                 if (ffs.getSections().getSectionList() != null){\r
                     ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Section> li = ffs.getSections().getSectionList().listIterator();\r
                     while (li.hasNext()) {\r
-                        firstLevelSection.add(li.next().getSectionType().toString());\r
+                        firstLevelSection.add(li.next().getSectionType()+"");\r
                     }\r
                 }\r
                 if (ffs.getSections().getSectionsList() != null) {\r
@@ -3214,32 +3285,31 @@ public class FpdFileContents {
      * @param name\r
      * @param value\r
      */\r
-    public void setTypedNamedFvImageNameValue (String fvName, String type, String name, String value) {\r
+    public void setTypedNamedFvImageNameValue (String fvName, String type, String name, String value, String newName) {\r
         boolean fvImageExists = false;\r
-        if (getfpdFlash().getFvImages() == null) {\r
-            return;\r
-        }\r
-        List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
-        if (l == null) {\r
-            return;\r
-        }\r
-        ListIterator li = l.listIterator();\r
-        while(li.hasNext()) {\r
-            FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
-            if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
-                continue;\r
-            }\r
-            if (!fi.getFvImageNamesList().contains(fvName)) {\r
-                continue;\r
+        if (getfpdFlash().getFvImages() != null) {\r
+\r
+            List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
+            if (l != null) {\r
+                ListIterator li = l.listIterator();\r
+                while (li.hasNext()) {\r
+                    FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage) li.next();\r
+                    if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
+                        continue;\r
+                    }\r
+                    if (!fi.getFvImageNamesList().contains(fvName)) {\r
+                        continue;\r
+                    }\r
+                    fvImageExists = true;\r
+                    setFvImagesFvImageNameValue(fi, name, value, newName);\r
+                }\r
             }\r
-            fvImageExists = true;\r
-            setFvImagesFvImageNameValue (fi, name, value, null);\r
         }\r
-        \r
+\r
         if (!fvImageExists) {\r
             HashMap<String, String> map = new HashMap<String, String>();\r
             map.put(name, value);\r
-            genFvImagesFvImage(new String[]{fvName}, type, map);\r
+            genFvImagesFvImage(new String[] { fvName }, type, map);\r
         }\r
     }\r
     \r
@@ -3295,7 +3365,7 @@ public class FpdFileContents {
             FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.addNewFvImageOptions().addNewNameValue();\r
             nv.setName(name);\r
             nv.setValue(value);\r
-            if (newName != null) {\r
+            if (newName != null && !newName.equals(name)) {\r
                 nv.setName(newName);\r
             }\r
             return;\r
@@ -3307,7 +3377,7 @@ public class FpdFileContents {
                 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = (FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue)cursor.getObject();\r
                 if (nv.getName().equals(name)) {\r
                     nv.setValue(value);\r
-                    if (newName != null) {\r
+                    if (newName != null && !newName.equals(name)) {\r
                         nv.setName(newName);\r
                     }\r
                     cursor.dispose();\r
@@ -3319,7 +3389,7 @@ public class FpdFileContents {
         FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.getFvImageOptions().addNewNameValue();\r
         nv.setName(name);\r
         nv.setValue(value);\r
-        if (newName != null) {\r
+        if (newName != null && !newName.equals(name)) {\r
             nv.setName(newName);\r
         }\r
         cursor.dispose();\r