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
.frameworkwizard
.platform
.ui
.global
.GlobalData
;
61 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.SurfaceAreaQuery
;
62 import org
.tianocore
.frameworkwizard
.platform
.ui
.id
.ModuleIdentification
;
63 import org
.tianocore
.frameworkwizard
.platform
.ui
.id
.PackageIdentification
;
66 This class processes fpd file contents such as add remove xml elements.
67 @since PackageEditor 1.0
69 public class FpdFileContents
{
71 static final String xmlNs
= "http://www.TianoCore.org/2006/Edk2.0";
73 private PlatformSurfaceAreaDocument fpdd
= null;
75 private PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpdRoot
= null;
77 private PlatformHeaderDocument
.PlatformHeader fpdHdr
= null;
79 private PlatformDefinitionsDocument
.PlatformDefinitions fpdPlatformDefs
= null;
81 private FlashDocument
.Flash fpdFlash
= null;
83 private BuildOptionsDocument
.BuildOptions fpdBuildOpts
= null;
85 private FrameworkModulesDocument
.FrameworkModules fpdFrameworkModules
= null;
87 private DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs
= null;
89 private HashMap
<String
, ArrayList
<String
>> dynPcdMap
= null;
92 * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings.
94 public void initDynPcdMap() {
95 if (dynPcdMap
== null) {
96 dynPcdMap
= new HashMap
<String
, ArrayList
<String
>>();
97 List
<ModuleSADocument
.ModuleSA
> l
= getfpdFrameworkModules().getModuleSAList();
99 removeElement(getfpdFrameworkModules());
100 fpdFrameworkModules
= null;
103 ListIterator
<ModuleSADocument
.ModuleSA
> li
= l
.listIterator();
104 while (li
.hasNext()) {
105 ModuleSADocument
.ModuleSA msa
= li
.next();
106 if (msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null) {
109 String ModuleInfo
= msa
.getModuleGuid() + " " + msa
.getModuleVersion() +
110 " " + msa
.getPackageGuid() + " " + msa
.getPackageVersion() + " " + listToString(msa
.getSupArchList());
111 List
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lp
= msa
.getPcdBuildDefinition().getPcdDataList();
112 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lpi
= lp
.listIterator();
113 while (lpi
.hasNext()) {
114 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= lpi
.next();
115 String pcdKey
= pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName();
116 if (dynPcdMap
.get(pcdKey
) == null) {
117 ArrayList
<String
> al
= new ArrayList
<String
>();
118 al
.add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
119 dynPcdMap
.put(pcdKey
, al
);
122 dynPcdMap
.get(pcdKey
).add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
129 public ArrayList
<String
> getDynPcdMapValue(String key
) {
130 return dynPcdMap
.get(key
);
133 Constructor to create a new spd file
135 public FpdFileContents() {
137 fpdd
= PlatformSurfaceAreaDocument
.Factory
.newInstance();
138 fpdRoot
= fpdd
.addNewPlatformSurfaceArea();
143 Constructor for existing document object
146 public FpdFileContents(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
148 fpdHdr
= fpdRoot
.getPlatformHeader();
149 fpdPlatformDefs
= fpdRoot
.getPlatformDefinitions();
150 fpdBuildOpts
= fpdRoot
.getBuildOptions();
151 fpdFrameworkModules
= fpdRoot
.getFrameworkModules();
152 fpdDynPcdBuildDefs
= fpdRoot
.getDynamicPcdBuildDefinitions();
153 fpdFlash
= fpdRoot
.getFlash();
157 Constructor based on an existing spd file
159 @param f Existing spd file
161 public FpdFileContents(File f
) {
163 fpdd
= PlatformSurfaceAreaDocument
.Factory
.parse(f
);
164 fpdRoot
= fpdd
.getPlatformSurfaceArea();
165 } catch (Exception e
) {
166 System
.out
.println(e
.toString());
170 public DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
getfpdDynPcdBuildDefs() {
171 if (fpdDynPcdBuildDefs
== null){
172 fpdDynPcdBuildDefs
= fpdRoot
.addNewDynamicPcdBuildDefinitions();
174 return fpdDynPcdBuildDefs
;
177 public FrameworkModulesDocument
.FrameworkModules
getfpdFrameworkModules() {
178 if (fpdFrameworkModules
== null){
179 fpdFrameworkModules
= fpdRoot
.addNewFrameworkModules();
181 return fpdFrameworkModules
;
184 public int getFrameworkModulesCount() {
185 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
186 removeElement(getfpdFrameworkModules());
187 fpdFrameworkModules
= null;
190 return getfpdFrameworkModules().getModuleSAList().size();
193 public void getFrameworkModulesInfo(String
[][] saa
) {
194 if (getFrameworkModulesCount() == 0){
198 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
200 while(li
.hasNext()) {
201 ModuleSADocument
.ModuleSA msa
= (ModuleSADocument
.ModuleSA
)li
.next();
202 saa
[i
][0] = msa
.getModuleGuid();
203 saa
[i
][1] = msa
.getModuleVersion();
205 saa
[i
][2] = msa
.getPackageGuid();
206 saa
[i
][3] = msa
.getPackageVersion();
207 saa
[i
][4] = listToString(msa
.getSupArchList());
212 public void getFrameworkModuleInfo(int i
, String
[] sa
) {
213 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
217 sa
[0] = msa
.getModuleGuid();
218 sa
[1] = msa
.getModuleVersion();
219 sa
[2] = msa
.getPackageGuid();
220 sa
[3] = msa
.getPackageVersion();
221 sa
[4] = listToString(msa
.getSupArchList());
224 public ModuleSADocument
.ModuleSA
getModuleSA(String key
) {
225 String
[] s
= key
.split(" ");
226 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0) {
227 removeElement(getfpdFrameworkModules());
228 fpdFrameworkModules
= null;
231 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
232 while(li
.hasNext()) {
233 ModuleSADocument
.ModuleSA msa
= (ModuleSADocument
.ModuleSA
)li
.next();
234 if (msa
.getModuleGuid().equalsIgnoreCase(s
[0]) && msa
.getPackageGuid().equalsIgnoreCase(s
[2])) {
235 if (msa
.getModuleVersion() != null) {
236 if (!msa
.getModuleVersion().equals(s
[1])) {
240 if (msa
.getPackageVersion() != null) {
241 if (!msa
.getPackageVersion().equals(s
[3])) {
245 //ToDo add arch check for s[4]
246 if (msa
.getSupArchList() != null) {
247 if (!listToString(msa
.getSupArchList()).equals(s
[4])) {
257 private ModuleSADocument
.ModuleSA
getModuleSA(int i
) {
258 ModuleSADocument
.ModuleSA msa
= null;
259 if (fpdRoot
.getFrameworkModules() == null) {
262 XmlCursor cursor
= fpdRoot
.getFrameworkModules().newCursor();
263 if (cursor
.toFirstChild()) {
264 for (int j
= 0; j
< i
; ++j
) {
265 cursor
.toNextSibling();
267 msa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
273 public void removeModuleSA(int i
) {
274 XmlObject o
= fpdRoot
.getFrameworkModules();
279 XmlCursor cursor
= o
.newCursor();
280 if (cursor
.toFirstChild()) {
281 for (int j
= 0; j
< i
; ++j
) {
282 cursor
.toNextSibling();
285 // remove pcd from dynPcdMap, if DynamicPcdBuildData exists, remove them too.
287 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
288 String moduleInfo
= moduleSa
.getModuleGuid() + " " + moduleSa
.getModuleVersion() + " " +
289 moduleSa
.getPackageGuid()+ " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
290 PcdBuildDefinitionDocument
.PcdBuildDefinition pcdBuildDef
= moduleSa
.getPcdBuildDefinition();
291 if (pcdBuildDef
!= null && pcdBuildDef
.getPcdDataList() != null) {
292 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> li
= pcdBuildDef
.getPcdDataList().listIterator();
293 while(li
.hasNext()) {
294 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
295 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(), moduleInfo
);
300 cursor
.toPrevToken();
301 if (cursor
.isComment()) {
306 if (getFrameworkModulesCount() == 0) {
314 private void maintainDynPcdMap(String pcdKey
, String moduleInfo
) {
316 ArrayList
<String
> al
= dynPcdMap
.get(pcdKey
);
320 String
[] s
= moduleInfo
.split(" ");
321 for(int i
= 0; i
< al
.size(); ++i
){
322 String consumer
= al
.get(i
);
323 if (consumer
.contains(s
[0]) && consumer
.contains(s
[2])){
324 String
[] consumerPart
= consumer
.split(" ");
325 if (!consumerPart
[4].equals(s
[4])) {
333 if (al
.size() == 0) {
334 dynPcdMap
.remove(pcdKey
);
335 String
[] s1
= pcdKey
.split(" ");
336 removeDynamicPcdBuildData(s1
[0], s1
[1]);
341 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
343 public int getPcdDataCount(int i
){
344 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
346 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
349 return msa
.getPcdBuildDefinition().getPcdDataList().size();
353 public void getPcdData(int i
, String
[][] saa
) {
354 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
356 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
359 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
>li
= msa
.getPcdBuildDefinition().getPcdDataList().listIterator();
360 for (int k
= 0; k
< saa
.length
; ++k
) {
361 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
362 saa
[k
][0] = pcdData
.getCName();
363 saa
[k
][1] = pcdData
.getTokenSpaceGuidCName();
364 saa
[k
][2] = pcdData
.getItemType()+"";
365 saa
[k
][3] = pcdData
.getToken().toString();
366 saa
[k
][4] = pcdData
.getMaxDatumSize()+"";
367 saa
[k
][5] = pcdData
.getDatumType()+"";
368 saa
[k
][6] = pcdData
.getValue();
373 public void updatePcdData(String key
, String cName
, String tsGuid
, String itemType
, String maxSize
, String value
){
374 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
375 if (msa
== null || msa
.getPcdBuildDefinition() == null){
379 XmlCursor cursor
= msa
.getPcdBuildDefinition().newCursor();
380 if (cursor
.toFirstChild()){
382 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
)cursor
.getObject();
383 if (pcdData
.getCName().equals(cName
) && pcdData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
384 pcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
385 if(pcdData
.getDatumType().equals("VOID*")) {
386 pcdData
.setMaxDatumSize(new Integer(maxSize
));
388 pcdData
.setValue(value
);
392 while(cursor
.toNextSibling());
397 /**Get original Pcd info from MSA & SPD files.
398 * @param mi ModuleIdentification from which MSA & SPD come
399 * @param cName PCD cName
400 * @param sa Results: HelpText, Original item type.
403 public boolean getPcdBuildDataInfo(ModuleIdentification mi
, String cName
, String
[] sa
) throws Exception
{
406 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)GlobalData
.getModuleXmlObject(mi
);
407 if (msa
.getPcdCoded() == null) {
411 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
412 m
.put("ModuleSurfaceArea", msa
);
413 SurfaceAreaQuery
.setDoc(m
);
414 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null);
416 // First look through MSA pcd entries.
418 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
419 ListIterator li
= l
.listIterator();
420 while(li
.hasNext()) {
421 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
422 if (!msaPcd
.getCName().equals(cName
)) {
425 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
426 if (spdPcd
== null) {
430 throw new PcdDeclNotFound(mi
.getName() + " " + msaPcd
.getCName());
433 // Get Pcd help text and original item type.
435 sa
[0] = spdPcd
.getHelpText() + msaPcd
.getHelpText();
436 sa
[1] = msaPcd
.getPcdItemType()+"";
450 /**Remove PCDBuildDefinition entries from ModuleSA
451 * @param moduleKey identifier of ModuleSA.
452 * @param consumer where these entries come from.
454 public void removePcdData(String moduleKey
, ModuleIdentification consumer
) {
456 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)GlobalData
.getModuleXmlObject(consumer
);
457 if (msa
.getPcdCoded() == null) {
461 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
462 ListIterator li
= l
.listIterator();
464 while(li
.hasNext()) {
465 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
466 ModuleSADocument
.ModuleSA moduleSA
= getModuleSA(moduleKey
);
467 if (moduleSA
.getPcdBuildDefinition() != null) {
468 XmlCursor cursor
= moduleSA
.getPcdBuildDefinition().newCursor();
469 if (cursor
.toFirstChild()) {
470 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
) cursor
472 if (msaPcd
.getCName().equals(pcdData
.getCName())
473 && msaPcd
.getTokenSpaceGuidCName().equals(pcdData
.getTokenSpaceGuidCName())) {
475 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(), moduleKey
);
479 while (cursor
.toNextSibling()) {
480 pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
) cursor
.getObject();
481 if (msaPcd
.getCName().equals(pcdData
.getCName())
482 && msaPcd
.getTokenSpaceGuidCName().equals(pcdData
.getTokenSpaceGuidCName())) {
483 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(),
501 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
503 public int getLibraryInstancesCount(String key
) {
504 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
505 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
508 return msa
.getLibraries().getInstanceList().size();
511 public void getLibraryInstances(String key
, String
[][] saa
){
512 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
513 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
517 ListIterator
<LibrariesDocument
.Libraries
.Instance
> li
= msa
.getLibraries().getInstanceList().listIterator();
518 for (int i
= 0; i
< saa
.length
; ++i
) {
519 LibrariesDocument
.Libraries
.Instance instance
= li
.next();
520 saa
[i
][1] = instance
.getModuleGuid();
521 saa
[i
][2] = instance
.getModuleVersion();
522 saa
[i
][3] = instance
.getPackageGuid();
523 saa
[i
][4] = instance
.getPackageVersion();
527 public void removeLibraryInstance(String key
, int i
) {
528 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
529 if (msa
== null || msa
.getLibraries() == null){
533 XmlCursor cursor
= msa
.getLibraries().newCursor();
534 if (cursor
.toFirstChild()) {
535 for (int j
= 0; j
< i
; ++j
) {
536 cursor
.toNextSibling();
539 cursor
.toPrevToken();
540 if (cursor
.isComment()) {
545 if (getLibraryInstancesCount(key
) == 0) {
554 public void genLibraryInstance(ModuleIdentification libMi
, String key
) {
555 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
557 msa
= getfpdFrameworkModules().addNewModuleSA();
559 LibrariesDocument
.Libraries libs
= msa
.getLibraries();
561 libs
= msa
.addNewLibraries();
564 String mn
= libMi
.getName();
565 String mg
= libMi
.getGuid();
566 String mv
= libMi
.getVersion();
567 String pn
= libMi
.getPackage().getName();
568 String pg
= libMi
.getPackage().getGuid();
569 String pv
= libMi
.getPackage().getVersion();
570 LibrariesDocument
.Libraries
.Instance instance
= libs
.addNewInstance();
571 XmlCursor cursor
= instance
.newCursor();
573 String comment
= "Pkg: " + pn
+ " Mod: " + mn
574 + " Path: " + GlobalData
.getMsaFile(libMi
).getPath();
575 cursor
.insertComment(comment
);
584 instance
.setModuleGuid(mg
);
585 instance
.setModuleVersion(mv
);
586 instance
.setPackageGuid(pg
);
587 instance
.setPackageVersion(pv
);
591 public String
getFvBinding(String moduleKey
){
592 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
593 if (msa
== null || msa
.getModuleSaBuildOptions() == null) {
596 return msa
.getModuleSaBuildOptions().getFvBinding();
599 public void setFvBinding(String moduleKey
, String fvBinding
){
600 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
604 if(msa
.getModuleSaBuildOptions() == null){
605 msa
.addNewModuleSaBuildOptions().setFvBinding(fvBinding
);
608 msa
.getModuleSaBuildOptions().setFvBinding(fvBinding
);
611 public String
getFfsFileNameGuid(String moduleKey
){
612 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
613 if (msa
== null || msa
.getModuleSaBuildOptions() == null) {
616 return msa
.getModuleSaBuildOptions().getFfsFileNameGuid();
619 public void setFfsFileNameGuid(String moduleKey
, String fileGuid
){
620 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
624 if(msa
.getModuleSaBuildOptions() == null){
625 msa
.addNewModuleSaBuildOptions();
628 ModuleSaBuildOptionsDocument
.ModuleSaBuildOptions msaBuildOpts
= msa
.getModuleSaBuildOptions();
629 if (fileGuid
!= null) {
630 msaBuildOpts
.setFfsFileNameGuid(fileGuid
);
633 XmlCursor cursor
= msaBuildOpts
.newCursor();
634 if (cursor
.toChild(xmlNs
, "FfsFileNameGuid")) {
642 public String
getFfsFormatKey(String moduleKey
){
643 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
644 if (msa
== null || msa
.getModuleSaBuildOptions() == null) {
647 return msa
.getModuleSaBuildOptions().getFfsFormatKey();
650 public void setFfsFormatKey(String moduleKey
, String ffsKey
){
651 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
655 if(msa
.getModuleSaBuildOptions() == null){
656 msa
.addNewModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
659 msa
.getModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
662 public void getModuleSAOptions(String moduleKey
, String
[][] saa
) {
663 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
664 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
665 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
669 List
<OptionDocument
.Option
> lOpt
= msa
.getModuleSaBuildOptions().getOptions().getOptionList();
670 ListIterator li
= lOpt
.listIterator();
672 while(li
.hasNext()) {
673 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
674 if (opt
.getBuildTargets() != null) {
675 saa
[i
][0] = listToString(opt
.getBuildTargets());
677 saa
[i
][1] = opt
.getToolChainFamily();
678 saa
[i
][2] = opt
.getTagName();
679 saa
[i
][3] = opt
.getToolCode();
681 if (opt
.getSupArchList() != null){
682 saa
[i
][4] = listToString(opt
.getSupArchList());
686 saa
[i
][5] = opt
.getStringValue();
692 public int getModuleSAOptionsCount(String moduleKey
){
693 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
694 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
695 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
698 return msa
.getModuleSaBuildOptions().getOptions().getOptionList().size();
701 public void genModuleSAOptionsOpt(String moduleKey
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
702 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
703 if (msa
.getModuleSaBuildOptions() == null) {
704 msa
.addNewModuleSaBuildOptions();
706 if (msa
.getModuleSaBuildOptions().getOptions() == null){
707 msa
.getModuleSaBuildOptions().addNewOptions();
709 OptionDocument
.Option opt
= msa
.getModuleSaBuildOptions().getOptions().addNewOption();
710 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
713 public void removeModuleSAOptionsOpt(String moduleKey
, int i
) {
714 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
715 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
718 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
719 XmlCursor cursor
= opts
.newCursor();
720 if (cursor
.toFirstChild()) {
721 for (int j
= 0; j
< i
; ++j
){
722 cursor
.toNextSibling();
729 public void updateModuleSAOptionsOpt(String moduleKey
, int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
730 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
731 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
734 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
735 XmlCursor cursor
= opts
.newCursor();
736 if (cursor
.toFirstChild()) {
737 for (int j
= 0; j
< i
; ++j
){
738 cursor
.toNextSibling();
740 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
741 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
746 /**add pcd information of module mi to a ModuleSA.
748 * @param moduleSa if null, generate a new ModuleSA.
750 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi
, String arch
, ModuleSADocument
.ModuleSA moduleSa
) throws Exception
{
751 //ToDo add Arch filter
754 if (moduleSa
== null) {
755 moduleSa
= genModuleSA(mi
, arch
);
758 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)GlobalData
.getModuleXmlObject(mi
);
759 if (msa
.getPcdCoded() == null) {
763 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
764 m
.put("ModuleSurfaceArea", msa
);
765 SurfaceAreaQuery
.setDoc(m
);
766 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null);
768 // Implementing InitializePlatformPcdBuildDefinitions
770 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
771 ListIterator li
= l
.listIterator();
772 while(li
.hasNext()) {
773 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
774 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
775 if (spdPcd
== null) {
779 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module " + mi
.getName());
782 // AddItem to ModuleSA PcdBuildDefinitions
784 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue() : msaPcd
.getDefaultValue();
786 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(), msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType()+"", defaultVal
, moduleSa
);
797 private PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
LookupPcdDeclaration (PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
, PackageIdentification
[] depPkgs
) {
799 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
800 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= null;
801 for (int i
= 0; i
< depPkgs
.length
; ++i
) {
802 m
.put("PackageSurfaceArea", GlobalData
.getPackageXmlObject(depPkgs
[i
]));
803 SurfaceAreaQuery
.setDoc(m
);
804 XmlObject
[] xo
= SurfaceAreaQuery
.getSpdPcdDeclarations();
808 for (int j
= 0; j
< xo
.length
; ++j
) {
809 spdPcd
= (PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
)xo
[j
];
810 if (msaPcd
.getTokenSpaceGuidCName() == null) {
811 if (spdPcd
.getCName().equals(msaPcd
.getCName())) {
816 if (spdPcd
.getCName().equals(msaPcd
.getCName()) && spdPcd
.getTokenSpaceGuidCName().equals(msaPcd
.getTokenSpaceGuidCName())) {
827 private ModuleSADocument
.ModuleSA
genModuleSA (ModuleIdentification mi
, String arch
) {
828 PackageIdentification pi
= GlobalData
.getPackageForModule(mi
);
829 ModuleSADocument
.ModuleSA msa
= getfpdFrameworkModules().addNewModuleSA();
830 XmlCursor cursor
= msa
.newCursor();
832 String comment
= "Mod: " + mi
.getName() + " Type: " + mi
.getModuleType() + " Path: "
833 + GlobalData
.getMsaFile(mi
).getPath();
834 cursor
.insertComment(comment
);
842 msa
.setModuleGuid(mi
.getGuid());
843 msa
.setModuleVersion(mi
.getVersion());
844 msa
.setPackageGuid(pi
.getGuid());
845 msa
.setPackageVersion(pi
.getVersion());
847 Vector
<String
> v
= new Vector
<String
>();
849 msa
.setSupArchList(v
);
855 private void genPcdData (String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
, ModuleSADocument
.ModuleSA moduleSa
)
856 throws PcdItemTypeConflictException
, PcdValueMalFormed
{
857 if (moduleSa
.getPcdBuildDefinition() == null){
858 moduleSa
.addNewPcdBuildDefinition();
861 // constructe pcd to modulesa mapping first.
862 // Attention : for any error condition, remove from map this pcd.
864 ArrayList
<String
> pcdConsumer
= LookupPlatformPcdData(cName
+ " " + tsGuid
);
865 if (pcdConsumer
== null) {
866 pcdConsumer
= new ArrayList
<String
>();
868 String listValue
= moduleSa
.getModuleGuid() + " " + moduleSa
.getModuleVersion()
869 + " " + moduleSa
.getPackageGuid() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList())
871 pcdConsumer
.add(listValue
);
872 dynPcdMap
.put(cName
+ " " + tsGuid
, pcdConsumer
);
874 // Special dynamic type, if this pcd already exists in other ModuleSA
876 /* Comment out Item type checking temporarily.
877 if (itemType.equals("DYNAMIC")) {
879 ListIterator li = pcdConsumer.listIterator();
880 while(li.hasNext()) {
881 String value = li.next().toString();
882 String[] valuePart= value.split(" ");
883 if (!valuePart[5].equals("DYNAMIC")) {
884 //ToDo error for same pcd, other type than dynamic
885 pcdConsumer.remove(listValue);
886 throw new PcdItemTypeConflictException(cName, value);
891 ListIterator li = pcdConsumer.listIterator();
892 while(li.hasNext()) {
893 String value = li.next().toString();
894 String[] valuePart= value.split(" ");
895 if (valuePart[5].equals("DYNAMIC")) {
896 //ToDo error for same pcd, other type than non-dynamic
897 pcdConsumer.remove(listValue);
898 throw new PcdItemTypeConflictException(cName, value);
903 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData fpdPcd
= moduleSa
.getPcdBuildDefinition().addNewPcdData();
904 fpdPcd
.setCName(cName
);
905 fpdPcd
.setToken(token
);
906 fpdPcd
.setTokenSpaceGuidCName(tsGuid
);
907 fpdPcd
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
908 fpdPcd
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
910 if (itemType
.equals("DYNAMIC") || itemType
.equals("DYNAMIC_EX")) {
911 ArrayList
<String
> al
= LookupDynamicPcdBuildDefinition(cName
+ " " + tsGuid
);
913 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.
914 // so need to add one dyn pcd.
916 if (al
.size() == 1) {
917 addDynamicPcdBuildData(cName
, token
, tsGuid
, itemType
, dataType
, defaultVal
);
921 if (defaultVal
!= null){
922 fpdPcd
.setValue(defaultVal
);
925 if (dataType
.equals("UINT8") || dataType
.equals("UINT16") || dataType
.equals("UINT32") || dataType
.equals("UINT64")) {
926 fpdPcd
.setValue("0");
928 if (dataType
.equals("BOOLEAN")){
929 fpdPcd
.setValue("false");
931 if (dataType
.equals("VOID*")) {
935 if (dataType
.equals("UINT8")){
936 fpdPcd
.setMaxDatumSize(1);
938 if (dataType
.equals("UINT16")) {
939 fpdPcd
.setMaxDatumSize(2);
941 if (dataType
.equals("UINT32")) {
942 fpdPcd
.setMaxDatumSize(4);
944 if (dataType
.equals("UINT64")){
945 fpdPcd
.setMaxDatumSize(8);
947 if (dataType
.equals("BOOLEAN")){
948 fpdPcd
.setMaxDatumSize(1);
950 if (dataType
.equals("VOID*")) {
951 int maxSize
= setMaxSizeForPointer(fpdPcd
.getValue());
952 fpdPcd
.setMaxDatumSize(maxSize
);
957 public int setMaxSizeForPointer(String datum
) throws PcdValueMalFormed
{
961 char ch
= datum
.charAt(0);
965 // For void* type PCD, only three datum is support:
966 // 1) Unicode: string with start char is "L"
967 // 2) Ansci: String is ""
968 // 3) byte array: String start char "{"
971 start
= datum
.indexOf('\"');
972 end
= datum
.lastIndexOf('\"');
974 (end
> datum
.length())||
975 ((start
== end
) && (datum
.length() > 0))) {
976 //ToDo Error handling here
977 throw new PcdValueMalFormed (datum
);
980 strValue
= datum
.substring(start
+ 1, end
);
981 return strValue
.length() * 2;
982 } else if (ch
== '\"'){
983 start
= datum
.indexOf('\"');
984 end
= datum
.lastIndexOf('\"');
986 (end
> datum
.length())||
987 ((start
== end
) && (datum
.length() > 0))) {
988 throw new PcdValueMalFormed (datum
);
990 strValue
= datum
.substring(start
+ 1, end
);
991 return strValue
.length();
992 } else if (ch
=='{') {
993 String
[] strValueArray
;
995 start
= datum
.indexOf('{');
996 end
= datum
.lastIndexOf('}');
997 strValue
= datum
.substring(start
+ 1, end
);
998 strValue
= strValue
.trim();
999 if (strValue
.length() == 0) {
1002 strValueArray
= strValue
.split(",");
1003 for (int index
= 0; index
< strValueArray
.length
; index
++) {
1004 Integer value
= Integer
.decode(strValueArray
[index
].trim());
1007 // "[FPD file error] The datum type of PCD %s in %s is VOID*, "+
1008 // "it is byte array in fact. But the element of %s exceed the byte range",
1009 throw new PcdValueMalFormed (datum
);
1012 return strValueArray
.length
;
1016 // "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+
1017 // "1) UNICODE string: like L\"xxxx\";\r\n"+
1018 // "2) ANSIC string: like \"xxx\";\r\n"+
1019 // "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+
1020 // "but the datum in seems does not following above format!",
1021 throw new PcdValueMalFormed (datum
);
1026 private ArrayList
<String
> LookupDynamicPcdBuildDefinition(String dynPcdKey
) {
1027 ArrayList
<String
> al
= dynPcdMap
.get(dynPcdKey
);
1032 private ArrayList
<String
> LookupPlatformPcdData(String pcdKey
) {
1034 return dynPcdMap
.get(pcdKey
);
1037 public int getDynamicPcdBuildDataCount() {
1038 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1039 removeElement(getfpdDynPcdBuildDefs());
1040 fpdDynPcdBuildDefs
= null;
1043 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1046 public void getDynamicPcdBuildData(String
[][] saa
) {
1047 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1048 removeElement(getfpdDynPcdBuildDefs());
1049 fpdDynPcdBuildDefs
= null;
1052 List
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> l
= getfpdDynPcdBuildDefs().getPcdBuildDataList();
1053 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> li
= l
.listIterator();
1055 while(li
.hasNext()) {
1056 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcd
= li
.next();
1057 saa
[i
][0] = dynPcd
.getCName();
1058 saa
[i
][1] = dynPcd
.getToken().toString();
1059 saa
[i
][2] = dynPcd
.getTokenSpaceGuidCName();
1060 saa
[i
][3] = dynPcd
.getMaxDatumSize()+"";
1061 saa
[i
][4] = dynPcd
.getDatumType().toString();
1067 public void addDynamicPcdBuildData(String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
)
1068 throws PcdValueMalFormed
{
1069 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcdData
= getfpdDynPcdBuildDefs().addNewPcdBuildData();
1070 dynPcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1071 dynPcdData
.setCName(cName
);
1072 dynPcdData
.setToken(token
);
1073 dynPcdData
.setTokenSpaceGuidCName(tsGuid
);
1074 dynPcdData
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1076 BigInteger bigInt
= new BigInteger("0");
1077 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= dynPcdData
.addNewSkuInfo();
1078 skuInfo
.setSkuId(bigInt
);
1079 if (defaultVal
!= null){
1080 skuInfo
.setValue(defaultVal
);
1083 if (dataType
.equals("UINT8")){
1084 skuInfo
.setValue("0");
1086 if (dataType
.equals("UINT16")) {
1087 skuInfo
.setValue("0");
1089 if (dataType
.equals("UINT32")) {
1090 skuInfo
.setValue("0");
1092 if (dataType
.equals("UINT64")){
1093 skuInfo
.setValue("0");
1095 if (dataType
.equals("BOOLEAN")){
1096 skuInfo
.setValue("false");
1098 if (dataType
.equals("VOID*")) {
1099 skuInfo
.setValue("");
1102 if (dataType
.equals("UINT8")){
1103 dynPcdData
.setMaxDatumSize(1);
1105 if (dataType
.equals("UINT16")) {
1106 dynPcdData
.setMaxDatumSize(2);
1108 if (dataType
.equals("UINT32")) {
1109 dynPcdData
.setMaxDatumSize(4);
1111 if (dataType
.equals("UINT64")){
1112 dynPcdData
.setMaxDatumSize(8);
1114 if (dataType
.equals("BOOLEAN")){
1115 dynPcdData
.setMaxDatumSize(1);
1117 if (dataType
.equals("VOID*")) {
1118 int maxSize
= setMaxSizeForPointer(defaultVal
);
1119 dynPcdData
.setMaxDatumSize(maxSize
);
1123 public void removeDynamicPcdBuildData(String cName
, String tsGuid
) {
1124 XmlObject o
= fpdRoot
.getDynamicPcdBuildDefinitions();
1129 XmlCursor cursor
= o
.newCursor();
1130 if (cursor
.toFirstChild()) {
1132 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdBuildData
=
1133 (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1134 if (pcdBuildData
.getCName().equals(cName
) && pcdBuildData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
1136 if (getDynamicPcdBuildDataCount() == 0) {
1144 while (cursor
.toNextSibling());
1149 // Get the Sku Info count of ith dyn pcd element.
1151 public int getDynamicPcdSkuInfoCount(int i
){
1152 if (fpdRoot
.getDynamicPcdBuildDefinitions() == null || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null
1153 || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {
1157 int skuInfoCount
= 0;
1158 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1159 if (cursor
.toFirstChild()) {
1160 for (int j
= 0; j
< i
; ++j
) {
1161 cursor
.toNextSibling();
1163 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1164 if (pcdData
.getSkuInfoList() == null) {
1168 skuInfoCount
= pcdData
.getSkuInfoList().size();
1172 return skuInfoCount
;
1175 public void getDynamicPcdSkuInfos(int i
, String
[][] saa
){
1176 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1177 removeElement(getfpdDynPcdBuildDefs());
1178 fpdDynPcdBuildDefs
= null;
1182 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1183 if (cursor
.toFirstChild()) {
1184 for (int j
= 0; j
< i
; ++j
) {
1185 cursor
.toNextSibling();
1187 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1188 if (pcdData
.getSkuInfoList() == null) {
1193 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1195 while (li
.hasNext()) {
1196 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1197 saa
[k
][0] = skuInfo
.getSkuId()+"";
1198 saa
[k
][1] = skuInfo
.getVariableName();
1199 saa
[k
][2] = skuInfo
.getVariableGuid();
1200 saa
[k
][3] = skuInfo
.getVariableOffset();
1201 saa
[k
][4] = skuInfo
.getHiiDefaultValue();
1202 saa
[k
][5] = skuInfo
.getVpdOffset();
1203 saa
[k
][6] = skuInfo
.getValue();
1213 public String
getDynamicPcdBuildDataValue(int i
){
1214 String value
= null;
1215 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1216 removeElement(getfpdDynPcdBuildDefs());
1217 fpdDynPcdBuildDefs
= null;
1221 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1222 if (cursor
.toFirstChild()) {
1223 for (int j
= 0; j
< i
; ++j
) {
1224 cursor
.toNextSibling();
1226 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1227 if (pcdData
.getSkuInfoList() == null) {
1231 value
= pcdData
.getSkuInfoArray(0).getValue();
1238 public String
getDynamicPcdBuildDataVpdOffset(int i
){
1239 String vpdOffset
= null;
1240 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1241 removeElement(getfpdDynPcdBuildDefs());
1242 fpdDynPcdBuildDefs
= null;
1246 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1247 if (cursor
.toFirstChild()) {
1248 for (int j
= 0; j
< i
; ++j
) {
1249 cursor
.toNextSibling();
1251 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1252 if (pcdData
.getSkuInfoList() == null) {
1256 vpdOffset
= pcdData
.getSkuInfoArray(0).getVpdOffset();
1263 public void removeDynamicPcdBuildDataSkuInfo(int i
) {
1264 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1265 removeElement(getfpdDynPcdBuildDefs());
1266 fpdDynPcdBuildDefs
= null;
1270 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1271 if (cursor
.toFirstChild()) {
1272 for (int j
= 0; j
< i
; ++j
) {
1273 cursor
.toNextSibling();
1275 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1276 if (pcdData
.getSkuInfoList() == null) {
1281 QName qSkuInfo
= new QName(xmlNs
, "SkuInfo");
1282 cursor
.toChild(qSkuInfo
);
1289 // generate sku info for ith dyn pcd build data.
1291 public void genDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1292 String hiiDefault
, String vpdOffset
, String value
, int i
) {
1293 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1297 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1298 if (cursor
.toFirstChild()) {
1299 for (int j
= 0; j
< i
; ++j
) {
1300 cursor
.toNextSibling();
1302 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1303 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= pcdData
.addNewSkuInfo();
1304 skuInfo
.setSkuId(new BigInteger(id
));
1305 if (varName
!= null){
1306 skuInfo
.setVariableName(varName
);
1307 skuInfo
.setVariableGuid(varGuid
);
1308 skuInfo
.setVariableOffset(varOffset
);
1309 skuInfo
.setHiiDefaultValue(hiiDefault
);
1311 else if (vpdOffset
!= null){
1312 skuInfo
.setVpdOffset(vpdOffset
);
1315 skuInfo
.setValue(value
);
1320 public void updateDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1321 String hiiDefault
, String vpdOffset
, String value
, int i
){
1322 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1326 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1327 if (cursor
.toFirstChild()) {
1328 for (int j
= 0; j
< i
; ++j
) {
1329 cursor
.toNextSibling();
1331 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1332 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1333 while (li
.hasNext()) {
1334 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1335 if (skuInfo
.getSkuId().toString().equals(id
)){
1336 if (varName
!= null){
1337 skuInfo
.setVariableName(varName
);
1338 skuInfo
.setVariableGuid(varGuid
);
1339 skuInfo
.setVariableOffset(varOffset
);
1340 skuInfo
.setHiiDefaultValue(hiiDefault
);
1342 else if (vpdOffset
!= null){
1343 skuInfo
.setVpdOffset(vpdOffset
);
1346 skuInfo
.setValue(value
);
1354 public BuildOptionsDocument
.BuildOptions
getfpdBuildOpts() {
1355 if (fpdBuildOpts
== null) {
1356 fpdBuildOpts
= fpdRoot
.addNewBuildOptions();
1358 return fpdBuildOpts
;
1361 public void genBuildOptionsUserDefAntTask (String id
, String fileName
, String execOrder
) {
1362 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1363 if (udats
== null) {
1364 udats
= getfpdBuildOpts().addNewUserDefinedAntTasks();
1367 AntTaskDocument
.AntTask at
= udats
.addNewAntTask();
1368 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1371 private void setBuildOptionsUserDefAntTask(String id
, String fileName
, String execOrder
, AntTaskDocument
.AntTask at
) {
1372 at
.setId(new Integer(id
));
1373 XmlCursor cursor
= at
.newCursor();
1374 if (fileName
!= null){
1375 at
.setFilename(fileName
);
1377 else if (cursor
.toChild(xmlNs
, "Filename")) {
1380 if (execOrder
!= null) {
1381 at
.setAntCmdOptions(execOrder
);
1383 else if (cursor
.toChild(xmlNs
, "AntCmdOptions")) {
1389 public void removeBuildOptionsUserDefAntTask(int i
) {
1390 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1394 XmlCursor cursor
= o
.newCursor();
1395 if (cursor
.toFirstChild()) {
1396 for (int j
= 0; j
< i
; ++j
) {
1397 cursor
.toNextSibling();
1400 if (getBuildOptionsUserDefAntTaskCount() == 0) {
1408 public void updateBuildOptionsUserDefAntTask(int i
, String id
, String fileName
, String execOrder
){
1409 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1413 XmlCursor cursor
= o
.newCursor();
1414 if (cursor
.toFirstChild()) {
1415 for (int j
= 0; j
< i
; ++j
) {
1416 cursor
.toNextSibling();
1418 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)cursor
.getObject();
1419 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1424 public int getBuildOptionsUserDefAntTaskCount() {
1425 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1426 if (udats
== null || udats
.getAntTaskList() == null) {
1430 return udats
.getAntTaskList().size();
1433 public void getBuildOptionsUserDefAntTasks(String
[][] saa
) {
1434 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1435 if (udats
== null || udats
.getAntTaskList() == null) {
1439 List
<AntTaskDocument
.AntTask
> l
= udats
.getAntTaskList();
1440 ListIterator li
= l
.listIterator();
1442 while (li
.hasNext()) {
1443 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)li
.next();
1444 saa
[i
][0] = at
.getId() + "";
1445 saa
[i
][1] = saa
[i
][2] = "";
1446 if (at
.getFilename() != null){
1447 saa
[i
][1] = at
.getFilename();
1449 if (at
.getAntCmdOptions() != null) {
1450 saa
[i
][2] = at
.getAntCmdOptions();
1455 public void genBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1456 OptionsDocument
.Options opts
= getfpdBuildOpts().getOptions();
1458 opts
= getfpdBuildOpts().addNewOptions();
1460 OptionDocument
.Option opt
= opts
.addNewOption();
1461 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1464 private void setBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
, OptionDocument
.Option opt
){
1465 opt
.setStringValue(contents
);
1467 opt
.setBuildTargets(buildTargets
);
1468 opt
.setToolChainFamily(toolChain
);
1469 opt
.setTagName(tagName
);
1470 opt
.setToolCode(toolCmd
);
1472 if (archList
!= null) {
1473 opt
.setSupArchList(archList
);
1476 if (opt
.isSetSupArchList()) {
1477 opt
.unsetSupArchList();
1482 public void removeBuildOptionsOpt(int i
){
1484 XmlObject o
= getfpdBuildOpts().getOptions();
1489 XmlCursor cursor
= o
.newCursor();
1490 if (cursor
.toFirstChild()) {
1491 for (int j
= 0; j
< i
; ++j
) {
1492 cursor
.toNextSibling();
1495 if (getBuildOptionsOptCount() == 0) {
1503 public void updateBuildOptionsOpt(int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1504 XmlObject o
= getfpdBuildOpts().getOptions();
1509 XmlCursor cursor
= o
.newCursor();
1510 if (cursor
.toFirstChild()) {
1511 for (int j
= 0; j
< i
; ++j
) {
1512 cursor
.toNextSibling();
1514 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
1515 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1520 public int getBuildOptionsOptCount(){
1521 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
1524 return getfpdBuildOpts().getOptions().getOptionList().size();
1527 public void getBuildOptionsOpts(String
[][] saa
) {
1528 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
1532 List
<OptionDocument
.Option
> lOpt
= getfpdBuildOpts().getOptions().getOptionList();
1533 ListIterator li
= lOpt
.listIterator();
1535 while(li
.hasNext()) {
1536 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
1537 if (opt
.getBuildTargets() != null) {
1538 saa
[i
][0] = listToString(opt
.getBuildTargets());
1540 saa
[i
][1] = opt
.getToolChainFamily();
1541 if (opt
.getSupArchList() != null){
1542 saa
[i
][2] = listToString(opt
.getSupArchList());
1545 saa
[i
][3] = opt
.getToolCode();
1546 saa
[i
][4] = opt
.getTagName();
1547 saa
[i
][5] = opt
.getStringValue();
1553 public void genBuildOptionsFfs(String ffsKey
, String type
) {
1554 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
1555 ffs
.setFfsKey(ffsKey
);
1557 ffs
.addNewSections().setEncapsulationType(type
);
1561 public void updateBuildOptionsFfsSectionsType(int i
, String type
) {
1562 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
1564 ffs
.addNewSections().setEncapsulationType(type
);
1568 public void genBuildOptionsFfsAttribute(int i
, String name
, String value
) {
1569 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1570 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= ffs
.addNewAttribute();
1571 attrib
.setName(name
);
1572 attrib
.setValue(value
);
1575 /**update jth attribute of ith ffs.
1579 public void updateBuildOptionsFfsAttribute(int i
, int j
, String name
, String value
){
1580 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1581 XmlCursor cursor
= ffs
.newCursor();
1582 QName qAttrib
= new QName(xmlNs
, "Attribute");
1583 if (cursor
.toChild(qAttrib
)) {
1584 for (int k
= 0; k
< j
; ++k
) {
1585 cursor
.toNextSibling(qAttrib
);
1587 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
)cursor
.getObject();
1588 attrib
.setName(name
);
1589 attrib
.setValue(value
);
1594 public void removeBuildOptionsFfsAttribute(int i
, int j
){
1595 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1596 XmlCursor cursor
= ffs
.newCursor();
1597 QName qAttrib
= new QName(xmlNs
, "Attribute");
1598 if (cursor
.toChild(qAttrib
)) {
1599 for (int k
= 0; k
< j
; ++k
) {
1600 cursor
.toNextSibling(qAttrib
);
1607 public void genBuildOptionsFfsSectionsSection(int i
, String sectionType
) {
1608 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1612 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1614 if (sections
== null){
1615 sections
= ffs
.addNewSections();
1617 sections
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(sectionType
));
1620 public void removeBuildOptionsFfsSectionsSection(int i
, int j
) {
1621 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1622 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1623 if (sections
== null) {
1626 XmlCursor cursor
= sections
.newCursor();
1627 QName qSection
= new QName(xmlNs
, "Section");
1628 if (cursor
.toChild(qSection
)) {
1629 for (int k
= 0; k
< j
; ++k
) {
1630 cursor
.toNextSibling(qSection
);
1637 public void updateBuildOptionsFfsSectionsSection(int i
, int j
, String type
){
1638 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1639 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1640 if (sections
== null) {
1643 XmlCursor cursor
= sections
.newCursor();
1644 QName qSection
= new QName(xmlNs
, "Section");
1645 if (cursor
.toChild(qSection
)) {
1646 for (int k
= 0; k
< j
; ++k
) {
1647 cursor
.toNextSibling(qSection
);
1649 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
)cursor
.getObject();
1650 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
1655 public void genBuildOptionsFfsSectionsSections(int i
, String encapType
) {
1656 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1660 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1662 if (sections
== null){
1663 sections
= ffs
.addNewSections();
1665 sections
.addNewSections().setEncapsulationType(encapType
);
1668 public void removeBuildOptionsFfsSectionsSections(int i
, int j
) {
1669 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1670 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1671 if (sections
== null) {
1674 XmlCursor cursor
= sections
.newCursor();
1675 QName qSections
= new QName(xmlNs
, "Sections");
1676 if (cursor
.toChild(qSections
)) {
1677 for (int k
= 0; k
< j
; ++k
) {
1678 cursor
.toNextSibling(qSections
);
1685 public void updateBuildOptionsFfsSectionsSections(int i
, int j
, String type
) {
1686 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1687 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1688 if (sections
== null) {
1691 XmlCursor cursor
= sections
.newCursor();
1692 QName qSections
= new QName(xmlNs
, "Sections");
1693 if (cursor
.toChild(qSections
)) {
1694 for (int k
= 0; k
< j
; ++k
) {
1695 cursor
.toNextSibling(qSections
);
1697 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1698 sections2
.setEncapsulationType(type
);
1703 public void genBuildOptionsFfsSectionsSectionsSection(int i
, int j
, String type
) {
1704 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1708 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1709 XmlCursor cursor
= sections
.newCursor();
1710 QName qSections
= new QName(xmlNs
, "Sections");
1711 if (cursor
.toChild(qSections
)){
1712 for (int k
= 0; k
< j
; ++k
) {
1713 cursor
.toNextSibling(qSections
);
1715 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1716 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(type
));
1721 public void removeBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
) {
1722 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1723 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1724 if (sections
== null) {
1727 XmlCursor cursor
= sections
.newCursor();
1728 QName qSections
= new QName(xmlNs
, "Sections");
1729 if (cursor
.toChild(qSections
)) {
1730 for (int l
= 0; l
< j
; ++l
) {
1731 cursor
.toNextSibling(qSections
);
1733 if (cursor
.toFirstChild()) {
1735 for (; m
< k
; ++m
) {
1736 cursor
.toNextSibling();
1748 public void updateBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
, String type
) {
1749 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1750 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1751 if (sections
== null) {
1754 XmlCursor cursor
= sections
.newCursor();
1755 QName qSections
= new QName(xmlNs
, "Sections");
1756 if (cursor
.toChild(qSections
)) {
1757 for (int l
= 0; l
< j
; ++l
) {
1758 cursor
.toNextSibling(qSections
);
1760 if (cursor
.toFirstChild()) {
1761 for (int m
= 0; m
< k
; ++m
) {
1762 cursor
.toNextSibling();
1764 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
)cursor
.getObject();
1765 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
1771 public void getBuildOptionsFfsSectionsSectionsSection(int i
, int j
, ArrayList
<String
> al
) {
1772 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1776 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1777 XmlCursor cursor
= sections
.newCursor();
1778 QName qSections
= new QName(xmlNs
, "Sections");
1779 if (cursor
.toChild(qSections
)){
1780 for (int k
= 0; k
< j
; ++k
) {
1781 cursor
.toNextSibling(qSections
);
1783 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1784 if (sections2
.getSectionList() == null){
1788 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
> li
= sections2
.getSectionList().listIterator();
1789 while(li
.hasNext()) {
1790 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= li
.next();
1791 if (section
.isSetSectionType()) {
1792 al
.add(section
.getSectionType().toString());
1801 public int getBuildOptionsFfsCount(){
1802 if (getfpdBuildOpts().getFfsList() == null) {
1805 return getfpdBuildOpts().getFfsList().size();
1808 public void getBuildOptionsFfsKey(String
[][] saa
) {
1809 if (getfpdBuildOpts().getFfsList() == null) {
1812 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
> li
= getfpdBuildOpts().getFfsList().listIterator();
1814 while(li
.hasNext()){
1815 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= li
.next();
1816 saa
[i
][0] = ffs
.getFfsKey();
1821 public void updateBuildOptionsFfsKey(int i
, String key
) {
1822 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1826 /**Get ith FFS key and contents.
1829 public void getBuildOptionsFfs(int i
, String
[] sa
, LinkedHashMap
<String
, String
> ffsAttribMap
, ArrayList
<String
> firstLevelSections
, ArrayList
<String
> firstLevelSection
) {
1830 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1834 sa
[0] = ffs
.getFfsKey();
1835 if (ffs
.getSections() != null) {
1836 if(ffs
.getSections().getEncapsulationType() != null){
1837 sa
[1] = ffs
.getSections().getEncapsulationType();
1839 if (ffs
.getSections().getSectionList() != null){
1840 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
> li
= ffs
.getSections().getSectionList().listIterator();
1841 while (li
.hasNext()) {
1842 firstLevelSection
.add(li
.next().getSectionType().toString());
1845 if (ffs
.getSections().getSectionsList() != null) {
1846 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
> li
= ffs
.getSections().getSectionsList().listIterator();
1847 while(li
.hasNext()) {
1848 firstLevelSections
.add(li
.next().getEncapsulationType());
1852 if (ffs
.getAttributeList() != null) {
1853 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
> li
= ffs
.getAttributeList().listIterator();
1854 while(li
.hasNext()) {
1855 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= li
.next();
1856 ffsAttribMap
.put(attrib
.getName(), attrib
.getValue());
1865 private BuildOptionsDocument
.BuildOptions
.Ffs
getFfs(int i
) {
1866 XmlObject o
= getfpdBuildOpts();
1867 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= null;
1869 XmlCursor cursor
= o
.newCursor();
1870 QName qFfs
= new QName(xmlNs
, "Ffs");
1871 if (cursor
.toChild(qFfs
)) {
1872 for (int j
= 0; j
< i
; ++j
) {
1873 cursor
.toNextSibling(qFfs
);
1875 ffs
= (BuildOptionsDocument
.BuildOptions
.Ffs
)cursor
.getObject();
1881 public void removeBuildOptionsFfs(int i
) {
1882 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1887 XmlCursor cursor
= ffs
.newCursor();
1894 public PlatformDefinitionsDocument
.PlatformDefinitions
getfpdPlatformDefs(){
1895 if (fpdPlatformDefs
== null){
1896 fpdPlatformDefs
= fpdRoot
.addNewPlatformDefinitions();
1898 return fpdPlatformDefs
;
1901 public void getPlatformDefsSupportedArchs(Vector
<Object
> archs
){
1902 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {
1905 ListIterator li
= getfpdPlatformDefs().getSupportedArchitectures().listIterator();
1906 while(li
.hasNext()) {
1907 archs
.add(li
.next());
1911 public void setPlatformDefsSupportedArchs(Vector
<Object
> archs
) {
1912 if (archs
!= null) {
1913 getfpdPlatformDefs().setSupportedArchitectures(archs
);
1916 // XmlCursor cursor = getfpdPlatformDefs().newCursor();
1917 // if (cursor.toChild(xmlNs, "SupportedArchitectures")) {
1918 // cursor.removeXml();
1920 // cursor.dispose();
1924 public void getPlatformDefsBuildTargets(Vector
<Object
> targets
) {
1925 if (getfpdPlatformDefs().getBuildTargets() == null) {
1928 ListIterator li
= getfpdPlatformDefs().getBuildTargets().listIterator();
1929 while(li
.hasNext()) {
1930 targets
.add(li
.next());
1934 public void setPlatformDefsBuildTargets(Vector
<Object
> targets
) {
1935 getfpdPlatformDefs().setBuildTargets(targets
);
1938 public void genPlatformDefsSkuInfo(String id
, String name
) {
1939 SkuInfoDocument
.SkuInfo skuInfo
= null;
1940 if (getfpdPlatformDefs().getSkuInfo() == null) {
1941 skuInfo
= getfpdPlatformDefs().addNewSkuInfo();
1943 skuInfo
= getfpdPlatformDefs().getSkuInfo();
1944 if (skuInfo
.getUiSkuNameList() == null || skuInfo
.getUiSkuNameList().size() == 0) {
1945 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
1946 skuName
.setSkuID(new BigInteger("0"));
1947 skuName
.setStringValue("DEFAULT");
1949 if (id
.equals("0")) {
1952 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
1953 skuName
.setSkuID(new BigInteger(id
));
1954 skuName
.setStringValue(name
);
1957 public int getPlatformDefsSkuInfoCount(){
1958 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
1961 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();
1964 public void getPlatformDefsSkuInfos(String
[][] saa
){
1965 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
1966 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
1967 removeElement(getfpdDynPcdBuildDefs());
1968 fpdDynPcdBuildDefs
= null;
1973 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
1974 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
1976 while(li
.hasNext()) {
1977 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
1978 saa
[i
][0] = sku
.getSkuID()+"";
1979 saa
[i
][1] = sku
.getStringValue();
1984 public void removePlatformDefsSkuInfo(int i
) {
1985 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
1986 if (skuInfo
== null || i
== 0) {
1990 XmlCursor cursor
= skuInfo
.newCursor();
1991 if (cursor
.toFirstChild()) {
1992 for (int j
= 0; j
< i
; ++j
) {
1993 cursor
.toNextSibling();
2000 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
2001 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2002 if (skuInfo
== null || i
== 0) {
2006 XmlCursor cursor
= skuInfo
.newCursor();
2007 if (cursor
.toFirstChild()) {
2008 for (int j
= 0; j
< i
; ++j
) {
2009 cursor
.toNextSibling();
2011 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2012 sku
.setSkuID(new BigInteger(id
));
2013 sku
.setStringValue(name
);
2018 public String
getPlatformDefsInterDir(){
2019 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2022 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2025 public void setPlatformDefsInterDir(String interDir
){
2026 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2029 public String
getPlatformDefsOutputDir() {
2030 return getfpdPlatformDefs().getOutputDirectory();
2033 public void setPlatformDefsOutputDir(String outputDir
) {
2034 if (outputDir
!= null && outputDir
.length() > 0) {
2035 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2038 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2039 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2046 public FlashDocument
.Flash
getfpdFlash() {
2047 if (fpdFlash
== null) {
2048 fpdFlash
= fpdRoot
.addNewFlash();
2053 public void genFlashDefinitionFile(String file
) {
2054 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2056 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2059 fdf
.setStringValue(file
);
2062 public String
getFlashDefinitionFile() {
2063 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2068 return fdf
.getStringValue();
2071 public void genFvImagesNameValue(String name
, String value
) {
2073 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2075 fi
= getfpdFlash().addNewFvImages();
2078 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2083 public void removeFvImagesNameValue(int i
){
2085 XmlObject o
= getfpdFlash().getFvImages();
2090 QName qNameValue
= new QName(xmlNs
, "NameValue");
2091 XmlCursor cursor
= o
.newCursor();
2092 if (cursor
.toChild(qNameValue
)) {
2093 for (int j
= 0; j
< i
; ++j
) {
2094 cursor
.toNextSibling(qNameValue
);
2101 public void updateFvImagesNameValue(int i
, String name
, String value
){
2103 XmlObject o
= getfpdFlash().getFvImages();
2108 QName qNameValue
= new QName(xmlNs
, "NameValue");
2109 XmlCursor cursor
= o
.newCursor();
2110 if (cursor
.toChild(qNameValue
)) {
2111 for (int j
= 0; j
< i
; ++j
) {
2112 cursor
.toNextSibling(qNameValue
);
2114 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2121 public int getFvImagesNameValueCount() {
2123 FvImagesDocument
.FvImages fi
= null;
2124 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2127 return fi
.getNameValueList().size();
2130 public void getFvImagesNameValues(String
[][] nv
) {
2132 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2136 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2138 ListIterator li
= l
.listIterator();
2139 while (li
.hasNext()) {
2140 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2142 nv
[i
][0] = e
.getName();
2143 nv
[i
][1] = e
.getValue();
2149 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2151 FvImagesDocument
.FvImages fis
= null;
2152 if ((fis
= getfpdFlash().getFvImages()) == null) {
2153 fis
= getfpdFlash().addNewFvImages();
2157 //gen FvImage with FvImageNames array
2159 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2160 for (int i
= 0; i
< names
.length
; ++i
) {
2161 fi
.addFvImageNames(names
[i
]);
2163 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2164 if (options
!= null){
2165 setFvImagesFvImageFvImageOptions(options
, fi
);
2169 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
2170 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
2172 fio
= fi
.addNewFvImageOptions();
2175 Set
<String
> key
= options
.keySet();
2176 Iterator
<String
> i
= key
.iterator();
2177 while (i
.hasNext()) {
2179 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
2180 String k
= (String
)i
.next();
2183 nv
.setValue((String
)options
.get(k
));
2190 public void removeFvImagesFvImage(int i
) {
2192 XmlObject o
= getfpdFlash().getFvImages();
2197 QName qFvImage
= new QName(xmlNs
, "FvImage");
2198 XmlCursor cursor
= o
.newCursor();
2199 if (cursor
.toChild(qFvImage
)) {
2200 for (int j
= 0; j
< i
; ++j
) {
2201 cursor
.toNextSibling(qFvImage
);
2208 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
2210 XmlObject o
= getfpdFlash().getFvImages();
2214 XmlCursor cursor
= o
.newCursor();
2215 QName qFvImage
= new QName(xmlNs
, "FvImage");
2216 if (cursor
.toChild(qFvImage
)) {
2217 for (int j
= 0; j
< i
; ++j
) {
2218 cursor
.toNextSibling(qFvImage
);
2220 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2221 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2224 // remove old FvImageNames before adding new ones
2226 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
2227 cursor
.toChild(qFvImageNames
);
2229 while (cursor
.toNextSibling(qFvImageNames
)) {
2233 for (int k
= 0; k
< names
.length
; ++k
) {
2234 fi
.addFvImageNames(names
[k
]);
2237 // remove old FvImageOptions before adding new options
2239 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
2240 cursor
.toNextSibling(qFvImageOptions
);
2243 setFvImagesFvImageFvImageOptions(options
, fi
);
2248 public int getFvImagesFvImageCount() {
2250 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2253 return getfpdFlash().getFvImages().getFvImageList().size();
2256 /**Only Get Fv image setting - name and type.
2259 public void getFvImagesFvImages(String
[][] saa
) {
2261 if (getfpdFlash().getFvImages() == null) {
2264 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2268 ListIterator li
= l
.listIterator();
2270 while(li
.hasNext()) {
2271 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2273 // get FvImageNames array, space separated
2275 List
<String
> lfn
= fi
.getFvImageNamesList();
2276 ListIterator lfni
= lfn
.listIterator();
2278 while (lfni
.hasNext()) {
2279 saa
[i
][0] += (String
)lfni
.next();
2282 saa
[i
][0] = saa
[i
][0].trim();
2284 saa
[i
][1] = fi
.getType()+"";
2290 /**Get FvImage Options for FvImage i
2291 * @param i the ith FvImage
2293 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
2294 XmlObject o
= getfpdFlash().getFvImages();
2298 XmlCursor cursor
= o
.newCursor();
2299 QName qFvImage
= new QName(xmlNs
, "FvImage");
2300 if (cursor
.toChild(qFvImage
)) {
2301 for (int j
= 0; j
< i
; ++j
) {
2302 cursor
.toNextSibling(qFvImage
);
2304 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2305 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
2308 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
2309 while(li
.hasNext()){
2310 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
2311 m
.put(nv
.getName(), nv
.getValue());
2317 Get platform header element
2318 @return PlatformHeaderDocument.PlatformHeader
2320 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
2321 if (fpdHdr
== null) {
2322 fpdHdr
= fpdRoot
.addNewPlatformHeader();
2328 public String
getFpdHdrPlatformName() {
2329 return getFpdHdr().getPlatformName();
2332 public String
getFpdHdrGuidValue() {
2333 return getFpdHdr().getGuidValue();
2336 public String
getFpdHdrVer() {
2337 return getFpdHdr().getVersion();
2340 public String
getFpdHdrAbs() {
2341 return getFpdHdr().getAbstract();
2344 public String
getFpdHdrDescription() {
2345 return getFpdHdr().getDescription();
2348 public String
getFpdHdrCopyright() {
2349 return getFpdHdr().getCopyright();
2352 public String
getFpdHdrLicense() {
2353 LicenseDocument
.License l
= getFpdHdr().getLicense();
2357 return l
.getStringValue();
2360 public String
getFpdHdrUrl() {
2361 LicenseDocument
.License l
= getFpdHdr().getLicense();
2368 public String
getFpdHdrSpec() {
2370 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2371 // return getFpdHdr().getSpecification();
2374 public void setFpdHdrPlatformName(String name
){
2375 getFpdHdr().setPlatformName(name
);
2378 public void setFpdHdrGuidValue(String guid
){
2379 getFpdHdr().setGuidValue(guid
);
2382 public void setFpdHdrVer(String v
){
2383 getFpdHdr().setVersion(v
);
2386 public void setFpdHdrAbs(String abs
) {
2387 getFpdHdr().setAbstract(abs
);
2390 public void setFpdHdrDescription(String desc
){
2391 getFpdHdr().setDescription(desc
);
2394 public void setFpdHdrCopyright(String cr
) {
2395 getFpdHdr().setCopyright(cr
);
2398 public void setFpdHdrLicense(String license
){
2399 LicenseDocument
.License l
= getFpdHdr().getLicense();
2401 getFpdHdr().addNewLicense().setStringValue(license
);
2404 l
.setStringValue(license
);
2408 public void setFpdHdrUrl(String url
){
2409 LicenseDocument
.License l
= getFpdHdr().getLicense();
2415 public void setFpdHdrSpec(String s
){
2416 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2417 getFpdHdr().setSpecification(s
);
2420 Save the processed xml contents to file
2422 @param fpdFile The file to save xml contents
2423 @throws IOException Exceptions during file operation
2425 public void saveAs(File fpdFile
) throws IOException
{
2427 XmlOptions options
= new XmlOptions();
2429 options
.setCharacterEncoding("UTF-8");
2430 options
.setSavePrettyPrint();
2431 options
.setSavePrettyPrintIndent(2);
2433 fpdd
.save(fpdFile
, options
);
2434 } catch (IOException e
) {
2435 e
.printStackTrace();
2440 private String
listToString(List l
) {
2445 ListIterator li
= l
.listIterator();
2446 while(li
.hasNext()) {
2453 private void removeElement(XmlObject o
) {
2454 XmlCursor cursor
= o
.newCursor();
2460 class PcdItemTypeConflictException
extends Exception
{
2465 private static final long serialVersionUID
= 1L;
2466 private String details
= null;
2468 PcdItemTypeConflictException(String pcdName
, String info
){
2469 ModuleIdentification mi
= GlobalData
.getModuleId(info
);
2470 details
= pcdName
+ " ItemType Conflicts with " + mi
.getName() + " in Pkg " + mi
.getPackage().getName();
2473 public String
getMessage() {
2478 class PcdDeclNotFound
extends Exception
{
2483 private static final long serialVersionUID
= 1L;
2484 private String details
= null;
2486 PcdDeclNotFound(String info
) {
2487 details
= "PcdDeclNotFound: " + info
;
2490 public String
getMessage() {
2495 class PcdValueMalFormed
extends Exception
{
2500 private static final long serialVersionUID
= 1L;
2501 private String details
= null;
2503 PcdValueMalFormed(String info
) {
2504 details
= "PcdValueMalFormed: " + info
;
2507 public String
getMessage() {