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();
1112 public void updateModuleSAOptionsOpt(String moduleKey
, int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1113 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1114 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
1117 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
1118 XmlCursor cursor
= opts
.newCursor();
1119 if (cursor
.toFirstChild()) {
1120 for (int j
= 0; j
< i
; ++j
){
1121 cursor
.toNextSibling();
1123 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
1124 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1129 /**add pcd information of module mi to a ModuleSA.
1131 * @param moduleSa if null, generate a new ModuleSA.
1133 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi
, String arch
, ModuleSADocument
.ModuleSA moduleSa
) throws Exception
{
1134 //ToDo add Arch filter
1137 if (moduleSa
== null) {
1138 moduleSa
= genModuleSA(mi
, arch
);
1141 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(mi
);
1142 if (msa
.getPcdCoded() == null) {
1146 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
1147 m
.put("ModuleSurfaceArea", msa
);
1148 SurfaceAreaQuery
.setDoc(m
);
1149 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, mi
);
1151 // Implementing InitializePlatformPcdBuildDefinitions
1153 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
1154 ListIterator li
= l
.listIterator();
1155 while(li
.hasNext()) {
1156 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
1157 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
1158 if (spdPcd
== null) {
1162 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module " + mi
.getName());
1165 // AddItem to ModuleSA PcdBuildDefinitions
1167 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue() : msaPcd
.getDefaultValue();
1169 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(), msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType()+"", defaultVal
, moduleSa
);
1173 catch (Exception e
){
1180 private PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
LookupPcdDeclaration (PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
, PackageIdentification
[] depPkgs
) {
1182 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= null;
1183 for (int i
= 0; i
< depPkgs
.length
; ++i
) {
1185 XmlObject
[] xo
= SurfaceAreaQuery
.getSpdPcdDeclarations(depPkgs
[i
]);
1189 for (int j
= 0; j
< xo
.length
; ++j
) {
1190 spdPcd
= (PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
)xo
[j
];
1191 if (msaPcd
.getTokenSpaceGuidCName() == null) {
1192 if (spdPcd
.getCName().equals(msaPcd
.getCName())) {
1197 if (spdPcd
.getCName().equals(msaPcd
.getCName()) && spdPcd
.getTokenSpaceGuidCName().equals(msaPcd
.getTokenSpaceGuidCName())) {
1208 private ModuleSADocument
.ModuleSA
genModuleSA (ModuleIdentification mi
, String arch
) {
1209 PackageIdentification pi
= WorkspaceProfile
.getPackageForModule(mi
);
1210 ModuleSADocument
.ModuleSA msa
= getfpdFrameworkModules().addNewModuleSA();
1211 XmlCursor cursor
= msa
.newCursor();
1213 String comment
= "Mod: " + mi
.getName() + " Type: " + SurfaceAreaQuery
.getModuleType(mi
) + " Path: "
1214 + mi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
1215 cursor
.insertComment(comment
);
1218 e
.printStackTrace();
1223 msa
.setModuleGuid(mi
.getGuid());
1224 msa
.setModuleVersion(mi
.getVersion());
1225 msa
.setPackageGuid(pi
.getGuid());
1226 msa
.setPackageVersion(pi
.getVersion());
1228 Vector
<String
> v
= new Vector
<String
>();
1230 msa
.setSupArchList(v
);
1236 private void genPcdData (String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
, ModuleSADocument
.ModuleSA moduleSa
)
1237 throws PcdItemTypeConflictException
, PcdValueMalFormed
{
1238 if (moduleSa
.getPcdBuildDefinition() == null){
1239 moduleSa
.addNewPcdBuildDefinition();
1242 // constructe pcd to modulesa mapping first.
1243 // Attention : for any error condition, remove from map this pcd.
1245 ArrayList
<String
> pcdConsumer
= LookupPlatformPcdData(cName
+ " " + tsGuid
);
1246 if (pcdConsumer
== null) {
1247 pcdConsumer
= new ArrayList
<String
>();
1250 // Check whether this PCD has already added to ModuleSA, if so, just return.
1252 String moduleInfo
= moduleSa
.getModuleGuid().toLowerCase() + " " + moduleSa
.getModuleVersion()
1253 + " " + moduleSa
.getPackageGuid().toLowerCase() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
1254 for (int i
= 0; i
< pcdConsumer
.size(); ++i
) {
1255 String pcdInfo
= pcdConsumer
.get(i
);
1256 if (moduleInfo
.equals(pcdInfo
.substring(0, pcdInfo
.lastIndexOf(" ")))){
1261 // Using existing Pcd type, if this pcd already exists in other ModuleSA
1263 if (pcdConsumer
.size() > 0) {
1265 itemType
= itemType (pcdConsumer
.get(0));
1267 String listValue
= moduleInfo
+ " " + itemType
;
1268 pcdConsumer
.add(listValue
);
1269 dynPcdMap
.put(cName
+ " " + tsGuid
, pcdConsumer
);
1271 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData fpdPcd
= moduleSa
.getPcdBuildDefinition().addNewPcdData();
1272 fpdPcd
.setCName(cName
);
1273 fpdPcd
.setToken(token
);
1274 fpdPcd
.setTokenSpaceGuidCName(tsGuid
);
1275 fpdPcd
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1276 fpdPcd
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1278 if (defaultVal
!= null){
1279 fpdPcd
.setValue(defaultVal
);
1282 if (dataType
.equals("UINT8") || dataType
.equals("UINT16") || dataType
.equals("UINT32") || dataType
.equals("UINT64")) {
1283 fpdPcd
.setValue("0");
1285 if (dataType
.equals("BOOLEAN")){
1286 fpdPcd
.setValue("FALSE");
1288 if (dataType
.equals("VOID*")) {
1289 fpdPcd
.setValue("");
1293 // Using existing pcd value, if this pcd already exists in other moduleSa.
1295 if (defaultPcdValue
.get(cName
+ " " + tsGuid
) == null) {
1296 defaultPcdValue
.put(cName
+ " " + tsGuid
, fpdPcd
.getValue());
1299 fpdPcd
.setValue(defaultPcdValue
.get(cName
+ " " + tsGuid
));
1302 if (dataType
.equals("UINT8")){
1303 fpdPcd
.setMaxDatumSize(1);
1305 if (dataType
.equals("UINT16")) {
1306 fpdPcd
.setMaxDatumSize(2);
1308 if (dataType
.equals("UINT32")) {
1309 fpdPcd
.setMaxDatumSize(4);
1311 if (dataType
.equals("UINT64")){
1312 fpdPcd
.setMaxDatumSize(8);
1314 if (dataType
.equals("BOOLEAN")){
1315 fpdPcd
.setMaxDatumSize(1);
1317 if (dataType
.equals("VOID*")) {
1318 int maxSize
= setMaxSizeForPointer(fpdPcd
.getValue());
1319 fpdPcd
.setMaxDatumSize(maxSize
);
1323 if (itemType
.equals("DYNAMIC") || itemType
.equals("DYNAMIC_EX")) {
1324 ArrayList
<String
> al
= LookupDynamicPcdBuildDefinition(cName
+ " " + tsGuid
);
1326 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.
1327 // so need to add one dyn pcd.
1329 if (al
.size() == 1) {
1330 addDynamicPcdBuildData(cName
, token
, tsGuid
, itemType
, dataType
, defaultVal
);
1336 public int setMaxSizeForPointer(String datum
) throws PcdValueMalFormed
{
1337 if (datum
== null) {
1340 char ch
= datum
.charAt(0);
1344 // For void* type PCD, only three datum is support:
1345 // 1) Unicode: string with start char is "L"
1346 // 2) Ansci: String is ""
1347 // 3) byte array: String start char "{"
1350 start
= datum
.indexOf('\"');
1351 end
= datum
.lastIndexOf('\"');
1352 if ((start
> end
) ||
1353 (end
> datum
.length())||
1354 ((start
== end
) && (datum
.length() > 0))) {
1355 //ToDo Error handling here
1356 throw new PcdValueMalFormed (datum
);
1359 strValue
= datum
.substring(start
+ 1, end
);
1360 return strValue
.length() * 2;
1361 } else if (ch
== '\"'){
1362 start
= datum
.indexOf('\"');
1363 end
= datum
.lastIndexOf('\"');
1364 if ((start
> end
) ||
1365 (end
> datum
.length())||
1366 ((start
== end
) && (datum
.length() > 0))) {
1367 throw new PcdValueMalFormed (datum
);
1369 strValue
= datum
.substring(start
+ 1, end
);
1370 return strValue
.length();
1371 } else if (ch
=='{') {
1372 String
[] strValueArray
;
1374 start
= datum
.indexOf('{');
1375 end
= datum
.lastIndexOf('}');
1376 strValue
= datum
.substring(start
+ 1, end
);
1377 strValue
= strValue
.trim();
1378 if (strValue
.length() == 0) {
1381 strValueArray
= strValue
.split(",");
1382 for (int index
= 0; index
< strValueArray
.length
; index
++) {
1383 Integer value
= Integer
.decode(strValueArray
[index
].trim());
1386 // "[FPD file error] The datum type of PCD %s in %s is VOID*, "+
1387 // "it must be a byte array. But the element of %s exceed the byte range",
1388 throw new PcdValueMalFormed (datum
);
1391 return strValueArray
.length
;
1395 // "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+
1396 // "1) UNICODE string: like L\"xxxx\";\r\n"+
1397 // "2) ANSIC string: like \"xxx\";\r\n"+
1398 // "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+
1399 // "but the datum in seems does not following above format!",
1400 throw new PcdValueMalFormed (datum
);
1405 private ArrayList
<String
> LookupDynamicPcdBuildDefinition(String dynPcdKey
) {
1406 ArrayList
<String
> al
= dynPcdMap
.get(dynPcdKey
);
1411 private ArrayList
<String
> LookupPlatformPcdData(String pcdKey
) {
1413 return dynPcdMap
.get(pcdKey
);
1416 public int getDynamicPcdBuildDataCount() {
1417 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1418 removeElement(getfpdDynPcdBuildDefs());
1419 fpdDynPcdBuildDefs
= null;
1422 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1425 public void getDynamicPcdBuildData(String
[][] saa
) {
1426 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1427 removeElement(getfpdDynPcdBuildDefs());
1428 fpdDynPcdBuildDefs
= null;
1431 List
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> l
= getfpdDynPcdBuildDefs().getPcdBuildDataList();
1432 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> li
= l
.listIterator();
1434 while(li
.hasNext()) {
1435 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcd
= li
.next();
1436 saa
[i
][0] = dynPcd
.getCName();
1437 saa
[i
][1] = dynPcd
.getToken().toString();
1438 saa
[i
][2] = dynPcd
.getTokenSpaceGuidCName();
1439 saa
[i
][3] = dynPcd
.getMaxDatumSize()+"";
1440 saa
[i
][4] = dynPcd
.getDatumType().toString();
1446 public void addDynamicPcdBuildData(String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
)
1447 throws PcdValueMalFormed
{
1448 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcdData
= getfpdDynPcdBuildDefs().addNewPcdBuildData();
1449 dynPcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1450 dynPcdData
.setCName(cName
);
1451 dynPcdData
.setToken(token
);
1452 dynPcdData
.setTokenSpaceGuidCName(tsGuid
);
1453 dynPcdData
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1455 BigInteger bigInt
= new BigInteger("0");
1456 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= dynPcdData
.addNewSkuInfo();
1457 skuInfo
.setSkuId(bigInt
);
1458 if (defaultVal
!= null){
1459 skuInfo
.setValue(defaultVal
);
1462 if (dataType
.equals("UINT8")){
1463 skuInfo
.setValue("0");
1465 if (dataType
.equals("UINT16")) {
1466 skuInfo
.setValue("0");
1468 if (dataType
.equals("UINT32")) {
1469 skuInfo
.setValue("0");
1471 if (dataType
.equals("UINT64")){
1472 skuInfo
.setValue("0");
1474 if (dataType
.equals("BOOLEAN")){
1475 skuInfo
.setValue("false");
1477 if (dataType
.equals("VOID*")) {
1478 skuInfo
.setValue("");
1481 if (dataType
.equals("UINT8")){
1482 dynPcdData
.setMaxDatumSize(1);
1484 if (dataType
.equals("UINT16")) {
1485 dynPcdData
.setMaxDatumSize(2);
1487 if (dataType
.equals("UINT32")) {
1488 dynPcdData
.setMaxDatumSize(4);
1490 if (dataType
.equals("UINT64")){
1491 dynPcdData
.setMaxDatumSize(8);
1493 if (dataType
.equals("BOOLEAN")){
1494 dynPcdData
.setMaxDatumSize(1);
1496 if (dataType
.equals("VOID*")) {
1497 int maxSize
= setMaxSizeForPointer(defaultVal
);
1498 dynPcdData
.setMaxDatumSize(maxSize
);
1502 public void removeDynamicPcdBuildData(String cName
, String tsGuid
) {
1503 XmlObject o
= fpdRoot
.getDynamicPcdBuildDefinitions();
1508 XmlCursor cursor
= o
.newCursor();
1509 if (cursor
.toFirstChild()) {
1511 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdBuildData
=
1512 (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1513 if (pcdBuildData
.getCName().equals(cName
) && pcdBuildData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
1515 if (getDynamicPcdBuildDataCount() == 1) {
1523 while (cursor
.toNextSibling());
1528 // Get the Sku Info count of ith dyn pcd element.
1530 public int getDynamicPcdSkuInfoCount(int i
){
1531 if (fpdRoot
.getDynamicPcdBuildDefinitions() == null || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null
1532 || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {
1536 int skuInfoCount
= 0;
1537 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1538 if (cursor
.toFirstChild()) {
1539 for (int j
= 0; j
< i
; ++j
) {
1540 cursor
.toNextSibling();
1542 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1543 if (pcdData
.getSkuInfoList() == null) {
1547 skuInfoCount
= pcdData
.getSkuInfoList().size();
1551 return skuInfoCount
;
1554 public void getDynamicPcdSkuInfos(int i
, String
[][] saa
){
1555 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1556 removeElement(getfpdDynPcdBuildDefs());
1557 fpdDynPcdBuildDefs
= null;
1561 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1562 if (cursor
.toFirstChild()) {
1563 for (int j
= 0; j
< i
; ++j
) {
1564 cursor
.toNextSibling();
1566 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1567 if (pcdData
.getSkuInfoList() == null) {
1572 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1574 while (li
.hasNext()) {
1575 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1576 saa
[k
][0] = skuInfo
.getSkuId()+"";
1577 saa
[k
][1] = skuInfo
.getVariableName();
1578 saa
[k
][2] = skuInfo
.getVariableGuid();
1579 saa
[k
][3] = skuInfo
.getVariableOffset();
1580 saa
[k
][4] = skuInfo
.getHiiDefaultValue();
1581 saa
[k
][5] = skuInfo
.getVpdOffset();
1582 saa
[k
][6] = skuInfo
.getValue();
1592 public String
getDynamicPcdBuildDataValue(int i
){
1593 String value
= null;
1594 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1595 removeElement(getfpdDynPcdBuildDefs());
1596 fpdDynPcdBuildDefs
= null;
1600 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1601 if (cursor
.toFirstChild()) {
1602 for (int j
= 0; j
< i
; ++j
) {
1603 cursor
.toNextSibling();
1605 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1606 if (pcdData
.getSkuInfoList() == null) {
1610 value
= pcdData
.getSkuInfoArray(0).getValue();
1617 public String
getDynamicPcdBuildDataVpdOffset(int i
){
1618 String vpdOffset
= null;
1619 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1620 removeElement(getfpdDynPcdBuildDefs());
1621 fpdDynPcdBuildDefs
= null;
1625 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1626 if (cursor
.toFirstChild()) {
1627 for (int j
= 0; j
< i
; ++j
) {
1628 cursor
.toNextSibling();
1630 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1631 if (pcdData
.getSkuInfoList() == null) {
1635 vpdOffset
= pcdData
.getSkuInfoArray(0).getVpdOffset();
1642 public void removeDynamicPcdBuildDataSkuInfo(int i
) {
1643 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1644 removeElement(getfpdDynPcdBuildDefs());
1645 fpdDynPcdBuildDefs
= null;
1649 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1650 if (cursor
.toFirstChild()) {
1651 for (int j
= 0; j
< i
; ++j
) {
1652 cursor
.toNextSibling();
1654 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1655 if (pcdData
.getSkuInfoList() == null) {
1660 QName qSkuInfo
= new QName(xmlNs
, "SkuInfo");
1661 cursor
.toChild(qSkuInfo
);
1668 // generate sku info for ith dyn pcd build data.
1670 public void genDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1671 String hiiDefault
, String vpdOffset
, String value
, int i
) {
1672 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1676 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1677 if (cursor
.toFirstChild()) {
1678 for (int j
= 0; j
< i
; ++j
) {
1679 cursor
.toNextSibling();
1681 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1682 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= pcdData
.addNewSkuInfo();
1683 skuInfo
.setSkuId(new BigInteger(id
));
1684 if (varName
!= null){
1685 skuInfo
.setVariableName(varName
);
1686 skuInfo
.setVariableGuid(varGuid
);
1687 skuInfo
.setVariableOffset(varOffset
);
1688 skuInfo
.setHiiDefaultValue(hiiDefault
);
1690 else if (vpdOffset
!= null){
1691 skuInfo
.setVpdOffset(vpdOffset
);
1694 skuInfo
.setValue(value
);
1699 public void updateDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1700 String hiiDefault
, String vpdOffset
, String value
, int i
){
1701 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1705 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1706 if (cursor
.toFirstChild()) {
1707 for (int j
= 0; j
< i
; ++j
) {
1708 cursor
.toNextSibling();
1710 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1711 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1712 while (li
.hasNext()) {
1713 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1714 if (skuInfo
.getSkuId().toString().equals(id
)){
1715 if (varName
!= null){
1716 skuInfo
.setVariableName(varName
);
1717 skuInfo
.setVariableGuid(varGuid
);
1718 skuInfo
.setVariableOffset(varOffset
);
1719 skuInfo
.setHiiDefaultValue(hiiDefault
);
1721 else if (vpdOffset
!= null){
1722 skuInfo
.setVpdOffset(vpdOffset
);
1725 skuInfo
.setValue(value
);
1733 public BuildOptionsDocument
.BuildOptions
getfpdBuildOpts() {
1734 if (fpdBuildOpts
== null) {
1735 fpdBuildOpts
= fpdRoot
.addNewBuildOptions();
1737 return fpdBuildOpts
;
1740 public void genBuildOptionsUserExtensions(String fvName
, String outputFileName
, Vector
<String
[]> includeModules
) {
1741 QName elementFvName
= new QName (xmlNs
, "FvName");
1742 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1743 QName elementInfFileName
= new QName(xmlNs
, "InfFileName");
1744 QName elementModule
= new QName(xmlNs
, "Module");
1746 UserExtensionsDocument
.UserExtensions userExts
= getfpdBuildOpts().addNewUserExtensions();
1747 userExts
.setUserID("IMAGES");
1748 userExts
.setIdentifier(new BigInteger("1"));
1749 XmlCursor cursor
= userExts
.newCursor();
1750 cursor
.toEndToken();
1752 cursor
.beginElement(elementFvName
);
1753 cursor
.insertChars(fvName
);
1754 cursor
.toNextToken();
1756 cursor
.beginElement(elementInfFileName
);
1757 cursor
.insertChars(fvName
+ ".inf");
1758 cursor
.toNextToken();
1760 cursor
.beginElement(elementIncludeModules
);
1761 for (int i
= 0; i
< includeModules
.size(); ++i
) {
1762 cursor
.beginElement(elementModule
);
1763 cursor
.insertAttributeWithValue("ModuleGuid", includeModules
.get(i
)[0]);
1764 if (!includeModules
.get(i
)[1].equals("null") && includeModules
.get(i
)[1].length() != 0) {
1765 cursor
.insertAttributeWithValue("ModuleVersion", includeModules
.get(i
)[1]);
1767 cursor
.insertAttributeWithValue("PackageGuid", includeModules
.get(i
)[2]);
1768 if (!includeModules
.get(i
)[3].equals("null") && includeModules
.get(i
)[3].length() != 0) {
1769 cursor
.insertAttributeWithValue("PackageVersion", includeModules
.get(i
)[3]);
1772 cursor
.insertAttributeWithValue("Arch", includeModules
.get(i
)[4]);
1773 cursor
.toEndToken();
1774 cursor
.toNextToken();
1779 public int getUserExtsIncModCount (String fvName
) {
1780 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1783 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1784 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1785 while (li
.hasNext()) {
1786 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1787 if (!ues
.getUserID().equals("IMAGES")) {
1790 XmlCursor cursor
= ues
.newCursor();
1791 cursor
.toFirstChild();
1792 String elementName
= cursor
.getTextValue();
1793 if (elementName
.equals(fvName
)) {
1794 cursor
.toNextSibling(elementIncludeModules
);
1795 if (cursor
.toFirstChild()) {
1797 for (i
= 1; cursor
.toNextSibling(); ++i
);
1809 public void getUserExtsIncMods(String fvName
, String
[][] saa
) {
1810 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1814 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1815 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1816 QName attribUserId
= new QName ("UserID");
1817 QName elementFvName
= new QName (xmlNs
, "FvName");
1818 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1819 QName attribModuleGuid
= new QName("ModuleGuid");
1820 QName attribModuleVersion
= new QName("ModuleVersion");
1821 QName attribPackageGuid
= new QName("PackageGuid");
1822 QName attribPackageVersion
= new QName("PackageVersion");
1823 QName attribArch
= new QName("Arch");
1825 if (cursor
.toChild(elementUserExts
)) {
1828 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1829 cursor
.toChild(elementFvName
);
1830 String elementName
= cursor
.getTextValue();
1831 if (elementName
.equals(fvName
)) {
1832 cursor
.toNextSibling(elementIncludeModules
);
1833 if (cursor
.toFirstChild()) {
1836 saa
[i
][0] = cursor
.getAttributeText(attribModuleGuid
);
1837 saa
[i
][1] = cursor
.getAttributeText(attribModuleVersion
);
1838 saa
[i
][2] = cursor
.getAttributeText(attribPackageGuid
);
1839 saa
[i
][3] = cursor
.getAttributeText(attribPackageVersion
);
1840 saa
[i
][4] = cursor
.getAttributeText(attribArch
);
1842 }while (cursor
.toNextSibling());
1848 }while (cursor
.toNextSibling(elementUserExts
));
1854 public void updateBuildOptionsUserExtensions (String oldFvName
, String newFvName
) {
1855 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1858 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1859 while (li
.hasNext()) {
1860 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1861 if (!ues
.getUserID().equals("IMAGES")) {
1864 XmlCursor cursor
= ues
.newCursor();
1865 cursor
.toFirstChild();
1866 String elementName
= cursor
.getTextValue();
1867 if (elementName
.equals(oldFvName
)) {
1868 cursor
.setTextValue(newFvName
);
1875 public void removeBuildOptionsUserExtensions (String fvName
) {
1876 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1880 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1881 while (li
.hasNext()) {
1882 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1883 if (!ues
.getUserID().equals("IMAGES")) {
1886 XmlCursor cursor
= ues
.newCursor();
1887 cursor
.toFirstChild();
1888 String elementName
= cursor
.getTextValue();
1889 if (elementName
.equals(fvName
)) {
1901 public void genBuildOptionsUserDefAntTask (String id
, String fileName
, String execOrder
) {
1902 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1903 if (udats
== null) {
1904 udats
= getfpdBuildOpts().addNewUserDefinedAntTasks();
1907 AntTaskDocument
.AntTask at
= udats
.addNewAntTask();
1908 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1911 private void setBuildOptionsUserDefAntTask(String id
, String fileName
, String execOrder
, AntTaskDocument
.AntTask at
) {
1912 at
.setId(new Integer(id
));
1913 XmlCursor cursor
= at
.newCursor();
1914 if (fileName
!= null){
1915 at
.setFilename(fileName
);
1917 else if (cursor
.toChild(xmlNs
, "Filename")) {
1920 if (execOrder
!= null) {
1921 at
.setAntCmdOptions(execOrder
);
1923 else if (cursor
.toChild(xmlNs
, "AntCmdOptions")) {
1929 public void removeBuildOptionsUserDefAntTask(int i
) {
1930 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1934 XmlCursor cursor
= o
.newCursor();
1935 if (cursor
.toFirstChild()) {
1936 for (int j
= 0; j
< i
; ++j
) {
1937 cursor
.toNextSibling();
1940 if (getBuildOptionsUserDefAntTaskCount() == 0) {
1948 public void updateBuildOptionsUserDefAntTask(int i
, String id
, String fileName
, String execOrder
){
1949 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1953 XmlCursor cursor
= o
.newCursor();
1954 if (cursor
.toFirstChild()) {
1955 for (int j
= 0; j
< i
; ++j
) {
1956 cursor
.toNextSibling();
1958 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)cursor
.getObject();
1959 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1964 public int getBuildOptionsUserDefAntTaskCount() {
1965 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1966 if (udats
== null || udats
.getAntTaskList() == null) {
1970 return udats
.getAntTaskList().size();
1973 public void getBuildOptionsUserDefAntTasks(String
[][] saa
) {
1974 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1975 if (udats
== null || udats
.getAntTaskList() == null) {
1979 List
<AntTaskDocument
.AntTask
> l
= udats
.getAntTaskList();
1980 ListIterator li
= l
.listIterator();
1982 while (li
.hasNext()) {
1983 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)li
.next();
1984 saa
[i
][0] = at
.getId() + "";
1985 saa
[i
][1] = saa
[i
][2] = "";
1986 if (at
.getFilename() != null){
1987 saa
[i
][1] = at
.getFilename();
1989 if (at
.getAntCmdOptions() != null) {
1990 saa
[i
][2] = at
.getAntCmdOptions();
1995 public void genBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1996 OptionsDocument
.Options opts
= getfpdBuildOpts().getOptions();
1998 opts
= getfpdBuildOpts().addNewOptions();
2000 OptionDocument
.Option opt
= opts
.addNewOption();
2001 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2004 private void setBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
, OptionDocument
.Option opt
){
2005 opt
.setStringValue(contents
);
2007 opt
.setBuildTargets(buildTargets
);
2008 opt
.setToolChainFamily(toolChain
);
2009 opt
.setTagName(tagName
);
2010 opt
.setToolCode(toolCmd
);
2012 if (archList
!= null) {
2013 opt
.setSupArchList(archList
);
2016 if (opt
.isSetSupArchList()) {
2017 opt
.unsetSupArchList();
2022 public void removeBuildOptionsOpt(int i
){
2024 XmlObject o
= getfpdBuildOpts().getOptions();
2029 XmlCursor cursor
= o
.newCursor();
2030 if (cursor
.toFirstChild()) {
2031 for (int j
= 0; j
< i
; ++j
) {
2032 cursor
.toNextSibling();
2035 if (getBuildOptionsOptCount() == 0) {
2043 public void updateBuildOptionsOpt(int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
2044 XmlObject o
= getfpdBuildOpts().getOptions();
2049 XmlCursor cursor
= o
.newCursor();
2050 if (cursor
.toFirstChild()) {
2051 for (int j
= 0; j
< i
; ++j
) {
2052 cursor
.toNextSibling();
2054 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
2055 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2060 public int getBuildOptionsOptCount(){
2061 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2064 return getfpdBuildOpts().getOptions().getOptionList().size();
2067 public void getBuildOptionsOpts(String
[][] saa
) {
2068 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2072 List
<OptionDocument
.Option
> lOpt
= getfpdBuildOpts().getOptions().getOptionList();
2073 ListIterator li
= lOpt
.listIterator();
2075 while(li
.hasNext()) {
2076 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
2077 if (opt
.getBuildTargets() != null) {
2078 saa
[i
][0] = listToString(opt
.getBuildTargets());
2080 saa
[i
][1] = opt
.getToolChainFamily();
2081 if (opt
.getSupArchList() != null){
2082 saa
[i
][2] = listToString(opt
.getSupArchList());
2085 saa
[i
][3] = opt
.getToolCode();
2086 saa
[i
][4] = opt
.getTagName();
2087 saa
[i
][5] = opt
.getStringValue();
2093 public void genBuildOptionsFfs(String ffsKey
, String type
) {
2094 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2095 ffs
.setFfsKey(ffsKey
);
2097 ffs
.addNewSections().setEncapsulationType(type
);
2101 public void updateBuildOptionsFfsSectionsType(int i
, String type
) {
2102 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2104 ffs
.addNewSections().setEncapsulationType(type
);
2108 public void genBuildOptionsFfsAttribute(int i
, String name
, String value
) {
2109 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2110 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= ffs
.addNewAttribute();
2111 attrib
.setName(name
);
2112 attrib
.setValue(value
);
2115 /**update jth attribute of ith ffs.
2119 public void updateBuildOptionsFfsAttribute(int i
, int j
, String name
, String value
){
2120 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2121 XmlCursor cursor
= ffs
.newCursor();
2122 QName qAttrib
= new QName(xmlNs
, "Attribute");
2123 if (cursor
.toChild(qAttrib
)) {
2124 for (int k
= 0; k
< j
; ++k
) {
2125 cursor
.toNextSibling(qAttrib
);
2127 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
)cursor
.getObject();
2128 attrib
.setName(name
);
2129 attrib
.setValue(value
);
2134 public void removeBuildOptionsFfsAttribute(int i
, int j
){
2135 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2136 XmlCursor cursor
= ffs
.newCursor();
2137 QName qAttrib
= new QName(xmlNs
, "Attribute");
2138 if (cursor
.toChild(qAttrib
)) {
2139 for (int k
= 0; k
< j
; ++k
) {
2140 cursor
.toNextSibling(qAttrib
);
2147 public void genBuildOptionsFfsSectionsSection(int i
, String sectionType
) {
2148 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2152 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2154 if (sections
== null){
2155 sections
= ffs
.addNewSections();
2157 sections
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(sectionType
));
2160 public void removeBuildOptionsFfsSectionsSection(int i
, int j
) {
2161 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2162 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2163 if (sections
== null) {
2166 XmlCursor cursor
= sections
.newCursor();
2167 QName qSection
= new QName(xmlNs
, "Section");
2168 if (cursor
.toChild(qSection
)) {
2169 for (int k
= 0; k
< j
; ++k
) {
2170 cursor
.toNextSibling(qSection
);
2177 public void updateBuildOptionsFfsSectionsSection(int i
, int j
, String type
){
2178 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2179 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2180 if (sections
== null) {
2183 XmlCursor cursor
= sections
.newCursor();
2184 QName qSection
= new QName(xmlNs
, "Section");
2185 if (cursor
.toChild(qSection
)) {
2186 for (int k
= 0; k
< j
; ++k
) {
2187 cursor
.toNextSibling(qSection
);
2189 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
)cursor
.getObject();
2190 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2195 public void genBuildOptionsFfsSectionsSections(int i
, String encapType
) {
2196 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2200 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2202 if (sections
== null){
2203 sections
= ffs
.addNewSections();
2205 sections
.addNewSections().setEncapsulationType(encapType
);
2208 public void removeBuildOptionsFfsSectionsSections(int i
, int j
) {
2209 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2210 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2211 if (sections
== null) {
2214 XmlCursor cursor
= sections
.newCursor();
2215 QName qSections
= new QName(xmlNs
, "Sections");
2216 if (cursor
.toChild(qSections
)) {
2217 for (int k
= 0; k
< j
; ++k
) {
2218 cursor
.toNextSibling(qSections
);
2225 public void updateBuildOptionsFfsSectionsSections(int i
, int j
, String type
) {
2226 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2227 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2228 if (sections
== null) {
2231 XmlCursor cursor
= sections
.newCursor();
2232 QName qSections
= new QName(xmlNs
, "Sections");
2233 if (cursor
.toChild(qSections
)) {
2234 for (int k
= 0; k
< j
; ++k
) {
2235 cursor
.toNextSibling(qSections
);
2237 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2238 sections2
.setEncapsulationType(type
);
2243 public void genBuildOptionsFfsSectionsSectionsSection(int i
, int j
, String type
) {
2244 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2248 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2249 XmlCursor cursor
= sections
.newCursor();
2250 QName qSections
= new QName(xmlNs
, "Sections");
2251 if (cursor
.toChild(qSections
)){
2252 for (int k
= 0; k
< j
; ++k
) {
2253 cursor
.toNextSibling(qSections
);
2255 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2256 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(type
));
2261 public void removeBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
) {
2262 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2263 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2264 if (sections
== null) {
2267 XmlCursor cursor
= sections
.newCursor();
2268 QName qSections
= new QName(xmlNs
, "Sections");
2269 if (cursor
.toChild(qSections
)) {
2270 for (int l
= 0; l
< j
; ++l
) {
2271 cursor
.toNextSibling(qSections
);
2273 if (cursor
.toFirstChild()) {
2275 for (; m
< k
; ++m
) {
2276 cursor
.toNextSibling();
2288 public void updateBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
, String type
) {
2289 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2290 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2291 if (sections
== null) {
2294 XmlCursor cursor
= sections
.newCursor();
2295 QName qSections
= new QName(xmlNs
, "Sections");
2296 if (cursor
.toChild(qSections
)) {
2297 for (int l
= 0; l
< j
; ++l
) {
2298 cursor
.toNextSibling(qSections
);
2300 if (cursor
.toFirstChild()) {
2301 for (int m
= 0; m
< k
; ++m
) {
2302 cursor
.toNextSibling();
2304 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
)cursor
.getObject();
2305 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2311 public void getBuildOptionsFfsSectionsSectionsSection(int i
, int j
, ArrayList
<String
> al
) {
2312 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2316 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2317 XmlCursor cursor
= sections
.newCursor();
2318 QName qSections
= new QName(xmlNs
, "Sections");
2319 if (cursor
.toChild(qSections
)){
2320 for (int k
= 0; k
< j
; ++k
) {
2321 cursor
.toNextSibling(qSections
);
2323 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2324 if (sections2
.getSectionList() == null){
2328 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
> li
= sections2
.getSectionList().listIterator();
2329 while(li
.hasNext()) {
2330 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= li
.next();
2331 if (section
.isSetSectionType()) {
2332 al
.add(section
.getSectionType().toString());
2341 public int getBuildOptionsFfsCount(){
2342 if (getfpdBuildOpts().getFfsList() == null) {
2345 return getfpdBuildOpts().getFfsList().size();
2348 public void getBuildOptionsFfsKey(String
[][] saa
) {
2349 if (getfpdBuildOpts().getFfsList() == null) {
2352 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
> li
= getfpdBuildOpts().getFfsList().listIterator();
2354 while(li
.hasNext()){
2355 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= li
.next();
2356 saa
[i
][0] = ffs
.getFfsKey();
2361 public void updateBuildOptionsFfsKey(int i
, String key
) {
2362 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2366 /**Get ith FFS key and contents.
2369 public void getBuildOptionsFfs(int i
, String
[] sa
, LinkedHashMap
<String
, String
> ffsAttribMap
, ArrayList
<String
> firstLevelSections
, ArrayList
<String
> firstLevelSection
) {
2370 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2374 sa
[0] = ffs
.getFfsKey();
2375 if (ffs
.getSections() != null) {
2376 if(ffs
.getSections().getEncapsulationType() != null){
2377 sa
[1] = ffs
.getSections().getEncapsulationType();
2379 if (ffs
.getSections().getSectionList() != null){
2380 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
> li
= ffs
.getSections().getSectionList().listIterator();
2381 while (li
.hasNext()) {
2382 firstLevelSection
.add(li
.next().getSectionType().toString());
2385 if (ffs
.getSections().getSectionsList() != null) {
2386 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
> li
= ffs
.getSections().getSectionsList().listIterator();
2387 while(li
.hasNext()) {
2388 firstLevelSections
.add(li
.next().getEncapsulationType());
2392 if (ffs
.getAttributeList() != null) {
2393 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
> li
= ffs
.getAttributeList().listIterator();
2394 while(li
.hasNext()) {
2395 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= li
.next();
2396 ffsAttribMap
.put(attrib
.getName(), attrib
.getValue());
2405 private BuildOptionsDocument
.BuildOptions
.Ffs
getFfs(int i
) {
2406 XmlObject o
= getfpdBuildOpts();
2407 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= null;
2409 XmlCursor cursor
= o
.newCursor();
2410 QName qFfs
= new QName(xmlNs
, "Ffs");
2411 if (cursor
.toChild(qFfs
)) {
2412 for (int j
= 0; j
< i
; ++j
) {
2413 cursor
.toNextSibling(qFfs
);
2415 ffs
= (BuildOptionsDocument
.BuildOptions
.Ffs
)cursor
.getObject();
2421 public void removeBuildOptionsFfs(int i
) {
2422 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2427 XmlCursor cursor
= ffs
.newCursor();
2434 public PlatformDefinitionsDocument
.PlatformDefinitions
getfpdPlatformDefs(){
2435 if (fpdPlatformDefs
== null){
2436 fpdPlatformDefs
= fpdRoot
.addNewPlatformDefinitions();
2438 return fpdPlatformDefs
;
2441 public void getPlatformDefsSupportedArchs(Vector
<Object
> archs
){
2442 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {
2445 ListIterator li
= getfpdPlatformDefs().getSupportedArchitectures().listIterator();
2446 while(li
.hasNext()) {
2447 archs
.add(li
.next());
2451 public void setPlatformDefsSupportedArchs(Vector
<Object
> archs
) {
2452 if (archs
!= null) {
2453 getfpdPlatformDefs().setSupportedArchitectures(archs
);
2456 // XmlCursor cursor = getfpdPlatformDefs().newCursor();
2457 // if (cursor.toChild(xmlNs, "SupportedArchitectures")) {
2458 // cursor.removeXml();
2460 // cursor.dispose();
2464 public void getPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2465 if (getfpdPlatformDefs().getBuildTargets() == null) {
2468 ListIterator li
= getfpdPlatformDefs().getBuildTargets().listIterator();
2469 while(li
.hasNext()) {
2470 targets
.add(li
.next());
2474 public void setPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2475 getfpdPlatformDefs().setBuildTargets(targets
);
2478 public void genPlatformDefsSkuInfo(String id
, String name
) {
2479 SkuInfoDocument
.SkuInfo skuInfo
= null;
2480 if (getfpdPlatformDefs().getSkuInfo() == null) {
2481 skuInfo
= getfpdPlatformDefs().addNewSkuInfo();
2483 skuInfo
= getfpdPlatformDefs().getSkuInfo();
2484 if (skuInfo
.getUiSkuNameList() == null || skuInfo
.getUiSkuNameList().size() == 0) {
2485 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2486 skuName
.setSkuID(new BigInteger("0"));
2487 skuName
.setStringValue("DEFAULT");
2489 if (id
.equals("0")) {
2492 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2493 skuName
.setSkuID(new BigInteger(id
));
2494 skuName
.setStringValue(name
);
2497 public int getPlatformDefsSkuInfoCount(){
2498 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2501 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();
2504 public void getPlatformDefsSkuInfos(String
[][] saa
){
2505 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2506 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
2507 removeElement(getfpdDynPcdBuildDefs());
2508 fpdDynPcdBuildDefs
= null;
2513 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
2514 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
2516 while(li
.hasNext()) {
2517 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
2518 saa
[i
][0] = sku
.getSkuID()+"";
2519 saa
[i
][1] = sku
.getStringValue();
2524 public void removePlatformDefsSkuInfo(int i
) {
2525 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2526 if (skuInfo
== null || i
== 0) {
2530 XmlCursor cursor
= skuInfo
.newCursor();
2531 if (cursor
.toFirstChild()) {
2532 for (int j
= 0; j
< i
; ++j
) {
2533 cursor
.toNextSibling();
2540 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
2541 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2542 if (skuInfo
== null || i
== 0) {
2546 XmlCursor cursor
= skuInfo
.newCursor();
2547 if (cursor
.toFirstChild()) {
2548 for (int j
= 0; j
< i
; ++j
) {
2549 cursor
.toNextSibling();
2551 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2552 sku
.setSkuID(new BigInteger(id
));
2553 sku
.setStringValue(name
);
2558 public String
getPlatformDefsInterDir(){
2559 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2562 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2565 public void setPlatformDefsInterDir(String interDir
){
2566 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2569 public String
getPlatformDefsOutputDir() {
2570 return getfpdPlatformDefs().getOutputDirectory();
2573 public void setPlatformDefsOutputDir(String outputDir
) {
2574 if (outputDir
!= null && outputDir
.length() > 0) {
2575 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2578 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2579 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2586 public FlashDocument
.Flash
getfpdFlash() {
2587 if (fpdFlash
== null) {
2588 fpdFlash
= fpdRoot
.addNewFlash();
2593 public void genFlashDefinitionFile(String file
) {
2594 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2596 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2599 fdf
.setStringValue(file
);
2602 public String
getFlashDefinitionFile() {
2603 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2608 return fdf
.getStringValue();
2611 public void genFvImagesNameValue(String name
, String value
) {
2613 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2615 fi
= getfpdFlash().addNewFvImages();
2618 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2623 public void removeFvImagesNameValue(int i
){
2625 XmlObject o
= getfpdFlash().getFvImages();
2630 QName qNameValue
= new QName(xmlNs
, "NameValue");
2631 XmlCursor cursor
= o
.newCursor();
2632 if (cursor
.toChild(qNameValue
)) {
2633 for (int j
= 0; j
< i
; ++j
) {
2634 cursor
.toNextSibling(qNameValue
);
2641 public void updateFvImagesNameValue(int i
, String name
, String value
){
2643 XmlObject o
= getfpdFlash().getFvImages();
2648 QName qNameValue
= new QName(xmlNs
, "NameValue");
2649 XmlCursor cursor
= o
.newCursor();
2650 if (cursor
.toChild(qNameValue
)) {
2651 for (int j
= 0; j
< i
; ++j
) {
2652 cursor
.toNextSibling(qNameValue
);
2654 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2661 public int getFvImagesNameValueCount() {
2663 FvImagesDocument
.FvImages fi
= null;
2664 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2667 return fi
.getNameValueList().size();
2670 public void getFvImagesNameValues(String
[][] nv
) {
2672 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2676 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2678 ListIterator li
= l
.listIterator();
2679 while (li
.hasNext()) {
2680 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2682 nv
[i
][0] = e
.getName();
2683 nv
[i
][1] = e
.getValue();
2689 public void getFvImagesFvImageFvImageNames (Vector
<String
> vImageNames
) {
2690 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2691 if (fis
== null || fis
.getFvImageList() == null) {
2695 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2696 while (li
.hasNext()) {
2697 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2698 if (fi
.getType().toString().equals("ImageName")) {
2699 vImageNames
.addAll(fi
.getFvImageNamesList());
2705 public void addFvImageFvImageNames (String
[] fvNames
) {
2706 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2707 if (fis
== null || fis
.getFvImageList() == null) {
2708 genFvImagesFvImage (fvNames
, "ImageName", null);
2712 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2713 while (li
.hasNext()) {
2714 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2715 if (fi
.getType().toString().equals("ImageName")) {
2716 addFvImageNamesInFvImage (fi
, fvNames
);
2720 genFvImagesFvImage (fvNames
, "ImageName", null);
2723 public void addFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String
[] fvNames
) {
2725 for (int i
= 0; i
< fvNames
.length
; ++i
) {
2726 fi
.addFvImageNames(fvNames
[i
]);
2730 public void addFvImageNamesInFvImage (int i
, String
[] fvNames
) {
2731 XmlObject o
= getfpdFlash().getFvImages();
2735 XmlCursor cursor
= o
.newCursor();
2736 QName qFvImage
= new QName(xmlNs
, "FvImage");
2737 if (cursor
.toChild(qFvImage
)) {
2738 for (int j
= 0; j
< i
; ++j
) {
2739 cursor
.toNextSibling(qFvImage
);
2741 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2742 addFvImageNamesInFvImage(fi
, fvNames
);
2747 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2749 FvImagesDocument
.FvImages fis
= null;
2750 if ((fis
= getfpdFlash().getFvImages()) == null) {
2751 fis
= getfpdFlash().addNewFvImages();
2755 //gen FvImage with FvImageNames array
2757 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2758 for (int i
= 0; i
< names
.length
; ++i
) {
2759 fi
.addFvImageNames(names
[i
]);
2761 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2762 if (options
!= null){
2763 setFvImagesFvImageFvImageOptions(options
, fi
);
2767 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
2768 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
2770 fio
= fi
.addNewFvImageOptions();
2773 Set
<String
> key
= options
.keySet();
2774 Iterator
<String
> i
= key
.iterator();
2775 while (i
.hasNext()) {
2777 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
2778 String k
= (String
)i
.next();
2781 nv
.setValue((String
)options
.get(k
));
2788 public void removeFvImagesFvImage(int i
) {
2790 XmlObject o
= getfpdFlash().getFvImages();
2795 QName qFvImage
= new QName(xmlNs
, "FvImage");
2796 XmlCursor cursor
= o
.newCursor();
2797 if (cursor
.toChild(qFvImage
)) {
2798 for (int j
= 0; j
< i
; ++j
) {
2799 cursor
.toNextSibling(qFvImage
);
2808 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
2810 public void updateFvImageNameAll (String oldFvName
, String newFvName
) {
2811 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2814 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= getfpdFlash().getFvImages().getFvImageList().listIterator();
2815 while (li
.hasNext()) {
2816 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2817 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
2818 if (fi
.getFvImageNamesList().size() == 0) {
2824 public void updateFvImageNamesInFvImage (int i
, String oldFvName
, String newFvName
) {
2825 XmlObject o
= getfpdFlash().getFvImages();
2829 XmlCursor cursor
= o
.newCursor();
2830 QName qFvImage
= new QName(xmlNs
, "FvImage");
2831 if (cursor
.toChild(qFvImage
)) {
2832 for (int j
= 0; j
< i
; ++j
) {
2833 cursor
.toNextSibling(qFvImage
);
2835 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2836 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
2842 * @param oldFvName The FV Name to be replaced.
2843 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
2845 public void updateFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String oldFvName
, String newFvName
) {
2846 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
2847 XmlCursor cursor
= fi
.newCursor();
2849 if (cursor
.toChild(qFvImageNames
)) {
2851 String xmlValue
= cursor
.getTextValue();
2852 if (xmlValue
.equals(oldFvName
)){
2853 if (newFvName
!= null) {
2854 cursor
.setTextValue(newFvName
);
2860 }while (cursor
.toNextSibling(qFvImageNames
));
2866 /**update the Type attribute of ith FvImage with new type.
2870 public void updateFvImagesFvImageType (int i
, String type
) {
2871 XmlObject o
= getfpdFlash().getFvImages();
2875 XmlCursor cursor
= o
.newCursor();
2876 QName qFvImage
= new QName(xmlNs
, "FvImage");
2877 if (cursor
.toChild(qFvImage
)) {
2878 for (int j
= 0; j
< i
; ++j
) {
2879 cursor
.toNextSibling(qFvImage
);
2881 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2882 fi
.setType(FvImageTypes
.Enum
.forString(type
));
2887 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
2889 XmlObject o
= getfpdFlash().getFvImages();
2893 XmlCursor cursor
= o
.newCursor();
2894 QName qFvImage
= new QName(xmlNs
, "FvImage");
2895 if (cursor
.toChild(qFvImage
)) {
2896 for (int j
= 0; j
< i
; ++j
) {
2897 cursor
.toNextSibling(qFvImage
);
2899 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2900 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2903 // remove old FvImageNames before adding new ones
2905 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
2906 cursor
.toChild(qFvImageNames
);
2908 while (cursor
.toNextSibling(qFvImageNames
)) {
2912 for (int k
= 0; k
< names
.length
; ++k
) {
2913 fi
.addFvImageNames(names
[k
]);
2916 // remove old FvImageOptions before adding new options
2918 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
2919 cursor
.toNextSibling(qFvImageOptions
);
2922 setFvImagesFvImageFvImageOptions(options
, fi
);
2927 public int getFvImagesFvImageCount(String type
) {
2929 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2932 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2933 ListIterator li
= l
.listIterator();
2935 while(li
.hasNext()) {
2936 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2937 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
2947 public Vector
<FvImagesDocument
.FvImages
.FvImage
> getFvImagesFvImageWithName (String fvName
, String type
) {
2948 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= new Vector
<FvImagesDocument
.FvImages
.FvImage
>();
2949 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2952 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2953 ListIterator li
= l
.listIterator();
2954 while(li
.hasNext()) {
2955 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2956 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
2959 if (fi
.getFvImageNamesList().contains(fvName
)) {
2968 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.
2970 public void getFvImagesFvImages(String
[][] saa
, String type
) {
2972 if (getfpdFlash().getFvImages() == null) {
2975 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2979 ListIterator li
= l
.listIterator();
2981 while(li
.hasNext()) {
2982 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2983 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
2987 // get FvImageNames array, space separated
2989 List
<String
> lfn
= fi
.getFvImageNamesList();
2990 ListIterator lfni
= lfn
.listIterator();
2992 while (lfni
.hasNext()) {
2993 saa
[i
][0] += (String
)lfni
.next();
2996 saa
[i
][0] = saa
[i
][0].trim();
2998 saa
[i
][1] = fi
.getType()+"";
3004 public void removeFvImageNameValue (int i
, String attributeName
) {
3005 XmlObject o
= getfpdFlash().getFvImages();
3009 XmlCursor cursor
= o
.newCursor();
3010 QName qFvImage
= new QName(xmlNs
, "FvImage");
3011 if (cursor
.toChild(qFvImage
)) {
3012 for (int j
= 0; j
< i
; ++j
) {
3013 cursor
.toNextSibling(qFvImage
);
3015 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3016 removeFvImageNameValue (fi
, attributeName
);
3020 /**Remove from fi the attribute pair with attributeName in FvImageOptions.
3022 * @param attributeName
3024 public void removeFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String attributeName
) {
3025 if (fi
.getFvImageOptions() != null && fi
.getFvImageOptions().getNameValueList() != null) {
3026 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3027 while (li
.hasNext()) {
3028 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3029 if (nv
.getName().equals(attributeName
)) {
3036 public void removeTypedNamedFvImageNameValue (String fvName
, String type
, String optName
) {
3037 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName(fvName
, type
);
3038 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3039 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3040 removeFvImageNameValue (fi
, optName
);
3044 /**Add name-value pair to FvImage element with type.
3045 * @param fvName FV name to add name-value pair.
3046 * @param type FvImage attribute.
3050 public void setTypedNamedFvImageNameValue (String fvName
, String type
, String name
, String value
) {
3051 boolean fvImageExists
= false;
3052 if (getfpdFlash().getFvImages() == null) {
3055 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3059 ListIterator li
= l
.listIterator();
3060 while(li
.hasNext()) {
3061 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3062 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3065 if (!fi
.getFvImageNamesList().contains(fvName
)) {
3068 fvImageExists
= true;
3069 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3072 if (!fvImageExists
) {
3073 HashMap
<String
, String
> map
= new HashMap
<String
, String
>();
3074 map
.put(name
, value
);
3075 genFvImagesFvImage(new String
[]{fvName
}, type
, map
);
3079 /**Add to all FvImage elements with type, the name-value pair.
3084 public void setTypedFvImageNameValue (String type
, String name
, String value
) {
3085 if (getfpdFlash().getFvImages() == null) {
3088 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3092 ListIterator li
= l
.listIterator();
3093 while(li
.hasNext()) {
3094 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3095 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3098 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3103 public void setFvImagesFvImageNameValue (int i
, String name
, String value
) {
3104 XmlObject o
= getfpdFlash().getFvImages();
3108 XmlCursor cursor
= o
.newCursor();
3109 QName qFvImage
= new QName(xmlNs
, "FvImage");
3110 if (cursor
.toChild(qFvImage
)) {
3111 for (int j
= 0; j
< i
; ++j
) {
3112 cursor
.toNextSibling(qFvImage
);
3114 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3115 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3120 /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before.
3126 public void setFvImagesFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String name
, String value
, String newName
) {
3127 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3128 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.addNewFvImageOptions().addNewNameValue();
3131 if (newName
!= null) {
3132 nv
.setName(newName
);
3137 XmlCursor cursor
= fi
.getFvImageOptions().newCursor();
3138 if (cursor
.toFirstChild()) {
3140 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= (FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
)cursor
.getObject();
3141 if (nv
.getName().equals(name
)) {
3143 if (newName
!= null) {
3144 nv
.setName(newName
);
3149 }while (cursor
.toNextSibling());
3152 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.getFvImageOptions().addNewNameValue();
3155 if (newName
!= null) {
3156 nv
.setName(newName
);
3161 public void getFvImagesFvImageOptions (String fvName
, Map
<String
, String
> m
) {
3162 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName (fvName
, "Options");
3163 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3164 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3165 if (fi
== null || fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3169 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions()
3172 while (li
.hasNext()) {
3173 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3174 m
.put(nv
.getName(), nv
.getValue());
3179 public int getFvImagePosInFvImages (String fvNameList
, String type
) {
3180 XmlObject o
= getfpdFlash().getFvImages();
3186 String
[] fvNameArray
= fvNameList
.trim().split(" ");
3187 Vector
<String
> vFvNames
= new Vector
<String
>();
3190 XmlCursor cursor
= o
.newCursor();
3191 QName qFvImage
= new QName(xmlNs
, "FvImage");
3192 if (cursor
.toChild(qFvImage
)) {
3195 vFvNames
.removeAllElements();
3196 for (int i
= 0; i
< fvNameArray
.length
; ++i
) {
3197 vFvNames
.add(fvNameArray
[i
]);
3199 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3200 if (!fi
.getType().toString().equals(type
)) {
3203 if (fi
.getFvImageNamesList() == null || fi
.getFvImageNamesList().size() != vFvNames
.size()) {
3206 ListIterator
<String
> li
= fi
.getFvImageNamesList().listIterator();
3207 while (li
.hasNext()) {
3208 String name
= li
.next();
3209 vFvNames
.remove(name
);
3211 if (vFvNames
.size() == 0) {
3216 }while (cursor
.toNextSibling(qFvImage
));
3222 /**Get FvImage Options for FvImage i
3223 * @param i the ith FvImage
3225 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
3226 XmlObject o
= getfpdFlash().getFvImages();
3230 XmlCursor cursor
= o
.newCursor();
3231 QName qFvImage
= new QName(xmlNs
, "FvImage");
3232 if (cursor
.toChild(qFvImage
)) {
3233 for (int j
= 0; j
< i
; ++j
) {
3234 cursor
.toNextSibling(qFvImage
);
3236 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3237 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
3241 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3242 while(li
.hasNext()){
3243 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3244 m
.put(nv
.getName(), nv
.getValue());
3251 Get platform header element
3252 @return PlatformHeaderDocument.PlatformHeader
3254 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
3255 if (fpdHdr
== null) {
3256 fpdHdr
= fpdRoot
.addNewPlatformHeader();
3262 public String
getFpdHdrPlatformName() {
3263 return getFpdHdr().getPlatformName();
3266 public String
getFpdHdrGuidValue() {
3267 return getFpdHdr().getGuidValue();
3270 public String
getFpdHdrVer() {
3271 return getFpdHdr().getVersion();
3274 public String
getFpdHdrAbs() {
3275 return getFpdHdr().getAbstract();
3278 public String
getFpdHdrDescription() {
3279 return getFpdHdr().getDescription();
3282 public String
getFpdHdrCopyright() {
3283 return getFpdHdr().getCopyright();
3286 public String
getFpdHdrLicense() {
3287 LicenseDocument
.License l
= getFpdHdr().getLicense();
3291 return l
.getStringValue();
3294 public String
getFpdHdrUrl() {
3295 LicenseDocument
.License l
= getFpdHdr().getLicense();
3302 public String
getFpdHdrSpec() {
3304 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3305 // return getFpdHdr().getSpecification();
3308 public void setFpdHdrPlatformName(String name
){
3309 getFpdHdr().setPlatformName(name
);
3312 public void setFpdHdrGuidValue(String guid
){
3313 getFpdHdr().setGuidValue(guid
);
3316 public void setFpdHdrVer(String v
){
3317 getFpdHdr().setVersion(v
);
3320 public void setFpdHdrAbs(String abs
) {
3321 getFpdHdr().setAbstract(abs
);
3324 public void setFpdHdrDescription(String desc
){
3325 getFpdHdr().setDescription(desc
);
3328 public void setFpdHdrCopyright(String cr
) {
3329 getFpdHdr().setCopyright(cr
);
3332 public void setFpdHdrLicense(String license
){
3333 LicenseDocument
.License l
= getFpdHdr().getLicense();
3335 getFpdHdr().addNewLicense().setStringValue(license
);
3338 l
.setStringValue(license
);
3342 public void setFpdHdrUrl(String url
){
3343 LicenseDocument
.License l
= getFpdHdr().getLicense();
3349 public void setFpdHdrSpec(String s
){
3350 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3351 getFpdHdr().setSpecification(s
);
3354 Save the processed xml contents to file
3356 @param fpdFile The file to save xml contents
3357 @throws IOException Exceptions during file operation
3359 public void saveAs(File fpdFile
) throws IOException
{
3361 XmlOptions options
= new XmlOptions();
3363 options
.setCharacterEncoding("UTF-8");
3364 options
.setSavePrettyPrint();
3365 options
.setSavePrettyPrintIndent(2);
3367 fpdd
.save(fpdFile
, options
);
3368 } catch (IOException e
) {
3369 e
.printStackTrace();
3374 private String
listToString(List l
) {
3379 ListIterator li
= l
.listIterator();
3380 while(li
.hasNext()) {
3387 private void removeElement(XmlObject o
) {
3388 XmlCursor cursor
= o
.newCursor();
3394 class PcdItemTypeConflictException
extends Exception
{
3399 private static final long serialVersionUID
= 1L;
3400 private String details
= null;
3402 PcdItemTypeConflictException(String pcdName
, String info
){
3403 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(info
);
3404 details
= pcdName
+ " ItemType Conflicts with " + mi
.getName() + " in Pkg " + mi
.getPackageId().getName();
3407 public String
getMessage() {
3412 class PcdDeclNotFound
extends Exception
{
3417 private static final long serialVersionUID
= 1L;
3418 private String details
= null;
3420 PcdDeclNotFound(String info
) {
3421 details
= "PcdDeclNotFound: " + info
;
3424 public String
getMessage() {
3429 class PcdValueMalFormed
extends Exception
{
3434 private static final long serialVersionUID
= 1L;
3435 private String details
= null;
3437 PcdValueMalFormed(String info
) {
3438 details
= "PcdValueMalFormed: " + info
;
3441 public String
getMessage() {