2 Java class FpdFileContents is used to parse fpd xml file.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 package org
.tianocore
.frameworkwizard
.platform
.ui
;
16 import java
.io
.IOException
;
17 import java
.math
.BigInteger
;
18 import java
.util
.ArrayList
;
19 import java
.util
.HashMap
;
20 import java
.util
.Iterator
;
21 import java
.util
.LinkedHashMap
;
22 import java
.util
.List
;
23 import java
.util
.ListIterator
;
26 import java
.util
.Vector
;
28 import javax
.xml
.namespace
.QName
;
30 import org
.apache
.xmlbeans
.XmlCursor
;
31 import org
.apache
.xmlbeans
.XmlObject
;
32 import org
.apache
.xmlbeans
.XmlOptions
;
33 import org
.tianocore
.AntTaskDocument
;
34 import org
.tianocore
.BuildOptionsDocument
;
35 import org
.tianocore
.DynamicPcdBuildDefinitionsDocument
;
36 import org
.tianocore
.EfiSectionType
;
37 import org
.tianocore
.FlashDefinitionFileDocument
;
38 import org
.tianocore
.FlashDocument
;
39 import org
.tianocore
.FrameworkModulesDocument
;
40 import org
.tianocore
.IntermediateOutputType
;
41 import org
.tianocore
.LibrariesDocument
;
42 import org
.tianocore
.ModuleSADocument
;
43 import org
.tianocore
.ModuleSaBuildOptionsDocument
;
44 import org
.tianocore
.ModuleSurfaceAreaDocument
;
45 import org
.tianocore
.OptionDocument
;
46 import org
.tianocore
.OptionsDocument
;
47 import org
.tianocore
.PcdBuildDefinitionDocument
;
48 import org
.tianocore
.PcdCodedDocument
;
49 import org
.tianocore
.PcdDataTypes
;
50 import org
.tianocore
.PcdDeclarationsDocument
;
51 import org
.tianocore
.PcdItemTypes
;
52 import org
.tianocore
.PlatformDefinitionsDocument
;
53 import org
.tianocore
.PlatformSurfaceAreaDocument
;
54 import org
.tianocore
.FvImageTypes
;
55 import org
.tianocore
.FvImagesDocument
;
56 import org
.tianocore
.LicenseDocument
;
57 import org
.tianocore
.PlatformHeaderDocument
;
58 import org
.tianocore
.SkuInfoDocument
;
59 import org
.tianocore
.UserDefinedAntTasksDocument
;
60 import org
.tianocore
.UserExtensionsDocument
;
61 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.WorkspaceProfile
;
62 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.SurfaceAreaQuery
;
63 import org
.tianocore
.frameworkwizard
.module
.Identifications
.ModuleIdentification
;
64 import org
.tianocore
.frameworkwizard
.packaging
.PackageIdentification
;
67 This class processes fpd file contents such as add remove xml elements.
68 @since PackageEditor 1.0
70 public class FpdFileContents
{
72 static final String xmlNs
= "http://www.TianoCore.org/2006/Edk2.0";
73 static final String regExpNewLineAndSpaces
= "((\n)|(\r\n)|(\r)|(\u0085)|(\u2028)|(\u2029))(\\s)*";
75 private PlatformSurfaceAreaDocument fpdd
= null;
77 private PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpdRoot
= null;
79 private PlatformHeaderDocument
.PlatformHeader fpdHdr
= null;
81 private PlatformDefinitionsDocument
.PlatformDefinitions fpdPlatformDefs
= null;
83 private FlashDocument
.Flash fpdFlash
= null;
85 private BuildOptionsDocument
.BuildOptions fpdBuildOpts
= null;
87 private FrameworkModulesDocument
.FrameworkModules fpdFrameworkModules
= null;
89 private DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs
= null;
91 private HashMap
<String
, ArrayList
<String
>> dynPcdMap
= null;
93 private HashMap
<String
, String
> defaultPcdValue
= new HashMap
<String
, String
>();
95 private String
itemType (String pcdInfo
) {
97 return pcdInfo
.substring(pcdInfo
.lastIndexOf(" ") + 1);
101 * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings.
103 public void initDynPcdMap() {
104 if (dynPcdMap
== null) {
105 dynPcdMap
= new HashMap
<String
, ArrayList
<String
>>();
106 List
<ModuleSADocument
.ModuleSA
> l
= getfpdFrameworkModules().getModuleSAList();
108 removeElement(getfpdFrameworkModules());
109 fpdFrameworkModules
= null;
112 ListIterator
<ModuleSADocument
.ModuleSA
> li
= l
.listIterator();
113 while (li
.hasNext()) {
114 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
115 if (moduleSa
.getPcdBuildDefinition() == null || moduleSa
.getPcdBuildDefinition().getPcdDataList() == null) {
118 String ModuleInfo
= moduleSa
.getModuleGuid() + " " + moduleSa
.getModuleVersion() +
119 " " + moduleSa
.getPackageGuid() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
120 List
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lp
= moduleSa
.getPcdBuildDefinition().getPcdDataList();
121 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lpi
= lp
.listIterator();
122 while (lpi
.hasNext()) {
123 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= lpi
.next();
124 String pcdKey
= pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName();
125 if (dynPcdMap
.get(pcdKey
) == null) {
126 ArrayList
<String
> al
= new ArrayList
<String
>();
127 al
.add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
128 dynPcdMap
.put(pcdKey
, al
);
131 dynPcdMap
.get(pcdKey
).add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
138 public ArrayList
<String
> getDynPcdMapValue(String key
) {
139 return dynPcdMap
.get(key
);
142 Constructor to create a new spd file
144 public FpdFileContents() {
146 fpdd
= PlatformSurfaceAreaDocument
.Factory
.newInstance();
147 fpdRoot
= fpdd
.addNewPlatformSurfaceArea();
152 Constructor for existing document object
155 public FpdFileContents(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
157 fpdHdr
= fpdRoot
.getPlatformHeader();
158 fpdPlatformDefs
= fpdRoot
.getPlatformDefinitions();
159 fpdBuildOpts
= fpdRoot
.getBuildOptions();
160 fpdFrameworkModules
= fpdRoot
.getFrameworkModules();
161 fpdDynPcdBuildDefs
= fpdRoot
.getDynamicPcdBuildDefinitions();
162 fpdFlash
= fpdRoot
.getFlash();
166 Constructor based on an existing spd file
168 @param f Existing spd file
170 public FpdFileContents(File f
) {
172 fpdd
= PlatformSurfaceAreaDocument
.Factory
.parse(f
);
173 fpdRoot
= fpdd
.getPlatformSurfaceArea();
174 } catch (Exception e
) {
175 System
.out
.println(e
.toString());
179 public DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
getfpdDynPcdBuildDefs() {
180 if (fpdDynPcdBuildDefs
== null){
181 fpdDynPcdBuildDefs
= fpdRoot
.addNewDynamicPcdBuildDefinitions();
183 return fpdDynPcdBuildDefs
;
186 public FrameworkModulesDocument
.FrameworkModules
getfpdFrameworkModules() {
187 if (fpdFrameworkModules
== null){
188 fpdFrameworkModules
= fpdRoot
.addNewFrameworkModules();
190 return fpdFrameworkModules
;
193 public void getFrameworkModuleSAByFvBinding (String fvName
, Vector
<String
[]> vGuid
) {
194 if (getFrameworkModulesCount() == 0){
198 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
199 while(li
.hasNext()) {
200 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
201 if (moduleSa
.getModuleSaBuildOptions() == null) {
204 String fvBinding
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
205 if (fvBinding
== null) {
209 String
[] fvNames
= fvBinding
.split(" ");
210 for (int i
= 0; i
< fvNames
.length
; ++i
) {
212 // BugBug : underscore "_" should not be replaced!!!
213 // But Fv name FVMAIN from fdf file not consist with FV_MAIN in fpd file.
215 if (fvNames
[i
].equals(fvName
) || fvNames
[i
].replaceAll("_", "").equals(fvName
)) {
216 String
[] sa
= new String
[] {moduleSa
.getModuleGuid(), moduleSa
.getModuleVersion(),
217 moduleSa
.getPackageGuid(), moduleSa
.getPackageVersion(),
218 listToString(moduleSa
.getSupArchList())};
226 public int getFrameworkModulesCount() {
227 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
228 removeElement(getfpdFrameworkModules());
229 fpdFrameworkModules
= null;
232 return getfpdFrameworkModules().getModuleSAList().size();
235 public void getFrameworkModulesInfo(String
[][] saa
) {
236 if (getFrameworkModulesCount() == 0){
240 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
242 while(li
.hasNext()) {
243 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
244 saa
[i
][0] = moduleSa
.getModuleGuid();
245 saa
[i
][1] = moduleSa
.getModuleVersion();
247 saa
[i
][2] = moduleSa
.getPackageGuid();
248 saa
[i
][3] = moduleSa
.getPackageVersion();
249 saa
[i
][4] = listToString(moduleSa
.getSupArchList());
254 public void getFrameworkModuleInfo(int i
, String
[] sa
) {
255 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
259 sa
[0] = msa
.getModuleGuid();
260 sa
[1] = msa
.getModuleVersion();
261 sa
[2] = msa
.getPackageGuid();
262 sa
[3] = msa
.getPackageVersion();
263 sa
[4] = listToString(msa
.getSupArchList());
266 public ModuleSADocument
.ModuleSA
getModuleSA(String key
) {
268 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0) {
269 removeElement(getfpdFrameworkModules());
270 fpdFrameworkModules
= null;
273 String
[] s
= key
.split(" ");
274 String archsInKey
= "";
276 for (int i
= 4; i
< s
.length
; ++i
) {
280 archsInKey
= archsInKey
.trim();
283 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
284 while(li
.hasNext()) {
285 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
286 if (moduleSa
.getModuleGuid().equalsIgnoreCase(s
[0]) && moduleSa
.getPackageGuid().equalsIgnoreCase(s
[2])) {
287 if (moduleSa
.getModuleVersion() != null) {
288 if (!moduleSa
.getModuleVersion().equals(s
[1])) {
292 if (moduleSa
.getPackageVersion() != null) {
293 if (!moduleSa
.getPackageVersion().equals(s
[3])) {
297 //ToDo add arch check .
298 if (moduleSa
.getSupArchList() != null) {
299 if (listToString(moduleSa
.getSupArchList()).equals(archsInKey
)) {
304 if (archsInKey
.length() == 0) {
313 private ModuleSADocument
.ModuleSA
getModuleSA(int i
) {
314 ModuleSADocument
.ModuleSA moduleSa
= null;
315 if (fpdRoot
.getFrameworkModules() == null) {
318 XmlCursor cursor
= fpdRoot
.getFrameworkModules().newCursor();
319 if (cursor
.toFirstChild()) {
320 for (int j
= 0; j
< i
; ++j
) {
321 cursor
.toNextSibling();
323 moduleSa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
329 public void removeModuleSA(int i
) {
330 XmlObject o
= fpdRoot
.getFrameworkModules();
335 XmlCursor cursor
= o
.newCursor();
336 if (cursor
.toFirstChild()) {
337 for (int j
= 0; j
< i
; ++j
) {
338 cursor
.toNextSibling();
341 // remove pcd from dynPcdMap, if DynamicPcdBuildData exists, remove them too.
343 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
344 String moduleInfo
= moduleSa
.getModuleGuid() + " " + moduleSa
.getModuleVersion() + " " +
345 moduleSa
.getPackageGuid()+ " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
346 PcdBuildDefinitionDocument
.PcdBuildDefinition pcdBuildDef
= moduleSa
.getPcdBuildDefinition();
347 if (pcdBuildDef
!= null && pcdBuildDef
.getPcdDataList() != null) {
348 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> li
= pcdBuildDef
.getPcdDataList().listIterator();
349 while(li
.hasNext()) {
350 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
351 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(), moduleInfo
);
356 while (cursor
.hasPrevToken()) {
357 cursor
.toPrevToken();
358 if (!cursor
.isText()) {
361 String s
= cursor
.getTextValue();
362 if (s
.matches(regExpNewLineAndSpaces
)) {
367 if (cursor
.isComment()) {
373 if (getFrameworkModulesCount() == 0) {
381 public boolean adjustPcd (int seqModuleSa
) throws Exception
{
382 boolean dataModified
= false;
383 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(seqModuleSa
);
384 int pcdCount
= getPcdDataCount(seqModuleSa
);
385 String
[][] saaModuleSaPcd
= new String
[pcdCount
][7];
386 getPcdData(seqModuleSa
, saaModuleSaPcd
);
387 String mg
= moduleSa
.getModuleGuid();
388 String mv
= moduleSa
.getModuleVersion();
389 String pg
= moduleSa
.getPackageGuid();
390 String pv
= moduleSa
.getPackageVersion();
391 String arch
= listToString(moduleSa
.getSupArchList());
393 // delete pcd in ModuleSA but not in MSA files any longer.
395 String moduleKey
= mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
;
396 int libCount
= getLibraryInstancesCount(moduleKey
);
397 String
[][] saaLib
= new String
[libCount
][5];
398 getLibraryInstances(moduleKey
, saaLib
);
399 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(moduleKey
);
400 Vector
<ModuleIdentification
> vMi
= new Vector
<ModuleIdentification
>();
402 // create vector for module & library instance MIs.
405 for (int j
= 0; j
< saaLib
.length
; ++j
) {
406 String libKey
= saaLib
[j
][1] + " " + saaLib
[j
][2] + " " + saaLib
[j
][3] + " " + saaLib
[j
][4];
407 ModuleIdentification libMi
= WorkspaceProfile
.getModuleId(libKey
);
411 nextPcd
:for (int i
= 0; i
< saaModuleSaPcd
.length
; ++i
) {
413 for (int j
= 0; j
< vMi
.size(); ++j
) {
414 ModuleIdentification nextMi
= vMi
.get(j
);
415 if (WorkspaceProfile
.pcdInMsa(saaModuleSaPcd
[i
][0], saaModuleSaPcd
[i
][1], nextMi
)) {
419 removePcdData(seqModuleSa
, saaModuleSaPcd
[i
][0], saaModuleSaPcd
[i
][1]);
423 // add new Pcd from MSA file to ModuleSA.
425 for (int i
= 0; i
< vMi
.size(); ++i
) {
426 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
) WorkspaceProfile
427 .getModuleXmlObject(vMi
429 if (msa
.getPcdCoded() == null || msa
.getPcdCoded().getPcdEntryList() == null) {
432 ListIterator li
= msa
.getPcdCoded().getPcdEntryList().listIterator();
433 msaPcdIter
:while (li
.hasNext()) {
434 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
) li
.next();
435 ArrayList
<String
> al
= getDynPcdMapValue(msaPcd
.getCName() + " " + msaPcd
.getTokenSpaceGuidCName());
437 for (int j
= 0; j
< al
.size(); ++j
) {
438 if (al
.get(j
).contains(moduleKey
)) {
444 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, vMi
.get(i
));
445 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
446 if (spdPcd
== null) {
450 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module "
454 // AddItem to ModuleSA PcdBuildDefinitions
456 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue()
457 : msaPcd
.getDefaultValue();
459 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(),
460 msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType() + "", defaultVal
, moduleSa
);
469 private void maintainDynPcdMap(String pcdKey
, String moduleInfo
) {
471 ArrayList
<String
> al
= dynPcdMap
.get(pcdKey
);
475 String
[] s
= moduleInfo
.split(" ");
476 for(int i
= 0; i
< al
.size(); ++i
){
477 String consumer
= al
.get(i
);
478 if (consumer
.contains(s
[0]) && consumer
.contains(s
[2])){
479 String
[] consumerPart
= consumer
.split(" ");
480 if (!consumerPart
[4].equals(s
[4])) {
488 if (al
.size() == 0) {
489 defaultPcdValue
.remove(pcdKey
);
490 dynPcdMap
.remove(pcdKey
);
491 String
[] s1
= pcdKey
.split(" ");
492 removeDynamicPcdBuildData(s1
[0], s1
[1]);
497 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
499 public int getPcdDataCount (int i
){
500 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
502 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
505 return msa
.getPcdBuildDefinition().getPcdDataList().size();
509 public void getPcdData (int i
, String
[][] saa
) {
510 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
512 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
515 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
>li
= msa
.getPcdBuildDefinition().getPcdDataList().listIterator();
516 for (int k
= 0; k
< saa
.length
; ++k
) {
517 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
518 saa
[k
][0] = pcdData
.getCName();
519 saa
[k
][1] = pcdData
.getTokenSpaceGuidCName();
520 saa
[k
][2] = pcdData
.getItemType()+"";
521 saa
[k
][3] = pcdData
.getToken().toString();
522 saa
[k
][4] = pcdData
.getMaxDatumSize()+"";
523 saa
[k
][5] = pcdData
.getDatumType()+"";
524 saa
[k
][6] = pcdData
.getValue();
529 public void removePcdData (int seqModuleSa
, String cName
, String tsGuid
) {
530 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(seqModuleSa
);
531 if (moduleSa
== null || moduleSa
.getPcdBuildDefinition() == null){
535 String mg
= moduleSa
.getModuleGuid();
536 String mv
= moduleSa
.getModuleVersion();
537 String pg
= moduleSa
.getPackageGuid();
538 String pv
= moduleSa
.getPackageVersion();
539 String arch
= listToString(moduleSa
.getSupArchList());
540 String moduleKey
= mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
;
542 XmlCursor cursor
= moduleSa
.getPcdBuildDefinition().newCursor();
543 if (cursor
.toFirstChild()){
546 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
)cursor
.getObject();
547 if (pcdData
.getCName().equals(cName
) && pcdData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
548 maintainDynPcdMap(cName
+ " " + tsGuid
, moduleKey
);
549 if (getPcdDataCount(seqModuleSa
) == 1) {
556 while(cursor
.toNextSibling());
562 public void updatePcdData (String key
, String cName
, String tsGuid
, String itemType
, String maxSize
, String value
){
563 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(key
);
564 if (moduleSa
== null || moduleSa
.getPcdBuildDefinition() == null){
568 XmlCursor cursor
= moduleSa
.getPcdBuildDefinition().newCursor();
569 if (cursor
.toFirstChild()){
571 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
)cursor
.getObject();
572 if (pcdData
.getCName().equals(cName
) && pcdData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
574 // change item type while not updating dynPcdData????
576 pcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
577 if(pcdData
.getDatumType().equals("VOID*")) {
578 pcdData
.setMaxDatumSize(new Integer(maxSize
));
580 pcdData
.setValue(value
);
581 defaultPcdValue
.put(cName
+ " " + tsGuid
, value
);
585 while(cursor
.toNextSibling());
590 /**Get original Pcd info from MSA & SPD files.
591 * @param mi ModuleIdentification from which MSA & SPD come
592 * @param cName PCD cName
593 * @param sa Results: HelpText, Original item type.
596 public boolean getPcdBuildDataInfo(ModuleIdentification mi
, String cName
, String tsGuid
, String
[] sa
) throws Exception
{
599 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(mi
);
600 if (msa
.getPcdCoded() == null) {
604 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
605 m
.put("ModuleSurfaceArea", msa
);
606 SurfaceAreaQuery
.setDoc(m
);
607 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, mi
);
609 // First look through MSA pcd entries.
611 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
612 ListIterator li
= l
.listIterator();
613 while(li
.hasNext()) {
614 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
615 if (!msaPcd
.getCName().equals(cName
)) {
618 if (!msaPcd
.getTokenSpaceGuidCName().equals(tsGuid
)) {
621 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
622 if (spdPcd
== null) {
626 throw new PcdDeclNotFound(mi
.getName() + " " + msaPcd
.getCName());
629 // Get Pcd help text and original item type.
631 sa
[0] = spdPcd
.getHelpText() + msaPcd
.getHelpText();
632 sa
[1] = msaPcd
.getPcdItemType()+"";
633 sa
[2] = msa
.getModuleDefinitions().getBinaryModule()+"";
647 private boolean multiSourcePcd (String cName
, String tsGuidCName
, String moduleKey
) {
648 int libCount
= getLibraryInstancesCount(moduleKey
);
649 String
[][] saaLib
= new String
[libCount
][5];
650 getLibraryInstances(moduleKey
, saaLib
);
651 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(moduleKey
);
652 Vector
<ModuleIdentification
> vMi
= new Vector
<ModuleIdentification
>();
654 // create vector for module & library instance MIs.
657 for (int j
= 0; j
< saaLib
.length
; ++j
) {
658 String libKey
= saaLib
[j
][1] + " " + saaLib
[j
][2] + " " + saaLib
[j
][3] + " " + saaLib
[j
][4];
659 ModuleIdentification libMi
= WorkspaceProfile
.getModuleId(libKey
);
663 int pcdSourceCount
= 0;
664 for (int i
= 0; i
< vMi
.size(); ++i
) {
665 if (WorkspaceProfile
.pcdInMsa(cName
, tsGuidCName
, vMi
.get(i
))) {
670 if (pcdSourceCount
< 2) {
679 /**Remove PCDBuildDefinition entries from ModuleSA
680 * @param moduleKey identifier of ModuleSA.
681 * @param consumer where these entries come from.
683 public void removePcdData(String moduleKey
, ModuleIdentification consumer
) {
685 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(consumer
);
686 if (msa
.getPcdCoded() == null) {
690 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
691 ListIterator li
= l
.listIterator();
693 while(li
.hasNext()) {
694 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
695 ModuleSADocument
.ModuleSA moduleSA
= getModuleSA(moduleKey
);
696 if (moduleSA
.getPcdBuildDefinition() != null) {
697 XmlCursor cursor
= moduleSA
.getPcdBuildDefinition().newCursor();
699 if (cursor
.toFirstChild()) {
701 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
) cursor
703 String cName
= msaPcd
.getCName();
704 String tsGuidCName
= msaPcd
.getTokenSpaceGuidCName();
705 if (cName
.equals(pcdData
.getCName())
706 && tsGuidCName
.equals(pcdData
.getTokenSpaceGuidCName()) && !multiSourcePcd(cName
, tsGuidCName
, moduleKey
)) {
708 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(),
713 } while (cursor
.toNextSibling());
717 if (moduleSA
.getPcdBuildDefinition().getPcdDataList().size() == 0) {
726 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
728 public int getLibraryInstancesCount(String key
) {
729 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
730 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
733 return msa
.getLibraries().getInstanceList().size();
736 public void getLibraryInstances(String key
, String
[][] saa
){
737 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
738 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
742 ListIterator
<LibrariesDocument
.Libraries
.Instance
> li
= msa
.getLibraries().getInstanceList().listIterator();
743 for (int i
= 0; i
< saa
.length
; ++i
) {
744 LibrariesDocument
.Libraries
.Instance instance
= li
.next();
745 saa
[i
][1] = instance
.getModuleGuid();
746 saa
[i
][2] = instance
.getModuleVersion();
747 saa
[i
][3] = instance
.getPackageGuid();
748 saa
[i
][4] = instance
.getPackageVersion();
752 public void removeLibraryInstance(String key
, int i
) {
753 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
754 if (msa
== null || msa
.getLibraries() == null){
758 XmlCursor cursor
= msa
.getLibraries().newCursor();
759 if (cursor
.toFirstChild()) {
760 for (int j
= 0; j
< i
; ++j
) {
761 cursor
.toNextSibling();
764 while (cursor
.hasPrevToken()) {
765 cursor
.toPrevToken();
766 if (!cursor
.isText()) {
769 String s
= cursor
.getTextValue();
770 if (s
.matches(regExpNewLineAndSpaces
)) {
775 if (cursor
.isComment()) {
780 if (getLibraryInstancesCount(key
) == 0) {
789 public void genLibraryInstance(ModuleIdentification libMi
, String key
) {
790 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
792 msa
= getfpdFrameworkModules().addNewModuleSA();
794 LibrariesDocument
.Libraries libs
= msa
.getLibraries();
796 libs
= msa
.addNewLibraries();
799 String mn
= libMi
.getName();
800 String mg
= libMi
.getGuid();
801 String mv
= libMi
.getVersion();
802 String pn
= libMi
.getPackageId().getName();
803 String pg
= libMi
.getPackageId().getGuid();
804 String pv
= libMi
.getPackageId().getVersion();
805 LibrariesDocument
.Libraries
.Instance instance
= libs
.addNewInstance();
806 XmlCursor cursor
= instance
.newCursor();
808 String comment
= "Pkg: " + pn
+ " Mod: " + mn
809 + " Path: " + libMi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
810 cursor
.insertComment(comment
);
819 instance
.setModuleGuid(mg
);
820 instance
.setModuleVersion(mv
);
821 instance
.setPackageGuid(pg
);
822 instance
.setPackageVersion(pv
);
826 public String
getFvBinding(String moduleKey
){
827 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
828 return getFvBinding (moduleSa
);
831 public String
getFvBinding (ModuleSADocument
.ModuleSA moduleSa
) {
832 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null) {
835 return moduleSa
.getModuleSaBuildOptions().getFvBinding();
838 public void setFvBinding(ModuleSADocument
.ModuleSA moduleSa
, String fvBinding
) {
839 if (moduleSa
== null ) {
842 if (fvBinding
== null || fvBinding
.length() == 0) {
843 if(moduleSa
.getModuleSaBuildOptions() != null){
844 moduleSa
.getModuleSaBuildOptions().unsetFvBinding();
848 if(moduleSa
.getModuleSaBuildOptions() == null){
849 moduleSa
.addNewModuleSaBuildOptions().setFvBinding(fvBinding
);
852 moduleSa
.getModuleSaBuildOptions().setFvBinding(fvBinding
);
856 public void setFvBinding(String moduleKey
, String fvBinding
){
857 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
858 setFvBinding (moduleSa
, fvBinding
);
861 private int fvBindingForModuleSA (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
862 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
866 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
867 String
[] fvNamesArray
= fvNameList
.split(" ");
869 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
870 if (fvNamesArray
[i
].equals(fvName
)) {
878 public void removeFvBinding (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
879 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
883 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
884 String
[] fvNamesArray
= fvNameList
.split(" ");
886 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
887 if (fvNamesArray
[i
].equals(fvName
)) {
892 // jump over where the input fvName occurs in the original Fv list.
893 if (occursAt
!= -1) {
894 String newFvNameList
= " ";
895 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
899 newFvNameList
+= fvNamesArray
[i
];
901 setFvBinding (moduleSa
, newFvNameList
.trim());
907 * @param fvName The FV name that to be removed from FvBinding List.
909 public void removeFvBindingAll (String fvName
) {
910 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
911 removeElement(getfpdFrameworkModules());
912 fpdFrameworkModules
= null;
916 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
917 while (li
.hasNext()) {
918 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
919 removeFvBinding (moduleSa
, fvName
);
923 public void appendFvBindingAll (String fvName
) {
924 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
925 removeElement(getfpdFrameworkModules());
926 fpdFrameworkModules
= null;
930 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
931 while (li
.hasNext()) {
932 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
933 appendFvBinding (moduleSa
, fvName
);
937 public void appendFvBindingFor (String oldFvName
, String newFvName
) {
938 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
939 removeElement(getfpdFrameworkModules());
940 fpdFrameworkModules
= null;
944 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
945 while (li
.hasNext()) {
946 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
947 String fvBinding
= getFvBinding (moduleSa
);
948 if (fvBinding
!= null && fvBindingForModuleSA (moduleSa
, oldFvName
) >= 0) {
949 appendFvBinding (moduleSa
, newFvName
);
954 public void appendFvBinding (String moduleKey
, String fvName
) {
955 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
956 appendFvBinding (moduleSa
, fvName
);
959 public void appendFvBinding (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
960 if (moduleSa
== null) {
964 if (moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
965 setFvBinding(moduleSa
, fvName
);
969 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
970 String newFvNameList
= fvNameList
+ " " + fvName
;
971 setFvBinding (moduleSa
, newFvNameList
.trim());
974 public void updateFvBindingInModuleSA (String moduleKey
, String fvName
) {
976 appendFvBinding (moduleKey
, fvName
);
979 public String
getFfsFileNameGuid(String moduleKey
){
980 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
981 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null) {
984 return moduleSa
.getModuleSaBuildOptions().getFfsFileNameGuid();
987 public void setFfsFileNameGuid(String moduleKey
, String fileGuid
){
988 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
992 if(msa
.getModuleSaBuildOptions() == null){
993 msa
.addNewModuleSaBuildOptions();
996 ModuleSaBuildOptionsDocument
.ModuleSaBuildOptions msaBuildOpts
= msa
.getModuleSaBuildOptions();
997 if (fileGuid
!= null) {
998 msaBuildOpts
.setFfsFileNameGuid(fileGuid
);
1001 XmlCursor cursor
= msaBuildOpts
.newCursor();
1002 if (cursor
.toChild(xmlNs
, "FfsFileNameGuid")) {
1010 public String
getFfsFormatKey(String moduleKey
){
1011 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1012 if (msa
== null || msa
.getModuleSaBuildOptions() == null) {
1015 return msa
.getModuleSaBuildOptions().getFfsFormatKey();
1018 public void setFfsFormatKey(String moduleKey
, String ffsKey
){
1019 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1023 if(msa
.getModuleSaBuildOptions() == null){
1024 msa
.addNewModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
1027 msa
.getModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
1030 public void setModuleSAForceDebug(int i
, boolean dbgEnable
) {
1031 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(i
);
1032 moduleSa
.setForceDebug(dbgEnable
);
1035 public boolean getModuleSAForceDebug (int i
) {
1036 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(i
);
1037 if (moduleSa
.getForceDebug() == true) {
1043 public void getModuleSAOptions(String moduleKey
, String
[][] saa
) {
1044 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1045 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
1046 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
1050 List
<OptionDocument
.Option
> lOpt
= msa
.getModuleSaBuildOptions().getOptions().getOptionList();
1051 ListIterator li
= lOpt
.listIterator();
1053 while(li
.hasNext()) {
1054 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
1055 if (opt
.getBuildTargets() != null) {
1056 saa
[i
][0] = listToString(opt
.getBuildTargets());
1058 saa
[i
][1] = opt
.getToolChainFamily();
1059 saa
[i
][2] = opt
.getTagName();
1060 saa
[i
][3] = opt
.getToolCode();
1062 if (opt
.getSupArchList() != null){
1063 saa
[i
][4] = listToString(opt
.getSupArchList());
1069 saa
[i
][5] = opt
.getStringValue();
1075 public int getModuleSAOptionsCount(String moduleKey
){
1076 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1077 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
1078 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
1081 return msa
.getModuleSaBuildOptions().getOptions().getOptionList().size();
1084 public void genModuleSAOptionsOpt(String moduleKey
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1085 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1086 if (msa
.getModuleSaBuildOptions() == null) {
1087 msa
.addNewModuleSaBuildOptions();
1089 if (msa
.getModuleSaBuildOptions().getOptions() == null){
1090 msa
.getModuleSaBuildOptions().addNewOptions();
1092 OptionDocument
.Option opt
= msa
.getModuleSaBuildOptions().getOptions().addNewOption();
1093 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1096 public void removeModuleSAOptionsOpt(String moduleKey
, int i
) {
1097 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1098 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
1101 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
1102 XmlCursor cursor
= opts
.newCursor();
1103 if (cursor
.toFirstChild()) {
1104 for (int j
= 0; j
< i
; ++j
){
1105 cursor
.toNextSibling();
1108 if (getModuleSAOptionsCount(moduleKey
) == 0) {
1116 public void updateModuleSAOptionsOpt(String moduleKey
, int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1117 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1118 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
1121 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
1122 XmlCursor cursor
= opts
.newCursor();
1123 if (cursor
.toFirstChild()) {
1124 for (int j
= 0; j
< i
; ++j
){
1125 cursor
.toNextSibling();
1127 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
1128 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1133 /**add pcd information of module mi to a ModuleSA.
1135 * @param moduleSa if null, generate a new ModuleSA.
1137 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi
, String arch
, ModuleSADocument
.ModuleSA moduleSa
) throws Exception
{
1138 //ToDo add Arch filter
1141 if (moduleSa
== null) {
1142 moduleSa
= genModuleSA(mi
, arch
);
1145 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(mi
);
1146 if (msa
.getPcdCoded() == null) {
1150 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
1151 m
.put("ModuleSurfaceArea", msa
);
1152 SurfaceAreaQuery
.setDoc(m
);
1153 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, mi
);
1155 // Implementing InitializePlatformPcdBuildDefinitions
1157 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
1158 ListIterator li
= l
.listIterator();
1159 while(li
.hasNext()) {
1160 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
1161 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
1162 if (spdPcd
== null) {
1166 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module " + mi
.getName());
1169 // AddItem to ModuleSA PcdBuildDefinitions
1171 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue() : msaPcd
.getDefaultValue();
1173 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(), msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType()+"", defaultVal
, moduleSa
);
1177 catch (Exception e
){
1184 private PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
LookupPcdDeclaration (PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
, PackageIdentification
[] depPkgs
) {
1186 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= null;
1187 for (int i
= 0; i
< depPkgs
.length
; ++i
) {
1189 XmlObject
[] xo
= SurfaceAreaQuery
.getSpdPcdDeclarations(depPkgs
[i
]);
1193 for (int j
= 0; j
< xo
.length
; ++j
) {
1194 spdPcd
= (PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
)xo
[j
];
1195 if (msaPcd
.getTokenSpaceGuidCName() == null) {
1196 if (spdPcd
.getCName().equals(msaPcd
.getCName())) {
1201 if (spdPcd
.getCName().equals(msaPcd
.getCName()) && spdPcd
.getTokenSpaceGuidCName().equals(msaPcd
.getTokenSpaceGuidCName())) {
1212 private ModuleSADocument
.ModuleSA
genModuleSA (ModuleIdentification mi
, String arch
) {
1213 PackageIdentification pi
= WorkspaceProfile
.getPackageForModule(mi
);
1214 ModuleSADocument
.ModuleSA msa
= getfpdFrameworkModules().addNewModuleSA();
1215 XmlCursor cursor
= msa
.newCursor();
1217 String comment
= "Mod: " + mi
.getName() + " Type: " + SurfaceAreaQuery
.getModuleType(mi
) + " Path: "
1218 + mi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
1219 cursor
.insertComment(comment
);
1222 e
.printStackTrace();
1227 msa
.setModuleGuid(mi
.getGuid());
1228 msa
.setModuleVersion(mi
.getVersion());
1229 msa
.setPackageGuid(pi
.getGuid());
1230 msa
.setPackageVersion(pi
.getVersion());
1232 Vector
<String
> v
= new Vector
<String
>();
1234 msa
.setSupArchList(v
);
1240 private void genPcdData (String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
, ModuleSADocument
.ModuleSA moduleSa
)
1241 throws PcdItemTypeConflictException
, PcdValueMalFormed
{
1242 if (moduleSa
.getPcdBuildDefinition() == null){
1243 moduleSa
.addNewPcdBuildDefinition();
1246 // constructe pcd to modulesa mapping first.
1247 // Attention : for any error condition, remove from map this pcd.
1249 ArrayList
<String
> pcdConsumer
= LookupPlatformPcdData(cName
+ " " + tsGuid
);
1250 if (pcdConsumer
== null) {
1251 pcdConsumer
= new ArrayList
<String
>();
1254 // Check whether this PCD has already added to ModuleSA, if so, just return.
1256 String moduleInfo
= moduleSa
.getModuleGuid().toLowerCase() + " " + moduleSa
.getModuleVersion()
1257 + " " + moduleSa
.getPackageGuid().toLowerCase() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
1258 for (int i
= 0; i
< pcdConsumer
.size(); ++i
) {
1259 String pcdInfo
= pcdConsumer
.get(i
);
1260 if (moduleInfo
.equals(pcdInfo
.substring(0, pcdInfo
.lastIndexOf(" ")))){
1265 // Using existing Pcd type, if this pcd already exists in other ModuleSA
1267 if (pcdConsumer
.size() > 0) {
1269 itemType
= itemType (pcdConsumer
.get(0));
1271 String listValue
= moduleInfo
+ " " + itemType
;
1272 pcdConsumer
.add(listValue
);
1273 dynPcdMap
.put(cName
+ " " + tsGuid
, pcdConsumer
);
1275 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData fpdPcd
= moduleSa
.getPcdBuildDefinition().addNewPcdData();
1276 fpdPcd
.setCName(cName
);
1277 fpdPcd
.setToken(token
);
1278 fpdPcd
.setTokenSpaceGuidCName(tsGuid
);
1279 fpdPcd
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1280 fpdPcd
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1282 if (defaultVal
!= null){
1283 fpdPcd
.setValue(defaultVal
);
1286 if (dataType
.equals("UINT8") || dataType
.equals("UINT16") || dataType
.equals("UINT32") || dataType
.equals("UINT64")) {
1287 fpdPcd
.setValue("0");
1289 if (dataType
.equals("BOOLEAN")){
1290 fpdPcd
.setValue("FALSE");
1292 if (dataType
.equals("VOID*")) {
1293 fpdPcd
.setValue("");
1297 // Using existing pcd value, if this pcd already exists in other moduleSa.
1299 if (defaultPcdValue
.get(cName
+ " " + tsGuid
) == null) {
1300 defaultPcdValue
.put(cName
+ " " + tsGuid
, fpdPcd
.getValue());
1303 fpdPcd
.setValue(defaultPcdValue
.get(cName
+ " " + tsGuid
));
1306 if (dataType
.equals("UINT8")){
1307 fpdPcd
.setMaxDatumSize(1);
1309 if (dataType
.equals("UINT16")) {
1310 fpdPcd
.setMaxDatumSize(2);
1312 if (dataType
.equals("UINT32")) {
1313 fpdPcd
.setMaxDatumSize(4);
1315 if (dataType
.equals("UINT64")){
1316 fpdPcd
.setMaxDatumSize(8);
1318 if (dataType
.equals("BOOLEAN")){
1319 fpdPcd
.setMaxDatumSize(1);
1321 if (dataType
.equals("VOID*")) {
1322 int maxSize
= setMaxSizeForPointer(fpdPcd
.getValue());
1323 fpdPcd
.setMaxDatumSize(maxSize
);
1327 if (itemType
.equals("DYNAMIC") || itemType
.equals("DYNAMIC_EX")) {
1328 ArrayList
<String
> al
= LookupDynamicPcdBuildDefinition(cName
+ " " + tsGuid
);
1330 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.
1331 // so need to add one dyn pcd.
1333 if (al
.size() == 1) {
1334 addDynamicPcdBuildData(cName
, token
, tsGuid
, itemType
, dataType
, defaultVal
);
1340 public int setMaxSizeForPointer(String datum
) throws PcdValueMalFormed
{
1341 if (datum
== null) {
1344 char ch
= datum
.charAt(0);
1348 // For void* type PCD, only three datum is support:
1349 // 1) Unicode: string with start char is "L"
1350 // 2) Ansci: String is ""
1351 // 3) byte array: String start char "{"
1354 start
= datum
.indexOf('\"');
1355 end
= datum
.lastIndexOf('\"');
1356 if ((start
> end
) ||
1357 (end
> datum
.length())||
1358 ((start
== end
) && (datum
.length() > 0))) {
1359 //ToDo Error handling here
1360 throw new PcdValueMalFormed (datum
);
1363 strValue
= datum
.substring(start
+ 1, end
);
1364 return strValue
.length() * 2;
1365 } else if (ch
== '\"'){
1366 start
= datum
.indexOf('\"');
1367 end
= datum
.lastIndexOf('\"');
1368 if ((start
> end
) ||
1369 (end
> datum
.length())||
1370 ((start
== end
) && (datum
.length() > 0))) {
1371 throw new PcdValueMalFormed (datum
);
1373 strValue
= datum
.substring(start
+ 1, end
);
1374 return strValue
.length();
1375 } else if (ch
=='{') {
1376 String
[] strValueArray
;
1378 start
= datum
.indexOf('{');
1379 end
= datum
.lastIndexOf('}');
1380 strValue
= datum
.substring(start
+ 1, end
);
1381 strValue
= strValue
.trim();
1382 if (strValue
.length() == 0) {
1385 strValueArray
= strValue
.split(",");
1386 for (int index
= 0; index
< strValueArray
.length
; index
++) {
1387 Integer value
= Integer
.decode(strValueArray
[index
].trim());
1390 // "[FPD file error] The datum type of PCD %s in %s is VOID*, "+
1391 // "it must be a byte array. But the element of %s exceed the byte range",
1392 throw new PcdValueMalFormed (datum
);
1395 return strValueArray
.length
;
1399 // "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+
1400 // "1) UNICODE string: like L\"xxxx\";\r\n"+
1401 // "2) ANSIC string: like \"xxx\";\r\n"+
1402 // "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+
1403 // "but the datum in seems does not following above format!",
1404 throw new PcdValueMalFormed (datum
);
1409 private ArrayList
<String
> LookupDynamicPcdBuildDefinition(String dynPcdKey
) {
1410 ArrayList
<String
> al
= dynPcdMap
.get(dynPcdKey
);
1415 private ArrayList
<String
> LookupPlatformPcdData(String pcdKey
) {
1417 return dynPcdMap
.get(pcdKey
);
1420 public int getDynamicPcdBuildDataCount() {
1421 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1422 removeElement(getfpdDynPcdBuildDefs());
1423 fpdDynPcdBuildDefs
= null;
1426 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1429 public void getDynamicPcdBuildData(String
[][] saa
) {
1430 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1431 removeElement(getfpdDynPcdBuildDefs());
1432 fpdDynPcdBuildDefs
= null;
1435 List
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> l
= getfpdDynPcdBuildDefs().getPcdBuildDataList();
1436 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> li
= l
.listIterator();
1438 while(li
.hasNext()) {
1439 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcd
= li
.next();
1440 saa
[i
][0] = dynPcd
.getCName();
1441 saa
[i
][1] = dynPcd
.getToken().toString();
1442 saa
[i
][2] = dynPcd
.getTokenSpaceGuidCName();
1443 saa
[i
][3] = dynPcd
.getMaxDatumSize()+"";
1444 saa
[i
][4] = dynPcd
.getDatumType().toString();
1450 public void addDynamicPcdBuildData(String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
)
1451 throws PcdValueMalFormed
{
1452 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcdData
= getfpdDynPcdBuildDefs().addNewPcdBuildData();
1453 dynPcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1454 dynPcdData
.setCName(cName
);
1455 dynPcdData
.setToken(token
);
1456 dynPcdData
.setTokenSpaceGuidCName(tsGuid
);
1457 dynPcdData
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1459 BigInteger bigInt
= new BigInteger("0");
1460 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= dynPcdData
.addNewSkuInfo();
1461 skuInfo
.setSkuId(bigInt
);
1462 if (defaultVal
!= null){
1463 skuInfo
.setValue(defaultVal
);
1466 if (dataType
.equals("UINT8")){
1467 skuInfo
.setValue("0");
1469 if (dataType
.equals("UINT16")) {
1470 skuInfo
.setValue("0");
1472 if (dataType
.equals("UINT32")) {
1473 skuInfo
.setValue("0");
1475 if (dataType
.equals("UINT64")){
1476 skuInfo
.setValue("0");
1478 if (dataType
.equals("BOOLEAN")){
1479 skuInfo
.setValue("false");
1481 if (dataType
.equals("VOID*")) {
1482 skuInfo
.setValue("");
1485 if (dataType
.equals("UINT8")){
1486 dynPcdData
.setMaxDatumSize(1);
1488 if (dataType
.equals("UINT16")) {
1489 dynPcdData
.setMaxDatumSize(2);
1491 if (dataType
.equals("UINT32")) {
1492 dynPcdData
.setMaxDatumSize(4);
1494 if (dataType
.equals("UINT64")){
1495 dynPcdData
.setMaxDatumSize(8);
1497 if (dataType
.equals("BOOLEAN")){
1498 dynPcdData
.setMaxDatumSize(1);
1500 if (dataType
.equals("VOID*")) {
1501 int maxSize
= setMaxSizeForPointer(defaultVal
);
1502 dynPcdData
.setMaxDatumSize(maxSize
);
1506 public void removeDynamicPcdBuildData(String cName
, String tsGuid
) {
1507 XmlObject o
= fpdRoot
.getDynamicPcdBuildDefinitions();
1512 XmlCursor cursor
= o
.newCursor();
1513 if (cursor
.toFirstChild()) {
1515 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdBuildData
=
1516 (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1517 if (pcdBuildData
.getCName().equals(cName
) && pcdBuildData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
1519 if (getDynamicPcdBuildDataCount() == 1) {
1527 while (cursor
.toNextSibling());
1532 // Get the Sku Info count of ith dyn pcd element.
1534 public int getDynamicPcdSkuInfoCount(int i
){
1535 if (fpdRoot
.getDynamicPcdBuildDefinitions() == null || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null
1536 || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {
1540 int skuInfoCount
= 0;
1541 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1542 if (cursor
.toFirstChild()) {
1543 for (int j
= 0; j
< i
; ++j
) {
1544 cursor
.toNextSibling();
1546 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1547 if (pcdData
.getSkuInfoList() == null) {
1551 skuInfoCount
= pcdData
.getSkuInfoList().size();
1555 return skuInfoCount
;
1558 public void getDynamicPcdSkuInfos(int i
, String
[][] saa
){
1559 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1560 removeElement(getfpdDynPcdBuildDefs());
1561 fpdDynPcdBuildDefs
= null;
1565 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1566 if (cursor
.toFirstChild()) {
1567 for (int j
= 0; j
< i
; ++j
) {
1568 cursor
.toNextSibling();
1570 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1571 if (pcdData
.getSkuInfoList() == null) {
1576 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1578 while (li
.hasNext()) {
1579 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1580 saa
[k
][0] = skuInfo
.getSkuId()+"";
1581 saa
[k
][1] = skuInfo
.getVariableName();
1582 saa
[k
][2] = skuInfo
.getVariableGuid();
1583 saa
[k
][3] = skuInfo
.getVariableOffset();
1584 saa
[k
][4] = skuInfo
.getHiiDefaultValue();
1585 saa
[k
][5] = skuInfo
.getVpdOffset();
1586 saa
[k
][6] = skuInfo
.getValue();
1596 public String
getDynamicPcdBuildDataValue(int i
){
1597 String value
= null;
1598 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1599 removeElement(getfpdDynPcdBuildDefs());
1600 fpdDynPcdBuildDefs
= null;
1604 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1605 if (cursor
.toFirstChild()) {
1606 for (int j
= 0; j
< i
; ++j
) {
1607 cursor
.toNextSibling();
1609 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1610 if (pcdData
.getSkuInfoList() == null) {
1614 value
= pcdData
.getSkuInfoArray(0).getValue();
1621 public String
getDynamicPcdBuildDataVpdOffset(int i
){
1622 String vpdOffset
= null;
1623 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1624 removeElement(getfpdDynPcdBuildDefs());
1625 fpdDynPcdBuildDefs
= null;
1629 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1630 if (cursor
.toFirstChild()) {
1631 for (int j
= 0; j
< i
; ++j
) {
1632 cursor
.toNextSibling();
1634 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1635 if (pcdData
.getSkuInfoList() == null) {
1639 vpdOffset
= pcdData
.getSkuInfoArray(0).getVpdOffset();
1646 public void removeDynamicPcdBuildDataSkuInfo(int i
) {
1647 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1648 removeElement(getfpdDynPcdBuildDefs());
1649 fpdDynPcdBuildDefs
= null;
1653 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1654 if (cursor
.toFirstChild()) {
1655 for (int j
= 0; j
< i
; ++j
) {
1656 cursor
.toNextSibling();
1658 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1659 if (pcdData
.getSkuInfoList() == null) {
1664 QName qSkuInfo
= new QName(xmlNs
, "SkuInfo");
1665 cursor
.toChild(qSkuInfo
);
1672 // generate sku info for ith dyn pcd build data.
1674 public void genDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1675 String hiiDefault
, String vpdOffset
, String value
, int i
) {
1676 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1680 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1681 if (cursor
.toFirstChild()) {
1682 for (int j
= 0; j
< i
; ++j
) {
1683 cursor
.toNextSibling();
1685 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1686 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= pcdData
.addNewSkuInfo();
1687 skuInfo
.setSkuId(new BigInteger(id
));
1688 if (varName
!= null){
1689 skuInfo
.setVariableName(varName
);
1690 skuInfo
.setVariableGuid(varGuid
);
1691 skuInfo
.setVariableOffset(varOffset
);
1692 skuInfo
.setHiiDefaultValue(hiiDefault
);
1694 else if (vpdOffset
!= null){
1695 skuInfo
.setVpdOffset(vpdOffset
);
1698 skuInfo
.setValue(value
);
1703 public void updateDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1704 String hiiDefault
, String vpdOffset
, String value
, int i
){
1705 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1709 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1710 if (cursor
.toFirstChild()) {
1711 for (int j
= 0; j
< i
; ++j
) {
1712 cursor
.toNextSibling();
1714 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1715 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1716 while (li
.hasNext()) {
1717 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1718 if (skuInfo
.getSkuId().toString().equals(id
)){
1719 if (varName
!= null){
1720 skuInfo
.setVariableName(varName
);
1721 skuInfo
.setVariableGuid(varGuid
);
1722 skuInfo
.setVariableOffset(varOffset
);
1723 skuInfo
.setHiiDefaultValue(hiiDefault
);
1725 else if (vpdOffset
!= null){
1726 skuInfo
.setVpdOffset(vpdOffset
);
1729 skuInfo
.setValue(value
);
1737 public BuildOptionsDocument
.BuildOptions
getfpdBuildOpts() {
1738 if (fpdBuildOpts
== null) {
1739 fpdBuildOpts
= fpdRoot
.addNewBuildOptions();
1741 return fpdBuildOpts
;
1744 public void genBuildOptionsUserExtensions(String fvName
, String outputFileName
, Vector
<String
[]> includeModules
) {
1745 QName elementFvName
= new QName (xmlNs
, "FvName");
1746 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1747 QName elementInfFileName
= new QName(xmlNs
, "InfFileName");
1748 QName elementModule
= new QName(xmlNs
, "Module");
1750 UserExtensionsDocument
.UserExtensions userExts
= getfpdBuildOpts().addNewUserExtensions();
1751 userExts
.setUserID("IMAGES");
1752 userExts
.setIdentifier(new BigInteger("1"));
1753 XmlCursor cursor
= userExts
.newCursor();
1754 cursor
.toEndToken();
1756 cursor
.beginElement(elementFvName
);
1757 cursor
.insertChars(fvName
);
1758 cursor
.toNextToken();
1760 cursor
.beginElement(elementInfFileName
);
1761 cursor
.insertChars(fvName
+ ".inf");
1762 cursor
.toNextToken();
1764 cursor
.beginElement(elementIncludeModules
);
1765 for (int i
= 0; i
< includeModules
.size(); ++i
) {
1766 cursor
.beginElement(elementModule
);
1767 cursor
.insertAttributeWithValue("ModuleGuid", includeModules
.get(i
)[0]);
1768 if (!includeModules
.get(i
)[1].equals("null") && includeModules
.get(i
)[1].length() != 0) {
1769 cursor
.insertAttributeWithValue("ModuleVersion", includeModules
.get(i
)[1]);
1771 cursor
.insertAttributeWithValue("PackageGuid", includeModules
.get(i
)[2]);
1772 if (!includeModules
.get(i
)[3].equals("null") && includeModules
.get(i
)[3].length() != 0) {
1773 cursor
.insertAttributeWithValue("PackageVersion", includeModules
.get(i
)[3]);
1776 cursor
.insertAttributeWithValue("Arch", includeModules
.get(i
)[4]);
1777 cursor
.toEndToken();
1778 cursor
.toNextToken();
1783 public int getUserExtsIncModCount (String fvName
) {
1784 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1787 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1788 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1789 while (li
.hasNext()) {
1790 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1791 if (!ues
.getUserID().equals("IMAGES")) {
1794 XmlCursor cursor
= ues
.newCursor();
1795 cursor
.toFirstChild();
1796 String elementName
= cursor
.getTextValue();
1797 if (elementName
.equals(fvName
)) {
1798 cursor
.toNextSibling(elementIncludeModules
);
1799 if (cursor
.toFirstChild()) {
1801 for (i
= 1; cursor
.toNextSibling(); ++i
);
1813 public void getUserExtsIncMods(String fvName
, String
[][] saa
) {
1814 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1818 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1819 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1820 QName attribUserId
= new QName ("UserID");
1821 QName elementFvName
= new QName (xmlNs
, "FvName");
1822 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1823 QName attribModuleGuid
= new QName("ModuleGuid");
1824 QName attribModuleVersion
= new QName("ModuleVersion");
1825 QName attribPackageGuid
= new QName("PackageGuid");
1826 QName attribPackageVersion
= new QName("PackageVersion");
1827 QName attribArch
= new QName("Arch");
1829 if (cursor
.toChild(elementUserExts
)) {
1832 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1833 cursor
.toChild(elementFvName
);
1834 String elementName
= cursor
.getTextValue();
1835 if (elementName
.equals(fvName
)) {
1836 cursor
.toNextSibling(elementIncludeModules
);
1837 if (cursor
.toFirstChild()) {
1840 saa
[i
][0] = cursor
.getAttributeText(attribModuleGuid
);
1841 saa
[i
][1] = cursor
.getAttributeText(attribModuleVersion
);
1842 saa
[i
][2] = cursor
.getAttributeText(attribPackageGuid
);
1843 saa
[i
][3] = cursor
.getAttributeText(attribPackageVersion
);
1844 saa
[i
][4] = cursor
.getAttributeText(attribArch
);
1846 }while (cursor
.toNextSibling());
1852 }while (cursor
.toNextSibling(elementUserExts
));
1858 public void updateBuildOptionsUserExtensions (String oldFvName
, String newFvName
) {
1859 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1862 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1863 while (li
.hasNext()) {
1864 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1865 if (!ues
.getUserID().equals("IMAGES")) {
1868 XmlCursor cursor
= ues
.newCursor();
1869 cursor
.toFirstChild();
1870 String elementName
= cursor
.getTextValue();
1871 if (elementName
.equals(oldFvName
)) {
1872 cursor
.setTextValue(newFvName
);
1879 public void removeBuildOptionsUserExtensions (String fvName
) {
1880 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1884 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1885 while (li
.hasNext()) {
1886 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1887 if (!ues
.getUserID().equals("IMAGES")) {
1890 XmlCursor cursor
= ues
.newCursor();
1891 cursor
.toFirstChild();
1892 String elementName
= cursor
.getTextValue();
1893 if (elementName
.equals(fvName
)) {
1904 private boolean versionEqual (String v1
, String v2
) {
1906 if ((v1
== null || v1
.length() == 0 || v1
.equalsIgnoreCase("null"))
1907 && (v2
== null || v2
.length() == 0 || v2
.equalsIgnoreCase("null"))) {
1911 if (v1
!= null && v1
.equals(v2
)) {
1918 public boolean moduleInBuildOptionsUserExtensions (String fvName
, String moduleGuid
, String moduleVersion
, String packageGuid
, String packageVersion
, String arch
) {
1919 boolean inList
= false;
1920 if (getUserExtsIncModCount(fvName
) > 0) {
1922 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1923 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1924 QName attribUserId
= new QName ("UserID");
1925 QName elementFvName
= new QName (xmlNs
, "FvName");
1926 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1927 QName attribModuleGuid
= new QName("ModuleGuid");
1928 QName attribModuleVersion
= new QName("ModuleVersion");
1929 QName attribPackageGuid
= new QName("PackageGuid");
1930 QName attribPackageVersion
= new QName("PackageVersion");
1931 QName attribArch
= new QName("Arch");
1933 if (cursor
.toChild(elementUserExts
)) {
1936 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1937 cursor
.toChild(elementFvName
);
1938 String elementName
= cursor
.getTextValue();
1939 if (elementName
.equals(fvName
)) {
1940 cursor
.toNextSibling(elementIncludeModules
);
1941 if (cursor
.toFirstChild()) {
1944 String mg
= cursor
.getAttributeText(attribModuleGuid
);
1945 String mv
= cursor
.getAttributeText(attribModuleVersion
);
1946 String pg
= cursor
.getAttributeText(attribPackageGuid
);
1947 String pv
= cursor
.getAttributeText(attribPackageVersion
);
1948 String ar
= cursor
.getAttributeText(attribArch
);
1949 if (!moduleGuid
.equalsIgnoreCase(mg
)) {
1952 if (!packageGuid
.equalsIgnoreCase(pg
)) {
1955 if (!arch
.equalsIgnoreCase(ar
)) {
1958 if (!versionEqual(moduleVersion
, mv
)) {
1961 if (!versionEqual(packageVersion
, pv
)) {
1966 }while (cursor
.toNextSibling());
1972 }while (cursor
.toNextSibling(elementUserExts
));
1979 public void removeModuleInBuildOptionsUserExtensions (String fvName
, String moduleGuid
, String moduleVersion
, String packageGuid
, String packageVersion
, String arch
) {
1980 if (getUserExtsIncModCount(fvName
) > 0) {
1982 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1983 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1984 QName attribUserId
= new QName ("UserID");
1985 QName elementFvName
= new QName (xmlNs
, "FvName");
1986 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1987 QName attribModuleGuid
= new QName("ModuleGuid");
1988 QName attribModuleVersion
= new QName("ModuleVersion");
1989 QName attribPackageGuid
= new QName("PackageGuid");
1990 QName attribPackageVersion
= new QName("PackageVersion");
1991 QName attribArch
= new QName("Arch");
1993 if (cursor
.toChild(elementUserExts
)) {
1996 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1997 cursor
.toChild(elementFvName
);
1998 String elementName
= cursor
.getTextValue();
1999 if (elementName
.equals(fvName
)) {
2000 cursor
.toNextSibling(elementIncludeModules
);
2001 if (cursor
.toFirstChild()) {
2004 String mg
= cursor
.getAttributeText(attribModuleGuid
);
2005 String mv
= cursor
.getAttributeText(attribModuleVersion
);
2006 String pg
= cursor
.getAttributeText(attribPackageGuid
);
2007 String pv
= cursor
.getAttributeText(attribPackageVersion
);
2008 String ar
= cursor
.getAttributeText(attribArch
);
2009 if (!moduleGuid
.equalsIgnoreCase(mg
)) {
2012 if (!packageGuid
.equalsIgnoreCase(pg
)) {
2015 if (!arch
.equalsIgnoreCase(ar
)) {
2018 if (!versionEqual(moduleVersion
, mv
)) {
2021 if (!versionEqual(packageVersion
, pv
)) {
2025 }while (cursor
.toNextSibling());
2031 }while (cursor
.toNextSibling(elementUserExts
));
2037 public void genBuildOptionsUserDefAntTask (String id
, String fileName
, String execOrder
) {
2038 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2039 if (udats
== null) {
2040 udats
= getfpdBuildOpts().addNewUserDefinedAntTasks();
2043 AntTaskDocument
.AntTask at
= udats
.addNewAntTask();
2044 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
2047 private void setBuildOptionsUserDefAntTask(String id
, String fileName
, String execOrder
, AntTaskDocument
.AntTask at
) {
2048 at
.setId(new Integer(id
));
2049 XmlCursor cursor
= at
.newCursor();
2050 if (fileName
!= null){
2051 at
.setFilename(fileName
);
2053 else if (cursor
.toChild(xmlNs
, "Filename")) {
2056 if (execOrder
!= null) {
2057 at
.setAntCmdOptions(execOrder
);
2059 else if (cursor
.toChild(xmlNs
, "AntCmdOptions")) {
2065 public void removeBuildOptionsUserDefAntTask(int i
) {
2066 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
2070 XmlCursor cursor
= o
.newCursor();
2071 if (cursor
.toFirstChild()) {
2072 for (int j
= 0; j
< i
; ++j
) {
2073 cursor
.toNextSibling();
2076 if (getBuildOptionsUserDefAntTaskCount() == 0) {
2084 public void updateBuildOptionsUserDefAntTask(int i
, String id
, String fileName
, String execOrder
){
2085 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
2089 XmlCursor cursor
= o
.newCursor();
2090 if (cursor
.toFirstChild()) {
2091 for (int j
= 0; j
< i
; ++j
) {
2092 cursor
.toNextSibling();
2094 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)cursor
.getObject();
2095 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
2100 public int getBuildOptionsUserDefAntTaskCount() {
2101 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2102 if (udats
== null || udats
.getAntTaskList() == null) {
2106 return udats
.getAntTaskList().size();
2109 public void getBuildOptionsUserDefAntTasks(String
[][] saa
) {
2110 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2111 if (udats
== null || udats
.getAntTaskList() == null) {
2115 List
<AntTaskDocument
.AntTask
> l
= udats
.getAntTaskList();
2116 ListIterator li
= l
.listIterator();
2118 while (li
.hasNext()) {
2119 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)li
.next();
2120 saa
[i
][0] = at
.getId() + "";
2121 saa
[i
][1] = saa
[i
][2] = "";
2122 if (at
.getFilename() != null){
2123 saa
[i
][1] = at
.getFilename();
2125 if (at
.getAntCmdOptions() != null) {
2126 saa
[i
][2] = at
.getAntCmdOptions();
2131 public void genBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
2132 OptionsDocument
.Options opts
= getfpdBuildOpts().getOptions();
2134 opts
= getfpdBuildOpts().addNewOptions();
2136 OptionDocument
.Option opt
= opts
.addNewOption();
2137 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2140 private void setBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
, OptionDocument
.Option opt
){
2141 opt
.setStringValue(contents
);
2142 if (buildTargets
!= null) {
2143 opt
.setBuildTargets(buildTargets
);
2146 if (opt
.isSetBuildTargets()) {
2147 opt
.unsetBuildTargets();
2151 if (toolChain
!= null && toolChain
.length() > 0) {
2152 opt
.setToolChainFamily(toolChain
);
2155 if (opt
.isSetToolChainFamily()) {
2156 opt
.unsetToolChainFamily();
2160 if (tagName
!= null && tagName
.length() > 0) {
2161 opt
.setTagName(tagName
);
2164 if (opt
.isSetTagName()) {
2169 if (toolCmd
!= null && toolCmd
.length() > 0) {
2170 opt
.setToolCode(toolCmd
);
2173 if (opt
.isSetToolCode()) {
2174 opt
.unsetToolCode();
2179 if (archList
!= null) {
2180 opt
.setSupArchList(archList
);
2183 if (opt
.isSetSupArchList()) {
2184 opt
.unsetSupArchList();
2189 public void removeBuildOptionsOpt(int i
){
2191 XmlObject o
= getfpdBuildOpts().getOptions();
2196 XmlCursor cursor
= o
.newCursor();
2197 if (cursor
.toFirstChild()) {
2198 for (int j
= 0; j
< i
; ++j
) {
2199 cursor
.toNextSibling();
2202 if (getBuildOptionsOptCount() == 0) {
2210 public void updateBuildOptionsOpt(int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
2211 XmlObject o
= getfpdBuildOpts().getOptions();
2216 XmlCursor cursor
= o
.newCursor();
2217 if (cursor
.toFirstChild()) {
2218 for (int j
= 0; j
< i
; ++j
) {
2219 cursor
.toNextSibling();
2221 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
2222 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2227 public int getBuildOptionsOptCount(){
2228 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2231 return getfpdBuildOpts().getOptions().getOptionList().size();
2234 public void getBuildOptionsOpts(String
[][] saa
) {
2235 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2239 List
<OptionDocument
.Option
> lOpt
= getfpdBuildOpts().getOptions().getOptionList();
2240 ListIterator li
= lOpt
.listIterator();
2242 while(li
.hasNext()) {
2243 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
2244 if (opt
.getBuildTargets() != null) {
2245 saa
[i
][0] = listToString(opt
.getBuildTargets());
2247 saa
[i
][1] = opt
.getToolChainFamily();
2248 if (opt
.getSupArchList() != null){
2249 saa
[i
][2] = listToString(opt
.getSupArchList());
2252 saa
[i
][3] = opt
.getToolCode();
2253 saa
[i
][4] = opt
.getTagName();
2254 saa
[i
][5] = opt
.getStringValue();
2260 public void genBuildOptionsFfs(String ffsKey
, String type
) {
2261 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2262 ffs
.setFfsKey(ffsKey
);
2264 ffs
.addNewSections().setEncapsulationType(type
);
2268 public void updateBuildOptionsFfsSectionsType(int i
, String type
) {
2269 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2271 ffs
.addNewSections().setEncapsulationType(type
);
2275 public void genBuildOptionsFfsAttribute(int i
, String name
, String value
) {
2276 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2277 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= ffs
.addNewAttribute();
2278 attrib
.setName(name
);
2279 attrib
.setValue(value
);
2282 /**update jth attribute of ith ffs.
2286 public void updateBuildOptionsFfsAttribute(int i
, int j
, String name
, String value
){
2287 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2288 XmlCursor cursor
= ffs
.newCursor();
2289 QName qAttrib
= new QName(xmlNs
, "Attribute");
2290 if (cursor
.toChild(qAttrib
)) {
2291 for (int k
= 0; k
< j
; ++k
) {
2292 cursor
.toNextSibling(qAttrib
);
2294 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
)cursor
.getObject();
2295 attrib
.setName(name
);
2296 attrib
.setValue(value
);
2301 public void removeBuildOptionsFfsAttribute(int i
, int j
){
2302 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2303 XmlCursor cursor
= ffs
.newCursor();
2304 QName qAttrib
= new QName(xmlNs
, "Attribute");
2305 if (cursor
.toChild(qAttrib
)) {
2306 for (int k
= 0; k
< j
; ++k
) {
2307 cursor
.toNextSibling(qAttrib
);
2314 public void genBuildOptionsFfsSectionsSection(int i
, String sectionType
) {
2315 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2319 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2321 if (sections
== null){
2322 sections
= ffs
.addNewSections();
2324 sections
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(sectionType
));
2327 public void removeBuildOptionsFfsSectionsSection(int i
, int j
) {
2328 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2329 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2330 if (sections
== null) {
2333 XmlCursor cursor
= sections
.newCursor();
2334 QName qSection
= new QName(xmlNs
, "Section");
2335 if (cursor
.toChild(qSection
)) {
2336 for (int k
= 0; k
< j
; ++k
) {
2337 cursor
.toNextSibling(qSection
);
2344 public void updateBuildOptionsFfsSectionsSection(int i
, int j
, String type
){
2345 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2346 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2347 if (sections
== null) {
2350 XmlCursor cursor
= sections
.newCursor();
2351 QName qSection
= new QName(xmlNs
, "Section");
2352 if (cursor
.toChild(qSection
)) {
2353 for (int k
= 0; k
< j
; ++k
) {
2354 cursor
.toNextSibling(qSection
);
2356 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
)cursor
.getObject();
2357 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2362 public void genBuildOptionsFfsSectionsSections(int i
, String encapType
) {
2363 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2367 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2369 if (sections
== null){
2370 sections
= ffs
.addNewSections();
2372 sections
.addNewSections().setEncapsulationType(encapType
);
2375 public void removeBuildOptionsFfsSectionsSections(int i
, int j
) {
2376 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2377 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2378 if (sections
== null) {
2381 XmlCursor cursor
= sections
.newCursor();
2382 QName qSections
= new QName(xmlNs
, "Sections");
2383 if (cursor
.toChild(qSections
)) {
2384 for (int k
= 0; k
< j
; ++k
) {
2385 cursor
.toNextSibling(qSections
);
2392 public void updateBuildOptionsFfsSectionsSections(int i
, int j
, String type
) {
2393 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2394 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2395 if (sections
== null) {
2398 XmlCursor cursor
= sections
.newCursor();
2399 QName qSections
= new QName(xmlNs
, "Sections");
2400 if (cursor
.toChild(qSections
)) {
2401 for (int k
= 0; k
< j
; ++k
) {
2402 cursor
.toNextSibling(qSections
);
2404 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2405 sections2
.setEncapsulationType(type
);
2410 public void genBuildOptionsFfsSectionsSectionsSection(int i
, int j
, String type
) {
2411 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2415 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2416 XmlCursor cursor
= sections
.newCursor();
2417 QName qSections
= new QName(xmlNs
, "Sections");
2418 if (cursor
.toChild(qSections
)){
2419 for (int k
= 0; k
< j
; ++k
) {
2420 cursor
.toNextSibling(qSections
);
2422 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2423 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(type
));
2428 public void removeBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
) {
2429 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2430 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2431 if (sections
== null) {
2434 XmlCursor cursor
= sections
.newCursor();
2435 QName qSections
= new QName(xmlNs
, "Sections");
2436 if (cursor
.toChild(qSections
)) {
2437 for (int l
= 0; l
< j
; ++l
) {
2438 cursor
.toNextSibling(qSections
);
2440 if (cursor
.toFirstChild()) {
2442 for (; m
< k
; ++m
) {
2443 cursor
.toNextSibling();
2455 public void updateBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
, String type
) {
2456 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2457 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2458 if (sections
== null) {
2461 XmlCursor cursor
= sections
.newCursor();
2462 QName qSections
= new QName(xmlNs
, "Sections");
2463 if (cursor
.toChild(qSections
)) {
2464 for (int l
= 0; l
< j
; ++l
) {
2465 cursor
.toNextSibling(qSections
);
2467 if (cursor
.toFirstChild()) {
2468 for (int m
= 0; m
< k
; ++m
) {
2469 cursor
.toNextSibling();
2471 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
)cursor
.getObject();
2472 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2478 public void getBuildOptionsFfsSectionsSectionsSection(int i
, int j
, ArrayList
<String
> al
) {
2479 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2483 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2484 XmlCursor cursor
= sections
.newCursor();
2485 QName qSections
= new QName(xmlNs
, "Sections");
2486 if (cursor
.toChild(qSections
)){
2487 for (int k
= 0; k
< j
; ++k
) {
2488 cursor
.toNextSibling(qSections
);
2490 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2491 if (sections2
.getSectionList() == null){
2495 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
> li
= sections2
.getSectionList().listIterator();
2496 while(li
.hasNext()) {
2497 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= li
.next();
2498 if (section
.isSetSectionType()) {
2499 al
.add(section
.getSectionType().toString());
2508 public int getBuildOptionsFfsCount(){
2509 if (getfpdBuildOpts().getFfsList() == null) {
2512 return getfpdBuildOpts().getFfsList().size();
2515 public void getBuildOptionsFfsKey(String
[][] saa
) {
2516 if (getfpdBuildOpts().getFfsList() == null) {
2519 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
> li
= getfpdBuildOpts().getFfsList().listIterator();
2521 while(li
.hasNext()){
2522 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= li
.next();
2523 saa
[i
][0] = ffs
.getFfsKey();
2528 public void updateBuildOptionsFfsKey(int i
, String key
) {
2529 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2533 /**Get ith FFS key and contents.
2536 public void getBuildOptionsFfs(int i
, String
[] sa
, LinkedHashMap
<String
, String
> ffsAttribMap
, ArrayList
<String
> firstLevelSections
, ArrayList
<String
> firstLevelSection
) {
2537 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2541 sa
[0] = ffs
.getFfsKey();
2542 if (ffs
.getSections() != null) {
2543 if(ffs
.getSections().getEncapsulationType() != null){
2544 sa
[1] = ffs
.getSections().getEncapsulationType();
2546 if (ffs
.getSections().getSectionList() != null){
2547 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
> li
= ffs
.getSections().getSectionList().listIterator();
2548 while (li
.hasNext()) {
2549 firstLevelSection
.add(li
.next().getSectionType().toString());
2552 if (ffs
.getSections().getSectionsList() != null) {
2553 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
> li
= ffs
.getSections().getSectionsList().listIterator();
2554 while(li
.hasNext()) {
2555 firstLevelSections
.add(li
.next().getEncapsulationType());
2559 if (ffs
.getAttributeList() != null) {
2560 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
> li
= ffs
.getAttributeList().listIterator();
2561 while(li
.hasNext()) {
2562 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= li
.next();
2563 ffsAttribMap
.put(attrib
.getName(), attrib
.getValue());
2572 private BuildOptionsDocument
.BuildOptions
.Ffs
getFfs(int i
) {
2573 XmlObject o
= getfpdBuildOpts();
2574 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= null;
2576 XmlCursor cursor
= o
.newCursor();
2577 QName qFfs
= new QName(xmlNs
, "Ffs");
2578 if (cursor
.toChild(qFfs
)) {
2579 for (int j
= 0; j
< i
; ++j
) {
2580 cursor
.toNextSibling(qFfs
);
2582 ffs
= (BuildOptionsDocument
.BuildOptions
.Ffs
)cursor
.getObject();
2588 public void removeBuildOptionsFfs(int i
) {
2589 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2594 XmlCursor cursor
= ffs
.newCursor();
2601 public PlatformDefinitionsDocument
.PlatformDefinitions
getfpdPlatformDefs(){
2602 if (fpdPlatformDefs
== null){
2603 fpdPlatformDefs
= fpdRoot
.addNewPlatformDefinitions();
2605 return fpdPlatformDefs
;
2608 public void getPlatformDefsSupportedArchs(Vector
<Object
> archs
){
2609 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {
2612 ListIterator li
= getfpdPlatformDefs().getSupportedArchitectures().listIterator();
2613 while(li
.hasNext()) {
2614 archs
.add(li
.next());
2618 public void setPlatformDefsSupportedArchs(Vector
<Object
> archs
) {
2619 if (archs
!= null) {
2620 getfpdPlatformDefs().setSupportedArchitectures(archs
);
2623 // XmlCursor cursor = getfpdPlatformDefs().newCursor();
2624 // if (cursor.toChild(xmlNs, "SupportedArchitectures")) {
2625 // cursor.removeXml();
2627 // cursor.dispose();
2631 public void getPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2632 if (getfpdPlatformDefs().getBuildTargets() == null) {
2635 ListIterator li
= getfpdPlatformDefs().getBuildTargets().listIterator();
2636 while(li
.hasNext()) {
2637 targets
.add(li
.next());
2641 public void setPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2642 getfpdPlatformDefs().setBuildTargets(targets
);
2645 public void genPlatformDefsSkuInfo(String id
, String name
) {
2646 SkuInfoDocument
.SkuInfo skuInfo
= null;
2647 if (getfpdPlatformDefs().getSkuInfo() == null) {
2648 skuInfo
= getfpdPlatformDefs().addNewSkuInfo();
2650 skuInfo
= getfpdPlatformDefs().getSkuInfo();
2651 if (skuInfo
.getUiSkuNameList() == null || skuInfo
.getUiSkuNameList().size() == 0) {
2652 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2653 skuName
.setSkuID(new BigInteger("0"));
2654 skuName
.setStringValue("DEFAULT");
2656 if (id
.equals("0")) {
2659 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2660 skuName
.setSkuID(new BigInteger(id
));
2661 skuName
.setStringValue(name
);
2664 public int getPlatformDefsSkuInfoCount(){
2665 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2668 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();
2671 public void getPlatformDefsSkuInfos(String
[][] saa
){
2672 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2673 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
2674 removeElement(getfpdDynPcdBuildDefs());
2675 fpdDynPcdBuildDefs
= null;
2680 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
2681 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
2683 while(li
.hasNext()) {
2684 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
2685 saa
[i
][0] = sku
.getSkuID()+"";
2686 saa
[i
][1] = sku
.getStringValue();
2691 public void removePlatformDefsSkuInfo(int i
) {
2692 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2693 if (skuInfo
== null || i
== 0) {
2697 XmlCursor cursor
= skuInfo
.newCursor();
2698 if (cursor
.toFirstChild()) {
2699 for (int j
= 0; j
< i
; ++j
) {
2700 cursor
.toNextSibling();
2707 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
2708 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2709 if (skuInfo
== null || i
== 0) {
2713 XmlCursor cursor
= skuInfo
.newCursor();
2714 if (cursor
.toFirstChild()) {
2715 for (int j
= 0; j
< i
; ++j
) {
2716 cursor
.toNextSibling();
2718 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2719 sku
.setSkuID(new BigInteger(id
));
2720 sku
.setStringValue(name
);
2725 public String
getPlatformDefsInterDir(){
2726 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2729 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2732 public void setPlatformDefsInterDir(String interDir
){
2733 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2736 public String
getPlatformDefsOutputDir() {
2737 return getfpdPlatformDefs().getOutputDirectory();
2740 public void setPlatformDefsOutputDir(String outputDir
) {
2741 if (outputDir
!= null && outputDir
.length() > 0) {
2742 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2745 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2746 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2753 public FlashDocument
.Flash
getfpdFlash() {
2754 if (fpdFlash
== null) {
2755 fpdFlash
= fpdRoot
.addNewFlash();
2760 public void genFlashDefinitionFile(String file
) {
2761 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2763 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2766 fdf
.setStringValue(file
);
2769 public String
getFlashDefinitionFile() {
2770 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2775 return fdf
.getStringValue();
2778 public void genFvImagesNameValue(String name
, String value
) {
2780 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2782 fi
= getfpdFlash().addNewFvImages();
2785 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2790 public void removeFvImagesNameValue(int i
){
2792 XmlObject o
= getfpdFlash().getFvImages();
2797 QName qNameValue
= new QName(xmlNs
, "NameValue");
2798 XmlCursor cursor
= o
.newCursor();
2799 if (cursor
.toChild(qNameValue
)) {
2800 for (int j
= 0; j
< i
; ++j
) {
2801 cursor
.toNextSibling(qNameValue
);
2808 public void updateFvImagesNameValue(int i
, String name
, String value
){
2810 XmlObject o
= getfpdFlash().getFvImages();
2815 QName qNameValue
= new QName(xmlNs
, "NameValue");
2816 XmlCursor cursor
= o
.newCursor();
2817 if (cursor
.toChild(qNameValue
)) {
2818 for (int j
= 0; j
< i
; ++j
) {
2819 cursor
.toNextSibling(qNameValue
);
2821 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2828 public int getFvImagesNameValueCount() {
2830 FvImagesDocument
.FvImages fi
= null;
2831 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2834 return fi
.getNameValueList().size();
2837 public void getFvImagesNameValues(String
[][] nv
) {
2839 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2843 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2845 ListIterator li
= l
.listIterator();
2846 while (li
.hasNext()) {
2847 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2849 nv
[i
][0] = e
.getName();
2850 nv
[i
][1] = e
.getValue();
2856 public void getFvImagesFvImageFvImageNames (Vector
<String
> vImageNames
) {
2857 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2858 if (fis
== null || fis
.getFvImageList() == null) {
2862 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2863 while (li
.hasNext()) {
2864 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2865 if (fi
.getType().toString().equals("ImageName")) {
2866 vImageNames
.addAll(fi
.getFvImageNamesList());
2872 public void addFvImageFvImageNames (String
[] fvNames
) {
2873 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2874 if (fis
== null || fis
.getFvImageList() == null) {
2875 genFvImagesFvImage (fvNames
, "ImageName", null);
2879 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2880 while (li
.hasNext()) {
2881 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2882 if (fi
.getType().toString().equals("ImageName")) {
2883 addFvImageNamesInFvImage (fi
, fvNames
);
2887 genFvImagesFvImage (fvNames
, "ImageName", null);
2890 public void addFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String
[] fvNames
) {
2892 for (int i
= 0; i
< fvNames
.length
; ++i
) {
2893 fi
.addFvImageNames(fvNames
[i
]);
2897 public void addFvImageNamesInFvImage (int i
, String
[] fvNames
) {
2898 XmlObject o
= getfpdFlash().getFvImages();
2902 XmlCursor cursor
= o
.newCursor();
2903 QName qFvImage
= new QName(xmlNs
, "FvImage");
2904 if (cursor
.toChild(qFvImage
)) {
2905 for (int j
= 0; j
< i
; ++j
) {
2906 cursor
.toNextSibling(qFvImage
);
2908 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2909 addFvImageNamesInFvImage(fi
, fvNames
);
2914 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2916 FvImagesDocument
.FvImages fis
= null;
2917 if ((fis
= getfpdFlash().getFvImages()) == null) {
2918 fis
= getfpdFlash().addNewFvImages();
2922 //gen FvImage with FvImageNames array
2924 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2925 for (int i
= 0; i
< names
.length
; ++i
) {
2926 fi
.addFvImageNames(names
[i
]);
2928 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2929 if (options
!= null){
2930 setFvImagesFvImageFvImageOptions(options
, fi
);
2934 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
2935 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
2937 fio
= fi
.addNewFvImageOptions();
2940 Set
<String
> key
= options
.keySet();
2941 Iterator
<String
> i
= key
.iterator();
2942 while (i
.hasNext()) {
2944 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
2945 String k
= (String
)i
.next();
2948 nv
.setValue((String
)options
.get(k
));
2955 public void removeFvImagesFvImage(int i
) {
2957 XmlObject o
= getfpdFlash().getFvImages();
2962 QName qFvImage
= new QName(xmlNs
, "FvImage");
2963 XmlCursor cursor
= o
.newCursor();
2964 if (cursor
.toChild(qFvImage
)) {
2965 for (int j
= 0; j
< i
; ++j
) {
2966 cursor
.toNextSibling(qFvImage
);
2975 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
2977 public void updateFvImageNameAll (String oldFvName
, String newFvName
) {
2978 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2981 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= getfpdFlash().getFvImages().getFvImageList().listIterator();
2982 while (li
.hasNext()) {
2983 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2984 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
2985 if (fi
.getFvImageNamesList().size() == 0) {
2991 public void updateFvImageNamesInFvImage (int i
, String oldFvName
, String newFvName
) {
2992 XmlObject o
= getfpdFlash().getFvImages();
2996 XmlCursor cursor
= o
.newCursor();
2997 QName qFvImage
= new QName(xmlNs
, "FvImage");
2998 if (cursor
.toChild(qFvImage
)) {
2999 for (int j
= 0; j
< i
; ++j
) {
3000 cursor
.toNextSibling(qFvImage
);
3002 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3003 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
3009 * @param oldFvName The FV Name to be replaced.
3010 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
3012 public void updateFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String oldFvName
, String newFvName
) {
3013 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
3014 XmlCursor cursor
= fi
.newCursor();
3016 if (cursor
.toChild(qFvImageNames
)) {
3018 String xmlValue
= cursor
.getTextValue();
3019 if (xmlValue
.equals(oldFvName
)){
3020 if (newFvName
!= null) {
3021 cursor
.setTextValue(newFvName
);
3027 }while (cursor
.toNextSibling(qFvImageNames
));
3033 /**update the Type attribute of ith FvImage with new type.
3037 public void updateFvImagesFvImageType (int i
, String type
) {
3038 XmlObject o
= getfpdFlash().getFvImages();
3042 XmlCursor cursor
= o
.newCursor();
3043 QName qFvImage
= new QName(xmlNs
, "FvImage");
3044 if (cursor
.toChild(qFvImage
)) {
3045 for (int j
= 0; j
< i
; ++j
) {
3046 cursor
.toNextSibling(qFvImage
);
3048 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3049 fi
.setType(FvImageTypes
.Enum
.forString(type
));
3054 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
3056 XmlObject o
= getfpdFlash().getFvImages();
3060 XmlCursor cursor
= o
.newCursor();
3061 QName qFvImage
= new QName(xmlNs
, "FvImage");
3062 if (cursor
.toChild(qFvImage
)) {
3063 for (int j
= 0; j
< i
; ++j
) {
3064 cursor
.toNextSibling(qFvImage
);
3066 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3067 fi
.setType(FvImageTypes
.Enum
.forString(types
));
3070 // remove old FvImageNames before adding new ones
3072 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
3073 cursor
.toChild(qFvImageNames
);
3075 while (cursor
.toNextSibling(qFvImageNames
)) {
3079 for (int k
= 0; k
< names
.length
; ++k
) {
3080 fi
.addFvImageNames(names
[k
]);
3083 // remove old FvImageOptions before adding new options
3085 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
3086 cursor
.toNextSibling(qFvImageOptions
);
3089 setFvImagesFvImageFvImageOptions(options
, fi
);
3094 public int getFvImagesFvImageCount(String type
) {
3096 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
3099 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3100 ListIterator li
= l
.listIterator();
3102 while(li
.hasNext()) {
3103 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3104 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3114 public Vector
<FvImagesDocument
.FvImages
.FvImage
> getFvImagesFvImageWithName (String fvName
, String type
) {
3115 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= new Vector
<FvImagesDocument
.FvImages
.FvImage
>();
3116 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
3119 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3120 ListIterator li
= l
.listIterator();
3121 while(li
.hasNext()) {
3122 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3123 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3126 if (fi
.getFvImageNamesList().contains(fvName
)) {
3135 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.
3137 public void getFvImagesFvImages(String
[][] saa
, String type
) {
3139 if (getfpdFlash().getFvImages() == null) {
3142 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3146 ListIterator li
= l
.listIterator();
3148 while(li
.hasNext()) {
3149 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3150 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3154 // get FvImageNames array, space separated
3156 List
<String
> lfn
= fi
.getFvImageNamesList();
3157 ListIterator lfni
= lfn
.listIterator();
3159 while (lfni
.hasNext()) {
3160 saa
[i
][0] += (String
)lfni
.next();
3163 saa
[i
][0] = saa
[i
][0].trim();
3165 saa
[i
][1] = fi
.getType()+"";
3171 public void removeFvImageNameValue (int i
, String attributeName
) {
3172 XmlObject o
= getfpdFlash().getFvImages();
3176 XmlCursor cursor
= o
.newCursor();
3177 QName qFvImage
= new QName(xmlNs
, "FvImage");
3178 if (cursor
.toChild(qFvImage
)) {
3179 for (int j
= 0; j
< i
; ++j
) {
3180 cursor
.toNextSibling(qFvImage
);
3182 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3183 removeFvImageNameValue (fi
, attributeName
);
3187 /**Remove from fi the attribute pair with attributeName in FvImageOptions.
3189 * @param attributeName
3191 public void removeFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String attributeName
) {
3192 if (fi
.getFvImageOptions() != null && fi
.getFvImageOptions().getNameValueList() != null) {
3193 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3194 while (li
.hasNext()) {
3195 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3196 if (nv
.getName().equals(attributeName
)) {
3203 public void removeTypedNamedFvImageNameValue (String fvName
, String type
, String optName
) {
3204 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName(fvName
, type
);
3205 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3206 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3207 removeFvImageNameValue (fi
, optName
);
3211 /**Add name-value pair to FvImage element with type.
3212 * @param fvName FV name to add name-value pair.
3213 * @param type FvImage attribute.
3217 public void setTypedNamedFvImageNameValue (String fvName
, String type
, String name
, String value
) {
3218 boolean fvImageExists
= false;
3219 if (getfpdFlash().getFvImages() == null) {
3222 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3226 ListIterator li
= l
.listIterator();
3227 while(li
.hasNext()) {
3228 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3229 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3232 if (!fi
.getFvImageNamesList().contains(fvName
)) {
3235 fvImageExists
= true;
3236 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3239 if (!fvImageExists
) {
3240 HashMap
<String
, String
> map
= new HashMap
<String
, String
>();
3241 map
.put(name
, value
);
3242 genFvImagesFvImage(new String
[]{fvName
}, type
, map
);
3246 /**Add to all FvImage elements with type, the name-value pair.
3251 public void setTypedFvImageNameValue (String type
, String name
, String value
) {
3252 if (getfpdFlash().getFvImages() == null) {
3255 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3259 ListIterator li
= l
.listIterator();
3260 while(li
.hasNext()) {
3261 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3262 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3265 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3270 public void setFvImagesFvImageNameValue (int i
, String name
, String value
) {
3271 XmlObject o
= getfpdFlash().getFvImages();
3275 XmlCursor cursor
= o
.newCursor();
3276 QName qFvImage
= new QName(xmlNs
, "FvImage");
3277 if (cursor
.toChild(qFvImage
)) {
3278 for (int j
= 0; j
< i
; ++j
) {
3279 cursor
.toNextSibling(qFvImage
);
3281 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3282 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3287 /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before.
3293 public void setFvImagesFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String name
, String value
, String newName
) {
3294 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3295 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.addNewFvImageOptions().addNewNameValue();
3298 if (newName
!= null) {
3299 nv
.setName(newName
);
3304 XmlCursor cursor
= fi
.getFvImageOptions().newCursor();
3305 if (cursor
.toFirstChild()) {
3307 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= (FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
)cursor
.getObject();
3308 if (nv
.getName().equals(name
)) {
3310 if (newName
!= null) {
3311 nv
.setName(newName
);
3316 }while (cursor
.toNextSibling());
3319 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.getFvImageOptions().addNewNameValue();
3322 if (newName
!= null) {
3323 nv
.setName(newName
);
3328 public void getFvImagesFvImageOptions (String fvName
, Map
<String
, String
> m
) {
3329 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName (fvName
, "Options");
3330 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3331 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3332 if (fi
== null || fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3336 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions()
3339 while (li
.hasNext()) {
3340 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3341 m
.put(nv
.getName(), nv
.getValue());
3346 public int getFvImagePosInFvImages (String fvNameList
, String type
) {
3347 XmlObject o
= getfpdFlash().getFvImages();
3353 String
[] fvNameArray
= fvNameList
.trim().split(" ");
3354 Vector
<String
> vFvNames
= new Vector
<String
>();
3357 XmlCursor cursor
= o
.newCursor();
3358 QName qFvImage
= new QName(xmlNs
, "FvImage");
3359 if (cursor
.toChild(qFvImage
)) {
3362 vFvNames
.removeAllElements();
3363 for (int i
= 0; i
< fvNameArray
.length
; ++i
) {
3364 vFvNames
.add(fvNameArray
[i
]);
3366 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3367 if (!fi
.getType().toString().equals(type
)) {
3370 if (fi
.getFvImageNamesList() == null || fi
.getFvImageNamesList().size() != vFvNames
.size()) {
3373 ListIterator
<String
> li
= fi
.getFvImageNamesList().listIterator();
3374 while (li
.hasNext()) {
3375 String name
= li
.next();
3376 vFvNames
.remove(name
);
3378 if (vFvNames
.size() == 0) {
3383 }while (cursor
.toNextSibling(qFvImage
));
3389 /**Get FvImage Options for FvImage i
3390 * @param i the ith FvImage
3392 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
3393 XmlObject o
= getfpdFlash().getFvImages();
3397 XmlCursor cursor
= o
.newCursor();
3398 QName qFvImage
= new QName(xmlNs
, "FvImage");
3399 if (cursor
.toChild(qFvImage
)) {
3400 for (int j
= 0; j
< i
; ++j
) {
3401 cursor
.toNextSibling(qFvImage
);
3403 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3404 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
3408 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3409 while(li
.hasNext()){
3410 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3411 m
.put(nv
.getName(), nv
.getValue());
3418 Get platform header element
3419 @return PlatformHeaderDocument.PlatformHeader
3421 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
3422 if (fpdHdr
== null) {
3423 fpdHdr
= fpdRoot
.addNewPlatformHeader();
3429 public String
getFpdHdrPlatformName() {
3430 return getFpdHdr().getPlatformName();
3433 public String
getFpdHdrGuidValue() {
3434 return getFpdHdr().getGuidValue();
3437 public String
getFpdHdrVer() {
3438 return getFpdHdr().getVersion();
3441 public String
getFpdHdrAbs() {
3442 return getFpdHdr().getAbstract();
3445 public String
getFpdHdrDescription() {
3446 return getFpdHdr().getDescription();
3449 public String
getFpdHdrCopyright() {
3450 return getFpdHdr().getCopyright();
3453 public String
getFpdHdrLicense() {
3454 LicenseDocument
.License l
= getFpdHdr().getLicense();
3458 return l
.getStringValue();
3461 public String
getFpdHdrUrl() {
3462 LicenseDocument
.License l
= getFpdHdr().getLicense();
3469 public String
getFpdHdrSpec() {
3471 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3472 // return getFpdHdr().getSpecification();
3475 public void setFpdHdrPlatformName(String name
){
3476 getFpdHdr().setPlatformName(name
);
3479 public void setFpdHdrGuidValue(String guid
){
3480 getFpdHdr().setGuidValue(guid
);
3483 public void setFpdHdrVer(String v
){
3484 getFpdHdr().setVersion(v
);
3487 public void setFpdHdrAbs(String abs
) {
3488 getFpdHdr().setAbstract(abs
);
3491 public void setFpdHdrDescription(String desc
){
3492 getFpdHdr().setDescription(desc
);
3495 public void setFpdHdrCopyright(String cr
) {
3496 getFpdHdr().setCopyright(cr
);
3499 public void setFpdHdrLicense(String license
){
3500 LicenseDocument
.License l
= getFpdHdr().getLicense();
3502 getFpdHdr().addNewLicense().setStringValue(license
);
3505 l
.setStringValue(license
);
3509 public void setFpdHdrUrl(String url
){
3510 LicenseDocument
.License l
= getFpdHdr().getLicense();
3516 public void setFpdHdrSpec(String s
){
3517 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3518 getFpdHdr().setSpecification(s
);
3521 Save the processed xml contents to file
3523 @param fpdFile The file to save xml contents
3524 @throws IOException Exceptions during file operation
3526 public void saveAs(File fpdFile
) throws IOException
{
3528 XmlOptions options
= new XmlOptions();
3530 options
.setCharacterEncoding("UTF-8");
3531 options
.setSavePrettyPrint();
3532 options
.setSavePrettyPrintIndent(2);
3534 fpdd
.save(fpdFile
, options
);
3535 } catch (IOException e
) {
3536 e
.printStackTrace();
3541 private String
listToString(List l
) {
3546 ListIterator li
= l
.listIterator();
3547 while(li
.hasNext()) {
3554 private void removeElement(XmlObject o
) {
3555 XmlCursor cursor
= o
.newCursor();
3561 class PcdItemTypeConflictException
extends Exception
{
3566 private static final long serialVersionUID
= 1L;
3567 private String details
= null;
3569 PcdItemTypeConflictException(String pcdName
, String info
){
3570 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(info
);
3571 details
= pcdName
+ " ItemType Conflicts with " + mi
.getName() + " in Pkg " + mi
.getPackageId().getName();
3574 public String
getMessage() {
3579 class PcdDeclNotFound
extends Exception
{
3584 private static final long serialVersionUID
= 1L;
3585 private String details
= null;
3587 PcdDeclNotFound(String info
) {
3588 details
= "PcdDeclNotFound: " + info
;
3591 public String
getMessage() {
3596 class PcdValueMalFormed
extends Exception
{
3601 private static final long serialVersionUID
= 1L;
3602 private String details
= null;
3604 PcdValueMalFormed(String info
) {
3605 details
= "PcdValueMalFormed: " + info
;
3608 public String
getMessage() {