X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=Tools%2FSource%2FFrameworkWizard%2Fsrc%2Forg%2Ftianocore%2Fframeworkwizard%2Fplatform%2Fui%2FFpdFileContents.java;h=b89f967fa3e53000e18993fbbb172b84a1e35dce;hb=ac66fadf6fae5f54b17fb50728a82ffb32b829fa;hp=07980d7ddba91714dce2c0b38be7760f519c3f4f;hpb=2b70a6367bb933dba94fb12f0a26aa433c4bef1f;p=mirror_edk2.git diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java index 07980d7ddb..b89f967fa3 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java @@ -70,6 +70,7 @@ import org.tianocore.frameworkwizard.packaging.PackageIdentification; public class FpdFileContents { static final String xmlNs = "http://www.TianoCore.org/2006/Edk2.0"; + static final String regNewLineAndSpaces = "((\n)|(\r\n)|(\r)|(\u0085)|(\u2028)|(\u2029))(\\s)*"; private PlatformSurfaceAreaDocument fpdd = null; @@ -91,6 +92,11 @@ public class FpdFileContents { private HashMap defaultPcdValue = new HashMap(); + private String itemType (String pcdInfo) { + + return pcdInfo.substring(pcdInfo.lastIndexOf(" ") + 1); + } + /** * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings. */ @@ -251,12 +257,22 @@ public class FpdFileContents { } public ModuleSADocument.ModuleSA getModuleSA(String key) { - String[] s = key.split(" "); + if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0) { removeElement(getfpdFrameworkModules()); fpdFrameworkModules = null; return null; } + String[] s = key.split(" "); + String archsInKey = ""; + if (s.length > 4) { + for (int i = 4; i < s.length; ++i) { + archsInKey += s[i]; + archsInKey += " "; + } + archsInKey = archsInKey.trim(); + } + ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator(); while(li.hasNext()) { ModuleSADocument.ModuleSA moduleSa = (ModuleSADocument.ModuleSA)li.next(); @@ -271,13 +287,17 @@ public class FpdFileContents { continue; } } - //ToDo add arch check for s[4] + //ToDo add arch check . if (moduleSa.getSupArchList() != null) { - if (!listToString(moduleSa.getSupArchList()).equals(s[4])) { - continue; + if (listToString(moduleSa.getSupArchList()).equals(archsInKey)) { + return moduleSa; + } + } + else { + if (archsInKey.length() == 0) { + return moduleSa; } } - return moduleSa; } } return null; @@ -326,10 +346,21 @@ public class FpdFileContents { } cursor.push(); - cursor.toPrevToken(); + while (cursor.hasPrevToken()) { + cursor.toPrevToken(); + if (!cursor.isText()) { + break; + } + String s = cursor.getTextValue(); + if (s.matches(regNewLineAndSpaces)) { + continue; + } + } + if (cursor.isComment()) { cursor.removeXml(); } + cursor.pop(); cursor.removeXml(); if (getFrameworkModulesCount() == 0) { @@ -360,17 +391,22 @@ public class FpdFileContents { getLibraryInstances(moduleKey, saaLib); ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey); Vector vMi = new Vector(); + // + // create vector for module & library instance MIs. + // vMi.add(mi); + for (int j = 0; j < saaLib.length; ++j) { + String libKey = saaLib[j][1] + " " + saaLib[j][2] + " " + saaLib[j][3] + " " + saaLib[j][4]; + ModuleIdentification libMi = WorkspaceProfile.getModuleId(libKey); + vMi.add(libMi); + } + try { nextPcd:for (int i = 0; i < saaModuleSaPcd.length; ++i) { - if (WorkspaceProfile.pcdInMsa(saaModuleSaPcd[i][0], saaModuleSaPcd[i][1], mi)){ - continue; - } - for (int j = 0; j < saaLib.length; ++j) { - String libKey = saaLib[j][1] + " " + saaLib[j][2] + " " + saaLib[j][3] + " " + saaLib[j][4]; - ModuleIdentification libMi = WorkspaceProfile.getModuleId(libKey); - vMi.add(libMi); - if (WorkspaceProfile.pcdInMsa(saaModuleSaPcd[i][0], saaModuleSaPcd[i][1], libMi)) { + + for (int j = 0; j < vMi.size(); ++j) { + ModuleIdentification nextMi = vMi.get(j); + if (WorkspaceProfile.pcdInMsa(saaModuleSaPcd[i][0], saaModuleSaPcd[i][1], nextMi)) { continue nextPcd; } } @@ -379,7 +415,7 @@ public class FpdFileContents { } } catch (Exception e) { - + throw e; } // // add new Pcd from MSA file to ModuleSA. @@ -405,9 +441,6 @@ public class FpdFileContents { } } - Map m = new HashMap(); - m.put("ModuleSurfaceArea", msa); - SurfaceAreaQuery.setDoc(m); PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, vMi.get(i)); PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs); if (spdPcd == null) { @@ -541,6 +574,9 @@ public class FpdFileContents { do { PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject(); if (pcdData.getCName().equals(cName) && pcdData.getTokenSpaceGuidCName().equals(tsGuid)) { + // + // change item type while not updating dynPcdData???? + // pcdData.setItemType(PcdItemTypes.Enum.forString(itemType)); if(pcdData.getDatumType().equals("VOID*")) { pcdData.setMaxDatumSize(new Integer(maxSize)); @@ -598,6 +634,7 @@ public class FpdFileContents { // sa[0] = spdPcd.getHelpText() + msaPcd.getHelpText(); sa[1] = msaPcd.getPcdItemType()+""; + sa[2] = msa.getModuleDefinitions().getBinaryModule()+""; return true; } @@ -630,26 +667,25 @@ public class FpdFileContents { ModuleSADocument.ModuleSA moduleSA = getModuleSA(moduleKey); if (moduleSA.getPcdBuildDefinition() != null) { XmlCursor cursor = moduleSA.getPcdBuildDefinition().newCursor(); + cursor.push(); if (cursor.toFirstChild()) { - PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData) cursor - .getObject(); - if (msaPcd.getCName().equals(pcdData.getCName()) - && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) { - - maintainDynPcdMap(pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(), moduleKey); - cursor.removeXml(); - break; - } - while (cursor.toNextSibling()) { - pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData) cursor.getObject(); + do { + PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData) cursor + .getObject(); if (msaPcd.getCName().equals(pcdData.getCName()) && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) { + maintainDynPcdMap(pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(), moduleKey); cursor.removeXml(); break; } - } + } while (cursor.toNextSibling()); + } + + cursor.pop(); + if (moduleSA.getPcdBuildDefinition().getPcdDataList().size() == 0) { + cursor.removeXml(); } cursor.dispose(); } @@ -700,7 +736,17 @@ public class FpdFileContents { cursor.toNextSibling(); } cursor.push(); - cursor.toPrevToken(); + while (cursor.hasPrevToken()) { + cursor.toPrevToken(); + if (!cursor.isText()) { + break; + } + String s = cursor.getTextValue(); + if (s.matches(regNewLineAndSpaces)) { + continue; + } + } + if (cursor.isComment()) { cursor.removeXml(); } @@ -753,11 +799,15 @@ public class FpdFileContents { } public String getFvBinding(String moduleKey){ - ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey); - if (msa == null || msa.getModuleSaBuildOptions() == null) { + ModuleSADocument.ModuleSA moduleSa = getModuleSA(moduleKey); + return getFvBinding (moduleSa); + } + + public String getFvBinding (ModuleSADocument.ModuleSA moduleSa) { + if (moduleSa == null || moduleSa.getModuleSaBuildOptions() == null) { return null; } - return msa.getModuleSaBuildOptions().getFvBinding(); + return moduleSa.getModuleSaBuildOptions().getFvBinding(); } public void setFvBinding(ModuleSADocument.ModuleSA moduleSa, String fvBinding) { @@ -783,6 +833,23 @@ public class FpdFileContents { setFvBinding (moduleSa, fvBinding); } + private int fvBindingForModuleSA (ModuleSADocument.ModuleSA moduleSa, String fvName) { + if (moduleSa == null || moduleSa.getModuleSaBuildOptions() == null || moduleSa.getModuleSaBuildOptions().getFvBinding() == null) { + return -1; + } + + String fvNameList = moduleSa.getModuleSaBuildOptions().getFvBinding(); + String[] fvNamesArray = fvNameList.split(" "); + int occursAt = -1; + for (int i = 0; i < fvNamesArray.length; ++i) { + if (fvNamesArray[i].equals(fvName)) { + occursAt = i; + break; + } + } + return occursAt; + } + public void removeFvBinding (ModuleSADocument.ModuleSA moduleSa, String fvName) { if (moduleSa == null || moduleSa.getModuleSaBuildOptions() == null || moduleSa.getModuleSaBuildOptions().getFvBinding() == null) { return; @@ -828,6 +895,37 @@ public class FpdFileContents { } } + public void appendFvBindingAll (String fvName) { + if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){ + removeElement(getfpdFrameworkModules()); + fpdFrameworkModules = null; + return; + } + + Iterator li = getfpdFrameworkModules().getModuleSAList().iterator(); + while (li.hasNext()) { + ModuleSADocument.ModuleSA moduleSa = li.next(); + appendFvBinding (moduleSa, fvName); + } + } + + public void appendFvBindingFor (String oldFvName, String newFvName) { + if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){ + removeElement(getfpdFrameworkModules()); + fpdFrameworkModules = null; + return; + } + + Iterator li = getfpdFrameworkModules().getModuleSAList().iterator(); + while (li.hasNext()) { + ModuleSADocument.ModuleSA moduleSa = li.next(); + String fvBinding = getFvBinding (moduleSa); + if (fvBinding != null && fvBindingForModuleSA (moduleSa, oldFvName) >= 0) { + appendFvBinding (moduleSa, newFvName); + } + } + } + public void appendFvBinding (String moduleKey, String fvName) { ModuleSADocument.ModuleSA moduleSa = getModuleSA(moduleKey); appendFvBinding (moduleSa, fvName); @@ -943,7 +1041,9 @@ public class FpdFileContents { if (opt.getSupArchList() != null){ saa[i][4] = listToString(opt.getSupArchList()); - + } + else { + saa[i][4] = ""; } saa[i][5] = opt.getStringValue(); @@ -1130,8 +1230,8 @@ public class FpdFileContents { // Using existing Pcd type, if this pcd already exists in other ModuleSA // if (pcdConsumer.size() > 0) { - String[] valPart = pcdConsumer.get(0).split(" "); - itemType = valPart[5]; + + itemType = itemType (pcdConsumer.get(0)); } String listValue = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() + " " + moduleSa.getPackageGuid() + " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList()) @@ -1154,7 +1254,7 @@ public class FpdFileContents { fpdPcd.setValue("0"); } if (dataType.equals("BOOLEAN")){ - fpdPcd.setValue("false"); + fpdPcd.setValue("FALSE"); } if (dataType.equals("VOID*")) { fpdPcd.setValue(""); @@ -1609,23 +1709,28 @@ public class FpdFileContents { } public void genBuildOptionsUserExtensions(String fvName, String outputFileName, Vector includeModules) { + QName elementFvName = new QName (xmlNs, "FvName"); + QName elementIncludeModules = new QName(xmlNs, "IncludeModules"); + QName elementInfFileName = new QName(xmlNs, "InfFileName"); + QName elementModule = new QName(xmlNs, "Module"); + UserExtensionsDocument.UserExtensions userExts = getfpdBuildOpts().addNewUserExtensions(); userExts.setUserID("IMAGES"); userExts.setIdentifier(new BigInteger("1")); XmlCursor cursor = userExts.newCursor(); cursor.toEndToken(); - cursor.beginElement("FvName"); + cursor.beginElement(elementFvName); cursor.insertChars(fvName); cursor.toNextToken(); - cursor.beginElement("InfFileName"); + cursor.beginElement(elementInfFileName); cursor.insertChars(fvName + ".inf"); cursor.toNextToken(); - cursor.beginElement("IncludeModules"); + cursor.beginElement(elementIncludeModules); for (int i = 0; i < includeModules.size(); ++i) { - cursor.beginElement("Module"); + cursor.beginElement(elementModule); cursor.insertAttributeWithValue("ModuleGuid", includeModules.get(i)[0]); cursor.insertAttributeWithValue("BaseName", includeModules.get(i)[1]); cursor.toEndToken(); @@ -1639,6 +1744,7 @@ public class FpdFileContents { return -1; } ListIterator li = getfpdBuildOpts().getUserExtensionsList().listIterator(); + QName elementIncludeModules = new QName(xmlNs, "IncludeModules"); while (li.hasNext()) { UserExtensionsDocument.UserExtensions ues = li.next(); if (!ues.getUserID().equals("IMAGES")) { @@ -1648,7 +1754,7 @@ public class FpdFileContents { cursor.toFirstChild(); String elementName = cursor.getTextValue(); if (elementName.equals(fvName)) { - cursor.toNextSibling(new QName("", "IncludeModules")); + cursor.toNextSibling(elementIncludeModules); if (cursor.toFirstChild()) { int i = 1; for (i = 1; cursor.toNextSibling(); ++i); @@ -1667,6 +1773,45 @@ public class FpdFileContents { if (getfpdBuildOpts().getUserExtensionsList() == null) { return; } + + XmlCursor cursor = getfpdBuildOpts().newCursor(); + QName elementUserExts = new QName (xmlNs, "UserExtensions"); + QName attribUserId = new QName ("UserID"); + QName elementFvName = new QName (xmlNs, "FvName"); + QName elementIncludeModules = new QName(xmlNs, "IncludeModules"); + QName attribModuleGuid = new QName("ModuleGuid"); + QName attribBaseName = new QName("BaseName"); + + if (cursor.toChild(elementUserExts)) { + do { + cursor.push(); + if (cursor.getAttributeText(attribUserId).equals("IMAGES")) { + cursor.toChild(elementFvName); + String elementName = cursor.getTextValue(); + if (elementName.equals(fvName)) { + cursor.toNextSibling(elementIncludeModules); + if (cursor.toFirstChild()) { + int i = 0; + do { + saa[i][0] = cursor.getAttributeText(attribModuleGuid); + saa[i][1] = cursor.getAttributeText(attribBaseName); + ++i; + }while (cursor.toNextSibling()); + } + break; + } + } + cursor.pop(); + }while (cursor.toNextSibling(elementUserExts)); + } + cursor.dispose(); + + } + + public void updateBuildOptionsUserExtensions (String oldFvName, String newFvName) { + if (getfpdBuildOpts().getUserExtensionsList() == null) { + return; + } ListIterator li = getfpdBuildOpts().getUserExtensionsList().listIterator(); while (li.hasNext()) { UserExtensionsDocument.UserExtensions ues = li.next(); @@ -1676,18 +1821,8 @@ public class FpdFileContents { XmlCursor cursor = ues.newCursor(); cursor.toFirstChild(); String elementName = cursor.getTextValue(); - if (elementName.equals(fvName)) { - cursor.toNextSibling(new QName("", "IncludeModules")); - if (cursor.toFirstChild()) { - int i = 0; - do { - saa[i][0] = cursor.getAttributeText(new QName("ModuleGuid")); - saa[i][1] = cursor.getAttributeText(new QName("BaseName")); - ++i; - }while (cursor.toNextSibling()); - } - cursor.dispose(); - return; + if (elementName.equals(oldFvName)) { + cursor.setTextValue(newFvName); } cursor.dispose(); } @@ -2508,6 +2643,64 @@ public class FpdFileContents { } } + public void getFvImagesFvImageFvImageNames (Vector vImageNames) { + FvImagesDocument.FvImages fis = getfpdFlash().getFvImages(); + if (fis == null || fis.getFvImageList() == null) { + return; + } + + ListIterator li = fis.getFvImageList().listIterator(); + while (li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = li.next(); + if (fi.getType().toString().equals("ImageName")) { + vImageNames.addAll(fi.getFvImageNamesList()); + return; + } + } + } + + public void addFvImageFvImageNames (String[] fvNames) { + FvImagesDocument.FvImages fis = getfpdFlash().getFvImages(); + if (fis == null || fis.getFvImageList() == null) { + genFvImagesFvImage (fvNames, "ImageName", null); + return; + } + + ListIterator li = fis.getFvImageList().listIterator(); + while (li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = li.next(); + if (fi.getType().toString().equals("ImageName")) { + addFvImageNamesInFvImage (fi, fvNames); + return; + } + } + genFvImagesFvImage (fvNames, "ImageName", null); + } + + public void addFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String[] fvNames) { + + for (int i = 0; i < fvNames.length; ++i) { + fi.addFvImageNames(fvNames[i]); + } + } + + public void addFvImageNamesInFvImage (int i, String[] fvNames) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + addFvImageNamesInFvImage(fi, fvNames); + } + cursor.dispose(); + } + public void genFvImagesFvImage(String[] names, String types, Map options) { FvImagesDocument.FvImages fis = null; @@ -2567,6 +2760,87 @@ public class FpdFileContents { cursor.dispose(); } + /** + * @param oldFvName + * @param newFvName The New FV Name. If null, remove the old FvImageNames entry. + */ + public void updateFvImageNameAll (String oldFvName, String newFvName) { + if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) { + return; + } + ListIterator li = getfpdFlash().getFvImages().getFvImageList().listIterator(); + while (li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = li.next(); + updateFvImageNamesInFvImage (fi, oldFvName, newFvName); + if (fi.getFvImageNamesList().size() == 0) { + li.remove(); + } + } + } + + public void updateFvImageNamesInFvImage (int i, String oldFvName, String newFvName) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + updateFvImageNamesInFvImage (fi, oldFvName, newFvName); + } + cursor.dispose(); + } + /** + * @param fi + * @param oldFvName The FV Name to be replaced. + * @param newFvName The New FV Name. If null, remove the old FvImageNames entry. + */ + public void updateFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String oldFvName, String newFvName) { + QName qFvImageNames = new QName(xmlNs, "FvImageNames"); + XmlCursor cursor = fi.newCursor(); + + if (cursor.toChild(qFvImageNames)) { + do { + String xmlValue = cursor.getTextValue(); + if (xmlValue.equals(oldFvName)){ + if (newFvName != null) { + cursor.setTextValue(newFvName); + } + else { + cursor.removeXml(); + } + } + }while (cursor.toNextSibling(qFvImageNames)); + } + + cursor.dispose(); + } + + /**update the Type attribute of ith FvImage with new type. + * @param i + * @param type + */ + public void updateFvImagesFvImageType (int i, String type) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + fi.setType(FvImageTypes.Enum.forString(type)); + } + cursor.dispose(); + } + public void updateFvImagesFvImage(int i, String[] names, String types, Map options){ XmlObject o = getfpdFlash().getFvImages(); @@ -2607,18 +2881,50 @@ public class FpdFileContents { cursor.dispose(); } - public int getFvImagesFvImageCount() { + public int getFvImagesFvImageCount(String type) { if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) { return 0; } - return getfpdFlash().getFvImages().getFvImageList().size(); + List l = getfpdFlash().getFvImages().getFvImageList(); + ListIterator li = l.listIterator(); + int i = 0; + while(li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next(); + if (!fi.getType().toString().equals(type) && !type.equals("ALL")) { + continue; + } + + ++i; + } + + return i; } - /**Only Get Fv image setting - name and type. + public Vector getFvImagesFvImageWithName (String fvName, String type) { + Vector vFvImage = new Vector(); + if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) { + return vFvImage; + } + List l = getfpdFlash().getFvImages().getFvImageList(); + ListIterator li = l.listIterator(); + while(li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next(); + if (!fi.getType().toString().equals(type) && !type.equals("ALL")) { + continue; + } + if (fi.getFvImageNamesList().contains(fvName)) { + vFvImage.add(fi); + } + } + + return vFvImage; + } + /** * @param saa + * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components. */ - public void getFvImagesFvImages(String[][] saa) { + public void getFvImagesFvImages(String[][] saa, String type) { if (getfpdFlash().getFvImages() == null) { return; @@ -2631,6 +2937,9 @@ public class FpdFileContents { int i = 0; while(li.hasNext()) { FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next(); + if (!fi.getType().toString().equals(type) && !type.equals("ALL")) { + continue; + } // // get FvImageNames array, space separated // @@ -2649,6 +2958,224 @@ public class FpdFileContents { } } + public void removeFvImageNameValue (int i, String attributeName) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + removeFvImageNameValue (fi, attributeName); + } + cursor.dispose(); + } + /**Remove from fi the attribute pair with attributeName in FvImageOptions. + * @param fi + * @param attributeName + */ + public void removeFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String attributeName) { + if (fi.getFvImageOptions() != null && fi.getFvImageOptions().getNameValueList() != null) { + ListIterator li = fi.getFvImageOptions().getNameValueList().listIterator(); + while (li.hasNext()) { + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next(); + if (nv.getName().equals(attributeName)) { + li.remove(); + } + } + } + } + + public void removeTypedNamedFvImageNameValue (String fvName, String type, String optName) { + Vector vFvImage = getFvImagesFvImageWithName(fvName, type); + for (int i = 0; i < vFvImage.size(); ++i) { + FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i); + removeFvImageNameValue (fi, optName); + } + } + + /**Add name-value pair to FvImage element with type. + * @param fvName FV name to add name-value pair. + * @param type FvImage attribute. + * @param name + * @param value + */ + public void setTypedNamedFvImageNameValue (String fvName, String type, String name, String value) { + boolean fvImageExists = false; + if (getfpdFlash().getFvImages() == null) { + return; + } + List l = getfpdFlash().getFvImages().getFvImageList(); + if (l == null) { + return; + } + ListIterator li = l.listIterator(); + while(li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next(); + if (!fi.getType().toString().equals(type) && !type.equals("ALL")) { + continue; + } + if (!fi.getFvImageNamesList().contains(fvName)) { + continue; + } + fvImageExists = true; + setFvImagesFvImageNameValue (fi, name, value, null); + } + + if (!fvImageExists) { + HashMap map = new HashMap(); + map.put(name, value); + genFvImagesFvImage(new String[]{fvName}, type, map); + } + } + + /**Add to all FvImage elements with type, the name-value pair. + * @param type + * @param name + * @param value + */ + public void setTypedFvImageNameValue (String type, String name, String value) { + if (getfpdFlash().getFvImages() == null) { + return; + } + List l = getfpdFlash().getFvImages().getFvImageList(); + if (l == null) { + return; + } + ListIterator li = l.listIterator(); + while(li.hasNext()) { + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next(); + if (!fi.getType().toString().equals(type) && !type.equals("ALL")) { + continue; + } + setFvImagesFvImageNameValue (fi, name, value, null); + } + + } + + public void setFvImagesFvImageNameValue (int i, String name, String value) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + setFvImagesFvImageNameValue (fi, name, value, null); + } + cursor.dispose(); + } + + /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before. + * @param fi + * @param name + * @param value + * @param newName + */ + public void setFvImagesFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String name, String value, String newName) { + if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) { + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.addNewFvImageOptions().addNewNameValue(); + nv.setName(name); + nv.setValue(value); + if (newName != null) { + nv.setName(newName); + } + return; + } + + XmlCursor cursor = fi.getFvImageOptions().newCursor(); + if (cursor.toFirstChild()) { + do { + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = (FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue)cursor.getObject(); + if (nv.getName().equals(name)) { + nv.setValue(value); + if (newName != null) { + nv.setName(newName); + } + cursor.dispose(); + return; + } + }while (cursor.toNextSibling()); + } + + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.getFvImageOptions().addNewNameValue(); + nv.setName(name); + nv.setValue(value); + if (newName != null) { + nv.setName(newName); + } + cursor.dispose(); + } + + public void getFvImagesFvImageOptions (String fvName, Map m) { + Vector vFvImage = getFvImagesFvImageWithName (fvName, "Options"); + for (int i = 0; i < vFvImage.size(); ++i) { + FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i); + if (fi == null || fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) { + continue; + } + + ListIterator li = fi.getFvImageOptions() + .getNameValueList() + .listIterator(); + while (li.hasNext()) { + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next(); + m.put(nv.getName(), nv.getValue()); + } + } + } + + public int getFvImagePosInFvImages (String fvNameList, String type) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return -1; + } + + int pos = -1; + String[] fvNameArray = fvNameList.trim().split(" "); + Vector vFvNames = new Vector(); + + + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + do { + pos++; + vFvNames.removeAllElements(); + for (int i = 0; i < fvNameArray.length; ++i) { + vFvNames.add(fvNameArray[i]); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + if (!fi.getType().toString().equals(type)) { + continue; + } + if (fi.getFvImageNamesList() == null || fi.getFvImageNamesList().size() != vFvNames.size()) { + continue; + } + ListIterator li = fi.getFvImageNamesList().listIterator(); + while (li.hasNext()) { + String name = li.next(); + vFvNames.remove(name); + } + if (vFvNames.size() == 0) { + cursor.dispose(); + return pos; + } + + }while (cursor.toNextSibling(qFvImage)); + + } + cursor.dispose(); + return -1; + } /**Get FvImage Options for FvImage i * @param i the ith FvImage */ @@ -2665,6 +3192,7 @@ public class FpdFileContents { } FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){ + cursor.dispose(); return; } ListIterator li = fi.getFvImageOptions().getNameValueList().listIterator(); @@ -2673,6 +3201,7 @@ public class FpdFileContents { m.put(nv.getName(), nv.getValue()); } } + cursor.dispose(); } /**