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(mi
.getName() + " " + msaPcd
.getCName());
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 if (itemType
.equals("DYNAMIC")) {
878 ListIterator li
= pcdConsumer
.listIterator();
879 while(li
.hasNext()) {
880 String value
= li
.next().toString();
881 String
[] valuePart
= value
.split(" ");
882 if (!valuePart
[4].equals("DYNAMIC")) {
883 //ToDo error for same pcd, other type than dynamic
884 pcdConsumer
.remove(listValue
);
885 throw new PcdItemTypeConflictException(value
);
890 ListIterator li
= pcdConsumer
.listIterator();
891 while(li
.hasNext()) {
892 String value
= li
.next().toString();
893 String
[] valuePart
= value
.split(" ");
894 if (valuePart
[4].equals("DYNAMIC")) {
895 //ToDo error for same pcd, other type than non-dynamic
896 pcdConsumer
.remove(listValue
);
897 throw new PcdItemTypeConflictException(value
);
902 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData fpdPcd
= moduleSa
.getPcdBuildDefinition().addNewPcdData();
903 fpdPcd
.setCName(cName
);
904 fpdPcd
.setToken(token
);
905 fpdPcd
.setTokenSpaceGuidCName(tsGuid
);
906 fpdPcd
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
907 fpdPcd
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
909 if (itemType
.equals("DYNAMIC") || itemType
.equals("DYNAMIC_EX")) {
910 ArrayList
<String
> al
= LookupDynamicPcdBuildDefinition(cName
+ " " + tsGuid
);
912 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.
913 // so need to add one dyn pcd.
915 if (al
.size() == 1) {
916 addDynamicPcdBuildData(cName
, token
, tsGuid
, itemType
, dataType
, defaultVal
);
920 if (defaultVal
!= null){
921 fpdPcd
.setValue(defaultVal
);
924 if (dataType
.equals("UINT8") || dataType
.equals("UINT16") || dataType
.equals("UINT32") || dataType
.equals("UINT64")) {
925 fpdPcd
.setValue("0");
927 if (dataType
.equals("BOOLEAN")){
928 fpdPcd
.setValue("false");
930 if (dataType
.equals("VOID*")) {
934 if (dataType
.equals("UINT8")){
935 fpdPcd
.setMaxDatumSize(1);
937 if (dataType
.equals("UINT16")) {
938 fpdPcd
.setMaxDatumSize(2);
940 if (dataType
.equals("UINT32")) {
941 fpdPcd
.setMaxDatumSize(4);
943 if (dataType
.equals("UINT64")){
944 fpdPcd
.setMaxDatumSize(8);
946 if (dataType
.equals("BOOLEAN")){
947 fpdPcd
.setMaxDatumSize(1);
949 if (dataType
.equals("VOID*")) {
950 int maxSize
= setMaxSizeForPointer(fpdPcd
.getValue());
951 fpdPcd
.setMaxDatumSize(maxSize
);
956 public int setMaxSizeForPointer(String datum
) throws PcdValueMalFormed
{
960 char ch
= datum
.charAt(0);
964 // For void* type PCD, only three datum is support:
965 // 1) Unicode: string with start char is "L"
966 // 2) Ansci: String is ""
967 // 3) byte array: String start char "{"
970 start
= datum
.indexOf('\"');
971 end
= datum
.lastIndexOf('\"');
973 (end
> datum
.length())||
974 ((start
== end
) && (datum
.length() > 0))) {
975 //ToDo Error handling here
976 throw new PcdValueMalFormed (datum
);
979 strValue
= datum
.substring(start
+ 1, end
);
980 return strValue
.length() * 2;
981 } else if (ch
== '\"'){
982 start
= datum
.indexOf('\"');
983 end
= datum
.lastIndexOf('\"');
985 (end
> datum
.length())||
986 ((start
== end
) && (datum
.length() > 0))) {
987 throw new PcdValueMalFormed (datum
);
989 strValue
= datum
.substring(start
+ 1, end
);
990 return strValue
.length();
991 } else if (ch
=='{') {
992 String
[] strValueArray
;
994 start
= datum
.indexOf('{');
995 end
= datum
.lastIndexOf('}');
996 strValue
= datum
.substring(start
+ 1, end
);
997 strValue
= strValue
.trim();
998 if (strValue
.length() == 0) {
1001 strValueArray
= strValue
.split(",");
1002 for (int index
= 0; index
< strValueArray
.length
; index
++) {
1003 Integer value
= Integer
.decode(strValueArray
[index
].trim());
1006 // "[FPD file error] The datum type of PCD %s in %s is VOID*, "+
1007 // "it is byte array in fact. But the element of %s exceed the byte range",
1008 throw new PcdValueMalFormed (datum
);
1011 return strValueArray
.length
;
1015 // "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+
1016 // "1) UNICODE string: like L\"xxxx\";\r\n"+
1017 // "2) ANSIC string: like \"xxx\";\r\n"+
1018 // "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+
1019 // "but the datum in seems does not following above format!",
1020 throw new PcdValueMalFormed (datum
);
1025 private ArrayList
<String
> LookupDynamicPcdBuildDefinition(String dynPcdKey
) {
1026 ArrayList
<String
> al
= dynPcdMap
.get(dynPcdKey
);
1031 private ArrayList
<String
> LookupPlatformPcdData(String pcdKey
) {
1033 return dynPcdMap
.get("pcdKey");
1036 public int getDynamicPcdBuildDataCount() {
1037 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1038 removeElement(getfpdDynPcdBuildDefs());
1039 fpdDynPcdBuildDefs
= null;
1042 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1045 public void getDynamicPcdBuildData(String
[][] saa
) {
1046 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1047 removeElement(getfpdDynPcdBuildDefs());
1048 fpdDynPcdBuildDefs
= null;
1051 List
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> l
= getfpdDynPcdBuildDefs().getPcdBuildDataList();
1052 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> li
= l
.listIterator();
1054 while(li
.hasNext()) {
1055 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcd
= li
.next();
1056 saa
[i
][0] = dynPcd
.getCName();
1057 saa
[i
][1] = dynPcd
.getToken().toString();
1058 saa
[i
][2] = dynPcd
.getTokenSpaceGuidCName();
1059 saa
[i
][3] = dynPcd
.getMaxDatumSize()+"";
1060 saa
[i
][4] = dynPcd
.getDatumType().toString();
1066 public void addDynamicPcdBuildData(String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
)
1067 throws PcdValueMalFormed
{
1068 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcdData
= getfpdDynPcdBuildDefs().addNewPcdBuildData();
1069 dynPcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1070 dynPcdData
.setCName(cName
);
1071 dynPcdData
.setToken(token
);
1072 dynPcdData
.setTokenSpaceGuidCName(tsGuid
);
1073 dynPcdData
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1075 BigInteger bigInt
= new BigInteger("0");
1076 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= dynPcdData
.addNewSkuInfo();
1077 skuInfo
.setSkuId(bigInt
);
1078 if (defaultVal
!= null){
1079 skuInfo
.setValue(defaultVal
);
1082 if (dataType
.equals("UINT8")){
1083 skuInfo
.setValue("0");
1085 if (dataType
.equals("UINT16")) {
1086 skuInfo
.setValue("0");
1088 if (dataType
.equals("UINT32")) {
1089 skuInfo
.setValue("0");
1091 if (dataType
.equals("UINT64")){
1092 skuInfo
.setValue("0");
1094 if (dataType
.equals("BOOLEAN")){
1095 skuInfo
.setValue("false");
1097 if (dataType
.equals("VOID*")) {
1098 skuInfo
.setValue("");
1101 if (dataType
.equals("UINT8")){
1102 dynPcdData
.setMaxDatumSize(1);
1104 if (dataType
.equals("UINT16")) {
1105 dynPcdData
.setMaxDatumSize(2);
1107 if (dataType
.equals("UINT32")) {
1108 dynPcdData
.setMaxDatumSize(4);
1110 if (dataType
.equals("UINT64")){
1111 dynPcdData
.setMaxDatumSize(8);
1113 if (dataType
.equals("BOOLEAN")){
1114 dynPcdData
.setMaxDatumSize(1);
1116 if (dataType
.equals("VOID*")) {
1117 int maxSize
= setMaxSizeForPointer(defaultVal
);
1118 dynPcdData
.setMaxDatumSize(maxSize
);
1122 public void removeDynamicPcdBuildData(String cName
, String tsGuid
) {
1123 XmlObject o
= fpdRoot
.getDynamicPcdBuildDefinitions();
1128 XmlCursor cursor
= o
.newCursor();
1129 if (cursor
.toFirstChild()) {
1131 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdBuildData
=
1132 (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1133 if (pcdBuildData
.getCName().equals(cName
) && pcdBuildData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
1135 if (getDynamicPcdBuildDataCount() == 0) {
1143 while (cursor
.toNextSibling());
1148 // Get the Sku Info count of ith dyn pcd element.
1150 public int getDynamicPcdSkuInfoCount(int i
){
1151 if (fpdRoot
.getDynamicPcdBuildDefinitions() == null || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null
1152 || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {
1156 int skuInfoCount
= 0;
1157 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1158 if (cursor
.toFirstChild()) {
1159 for (int j
= 0; j
< i
; ++j
) {
1160 cursor
.toNextSibling();
1162 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1163 if (pcdData
.getSkuInfoList() == null) {
1167 skuInfoCount
= pcdData
.getSkuInfoList().size();
1171 return skuInfoCount
;
1174 public void getDynamicPcdSkuInfos(int i
, String
[][] saa
){
1175 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1176 removeElement(getfpdDynPcdBuildDefs());
1177 fpdDynPcdBuildDefs
= null;
1181 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1182 if (cursor
.toFirstChild()) {
1183 for (int j
= 0; j
< i
; ++j
) {
1184 cursor
.toNextSibling();
1186 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1187 if (pcdData
.getSkuInfoList() == null) {
1192 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1194 while (li
.hasNext()) {
1195 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1196 saa
[k
][0] = skuInfo
.getSkuId()+"";
1197 saa
[k
][1] = skuInfo
.getVariableName();
1198 saa
[k
][2] = skuInfo
.getVariableGuid();
1199 saa
[k
][3] = skuInfo
.getVariableOffset();
1200 saa
[k
][4] = skuInfo
.getHiiDefaultValue();
1201 saa
[k
][5] = skuInfo
.getVpdOffset();
1202 saa
[k
][6] = skuInfo
.getValue();
1212 public String
getDynamicPcdBuildDataValue(int i
){
1213 String value
= null;
1214 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1215 removeElement(getfpdDynPcdBuildDefs());
1216 fpdDynPcdBuildDefs
= null;
1220 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1221 if (cursor
.toFirstChild()) {
1222 for (int j
= 0; j
< i
; ++j
) {
1223 cursor
.toNextSibling();
1225 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1226 if (pcdData
.getSkuInfoList() == null) {
1230 value
= pcdData
.getSkuInfoArray(0).getValue();
1237 public String
getDynamicPcdBuildDataVpdOffset(int i
){
1238 String vpdOffset
= null;
1239 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1240 removeElement(getfpdDynPcdBuildDefs());
1241 fpdDynPcdBuildDefs
= null;
1245 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1246 if (cursor
.toFirstChild()) {
1247 for (int j
= 0; j
< i
; ++j
) {
1248 cursor
.toNextSibling();
1250 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1251 if (pcdData
.getSkuInfoList() == null) {
1255 vpdOffset
= pcdData
.getSkuInfoArray(0).getVpdOffset();
1262 public void removeDynamicPcdBuildDataSkuInfo(int i
) {
1263 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1264 removeElement(getfpdDynPcdBuildDefs());
1265 fpdDynPcdBuildDefs
= null;
1269 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1270 if (cursor
.toFirstChild()) {
1271 for (int j
= 0; j
< i
; ++j
) {
1272 cursor
.toNextSibling();
1274 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1275 if (pcdData
.getSkuInfoList() == null) {
1280 QName qSkuInfo
= new QName(xmlNs
, "SkuInfo");
1281 cursor
.toChild(qSkuInfo
);
1288 // generate sku info for ith dyn pcd build data.
1290 public void genDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1291 String hiiDefault
, String vpdOffset
, String value
, int i
) {
1292 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1296 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1297 if (cursor
.toFirstChild()) {
1298 for (int j
= 0; j
< i
; ++j
) {
1299 cursor
.toNextSibling();
1301 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1302 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= pcdData
.addNewSkuInfo();
1303 skuInfo
.setSkuId(new BigInteger(id
));
1304 if (varName
!= null){
1305 skuInfo
.setVariableName(varName
);
1306 skuInfo
.setVariableGuid(varGuid
);
1307 skuInfo
.setVariableOffset(varOffset
);
1308 skuInfo
.setHiiDefaultValue(hiiDefault
);
1310 else if (vpdOffset
!= null){
1311 skuInfo
.setVpdOffset(vpdOffset
);
1314 skuInfo
.setValue(value
);
1319 public void updateDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1320 String hiiDefault
, String vpdOffset
, String value
, int i
){
1321 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1325 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1326 if (cursor
.toFirstChild()) {
1327 for (int j
= 0; j
< i
; ++j
) {
1328 cursor
.toNextSibling();
1330 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1331 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1332 while (li
.hasNext()) {
1333 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1334 if (skuInfo
.getSkuId().toString().equals(id
)){
1335 if (varName
!= null){
1336 skuInfo
.setVariableName(varName
);
1337 skuInfo
.setVariableGuid(varGuid
);
1338 skuInfo
.setVariableOffset(varOffset
);
1339 skuInfo
.setHiiDefaultValue(hiiDefault
);
1341 else if (vpdOffset
!= null){
1342 skuInfo
.setVpdOffset(vpdOffset
);
1345 skuInfo
.setValue(value
);
1353 public BuildOptionsDocument
.BuildOptions
getfpdBuildOpts() {
1354 if (fpdBuildOpts
== null) {
1355 fpdBuildOpts
= fpdRoot
.addNewBuildOptions();
1357 return fpdBuildOpts
;
1360 public void genBuildOptionsUserDefAntTask (String id
, String fileName
, String execOrder
) {
1361 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1362 if (udats
== null) {
1363 udats
= getfpdBuildOpts().addNewUserDefinedAntTasks();
1366 AntTaskDocument
.AntTask at
= udats
.addNewAntTask();
1367 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1370 private void setBuildOptionsUserDefAntTask(String id
, String fileName
, String execOrder
, AntTaskDocument
.AntTask at
) {
1371 at
.setId(new Integer(id
));
1372 XmlCursor cursor
= at
.newCursor();
1373 if (fileName
!= null){
1374 at
.setFilename(fileName
);
1376 else if (cursor
.toChild(xmlNs
, "Filename")) {
1379 if (execOrder
!= null) {
1380 at
.setAntCmdOptions(execOrder
);
1382 else if (cursor
.toChild(xmlNs
, "AntCmdOptions")) {
1388 public void removeBuildOptionsUserDefAntTask(int i
) {
1389 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1393 XmlCursor cursor
= o
.newCursor();
1394 if (cursor
.toFirstChild()) {
1395 for (int j
= 0; j
< i
; ++j
) {
1396 cursor
.toNextSibling();
1399 if (getBuildOptionsUserDefAntTaskCount() == 0) {
1407 public void updateBuildOptionsUserDefAntTask(int i
, String id
, String fileName
, String execOrder
){
1408 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
1412 XmlCursor cursor
= o
.newCursor();
1413 if (cursor
.toFirstChild()) {
1414 for (int j
= 0; j
< i
; ++j
) {
1415 cursor
.toNextSibling();
1417 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)cursor
.getObject();
1418 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
1423 public int getBuildOptionsUserDefAntTaskCount() {
1424 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1425 if (udats
== null || udats
.getAntTaskList() == null) {
1429 return udats
.getAntTaskList().size();
1432 public void getBuildOptionsUserDefAntTasks(String
[][] saa
) {
1433 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
1434 if (udats
== null || udats
.getAntTaskList() == null) {
1438 List
<AntTaskDocument
.AntTask
> l
= udats
.getAntTaskList();
1439 ListIterator li
= l
.listIterator();
1441 while (li
.hasNext()) {
1442 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)li
.next();
1443 saa
[i
][0] = at
.getId() + "";
1444 saa
[i
][1] = saa
[i
][2] = "";
1445 if (at
.getFilename() != null){
1446 saa
[i
][1] = at
.getFilename();
1448 if (at
.getAntCmdOptions() != null) {
1449 saa
[i
][2] = at
.getAntCmdOptions();
1454 public void genBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1455 OptionsDocument
.Options opts
= getfpdBuildOpts().getOptions();
1457 opts
= getfpdBuildOpts().addNewOptions();
1459 OptionDocument
.Option opt
= opts
.addNewOption();
1460 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1463 private void setBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
, OptionDocument
.Option opt
){
1464 opt
.setStringValue(contents
);
1466 opt
.setBuildTargets(buildTargets
);
1467 opt
.setToolChainFamily(toolChain
);
1468 opt
.setTagName(tagName
);
1469 opt
.setToolCode(toolCmd
);
1471 if (archList
!= null) {
1472 opt
.setSupArchList(archList
);
1475 if (opt
.isSetSupArchList()) {
1476 opt
.unsetSupArchList();
1481 public void removeBuildOptionsOpt(int i
){
1483 XmlObject o
= getfpdBuildOpts().getOptions();
1488 XmlCursor cursor
= o
.newCursor();
1489 if (cursor
.toFirstChild()) {
1490 for (int j
= 0; j
< i
; ++j
) {
1491 cursor
.toNextSibling();
1494 if (getBuildOptionsOptCount() == 0) {
1502 public void updateBuildOptionsOpt(int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1503 XmlObject o
= getfpdBuildOpts().getOptions();
1508 XmlCursor cursor
= o
.newCursor();
1509 if (cursor
.toFirstChild()) {
1510 for (int j
= 0; j
< i
; ++j
) {
1511 cursor
.toNextSibling();
1513 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
1514 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1519 public int getBuildOptionsOptCount(){
1520 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
1523 return getfpdBuildOpts().getOptions().getOptionList().size();
1526 public void getBuildOptionsOpts(String
[][] saa
) {
1527 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
1531 List
<OptionDocument
.Option
> lOpt
= getfpdBuildOpts().getOptions().getOptionList();
1532 ListIterator li
= lOpt
.listIterator();
1534 while(li
.hasNext()) {
1535 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
1536 if (opt
.getBuildTargets() != null) {
1537 saa
[i
][0] = listToString(opt
.getBuildTargets());
1539 saa
[i
][1] = opt
.getToolChainFamily();
1540 if (opt
.getSupArchList() != null){
1541 saa
[i
][2] = listToString(opt
.getSupArchList());
1544 saa
[i
][3] = opt
.getToolCode();
1545 saa
[i
][4] = opt
.getTagName();
1546 saa
[i
][5] = opt
.getStringValue();
1552 public void genBuildOptionsFfs(String ffsKey
, String type
) {
1553 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
1554 ffs
.setFfsKey(ffsKey
);
1556 ffs
.addNewSections().setEncapsulationType(type
);
1560 public void updateBuildOptionsFfsSectionsType(int i
, String type
) {
1561 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
1563 ffs
.addNewSections().setEncapsulationType(type
);
1567 public void genBuildOptionsFfsAttribute(int i
, String name
, String value
) {
1568 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1569 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= ffs
.addNewAttribute();
1570 attrib
.setName(name
);
1571 attrib
.setValue(value
);
1574 /**update jth attribute of ith ffs.
1578 public void updateBuildOptionsFfsAttribute(int i
, int j
, String name
, String value
){
1579 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1580 XmlCursor cursor
= ffs
.newCursor();
1581 QName qAttrib
= new QName(xmlNs
, "Attribute");
1582 if (cursor
.toChild(qAttrib
)) {
1583 for (int k
= 0; k
< j
; ++k
) {
1584 cursor
.toNextSibling(qAttrib
);
1586 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
)cursor
.getObject();
1587 attrib
.setName(name
);
1588 attrib
.setValue(value
);
1593 public void removeBuildOptionsFfsAttribute(int i
, int j
){
1594 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1595 XmlCursor cursor
= ffs
.newCursor();
1596 QName qAttrib
= new QName(xmlNs
, "Attribute");
1597 if (cursor
.toChild(qAttrib
)) {
1598 for (int k
= 0; k
< j
; ++k
) {
1599 cursor
.toNextSibling(qAttrib
);
1606 public void genBuildOptionsFfsSectionsSection(int i
, String sectionType
) {
1607 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1611 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1613 if (sections
== null){
1614 sections
= ffs
.addNewSections();
1616 sections
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(sectionType
));
1619 public void removeBuildOptionsFfsSectionsSection(int i
, int j
) {
1620 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1621 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1622 if (sections
== null) {
1625 XmlCursor cursor
= sections
.newCursor();
1626 QName qSection
= new QName(xmlNs
, "Section");
1627 if (cursor
.toChild(qSection
)) {
1628 for (int k
= 0; k
< j
; ++k
) {
1629 cursor
.toNextSibling(qSection
);
1636 public void updateBuildOptionsFfsSectionsSection(int i
, int j
, String type
){
1637 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1638 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1639 if (sections
== null) {
1642 XmlCursor cursor
= sections
.newCursor();
1643 QName qSection
= new QName(xmlNs
, "Section");
1644 if (cursor
.toChild(qSection
)) {
1645 for (int k
= 0; k
< j
; ++k
) {
1646 cursor
.toNextSibling(qSection
);
1648 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
)cursor
.getObject();
1649 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
1654 public void genBuildOptionsFfsSectionsSections(int i
, String encapType
) {
1655 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1659 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1661 if (sections
== null){
1662 sections
= ffs
.addNewSections();
1664 sections
.addNewSections().setEncapsulationType(encapType
);
1667 public void removeBuildOptionsFfsSectionsSections(int i
, int j
) {
1668 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1669 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1670 if (sections
== null) {
1673 XmlCursor cursor
= sections
.newCursor();
1674 QName qSections
= new QName(xmlNs
, "Sections");
1675 if (cursor
.toChild(qSections
)) {
1676 for (int k
= 0; k
< j
; ++k
) {
1677 cursor
.toNextSibling(qSections
);
1684 public void updateBuildOptionsFfsSectionsSections(int i
, int j
, String type
) {
1685 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1686 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1687 if (sections
== null) {
1690 XmlCursor cursor
= sections
.newCursor();
1691 QName qSections
= new QName(xmlNs
, "Sections");
1692 if (cursor
.toChild(qSections
)) {
1693 for (int k
= 0; k
< j
; ++k
) {
1694 cursor
.toNextSibling(qSections
);
1696 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1697 sections2
.setEncapsulationType(type
);
1702 public void genBuildOptionsFfsSectionsSectionsSection(int i
, int j
, String type
) {
1703 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1707 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1708 XmlCursor cursor
= sections
.newCursor();
1709 QName qSections
= new QName(xmlNs
, "Sections");
1710 if (cursor
.toChild(qSections
)){
1711 for (int k
= 0; k
< j
; ++k
) {
1712 cursor
.toNextSibling(qSections
);
1714 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1715 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(type
));
1720 public void removeBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
) {
1721 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1722 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1723 if (sections
== null) {
1726 XmlCursor cursor
= sections
.newCursor();
1727 QName qSections
= new QName(xmlNs
, "Sections");
1728 if (cursor
.toChild(qSections
)) {
1729 for (int l
= 0; l
< j
; ++l
) {
1730 cursor
.toNextSibling(qSections
);
1732 if (cursor
.toFirstChild()) {
1734 for (; m
< k
; ++m
) {
1735 cursor
.toNextSibling();
1747 public void updateBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
, String type
) {
1748 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1749 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1750 if (sections
== null) {
1753 XmlCursor cursor
= sections
.newCursor();
1754 QName qSections
= new QName(xmlNs
, "Sections");
1755 if (cursor
.toChild(qSections
)) {
1756 for (int l
= 0; l
< j
; ++l
) {
1757 cursor
.toNextSibling(qSections
);
1759 if (cursor
.toFirstChild()) {
1760 for (int m
= 0; m
< k
; ++m
) {
1761 cursor
.toNextSibling();
1763 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
)cursor
.getObject();
1764 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
1770 public void getBuildOptionsFfsSectionsSectionsSection(int i
, int j
, ArrayList
<String
> al
) {
1771 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1775 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
1776 XmlCursor cursor
= sections
.newCursor();
1777 QName qSections
= new QName(xmlNs
, "Sections");
1778 if (cursor
.toChild(qSections
)){
1779 for (int k
= 0; k
< j
; ++k
) {
1780 cursor
.toNextSibling(qSections
);
1782 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
1783 if (sections2
.getSectionList() == null){
1787 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
> li
= sections2
.getSectionList().listIterator();
1788 while(li
.hasNext()) {
1789 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= li
.next();
1790 if (section
.isSetSectionType()) {
1791 al
.add(section
.getSectionType().toString());
1800 public int getBuildOptionsFfsCount(){
1801 if (getfpdBuildOpts().getFfsList() == null) {
1804 return getfpdBuildOpts().getFfsList().size();
1807 public void getBuildOptionsFfsKey(String
[][] saa
) {
1808 if (getfpdBuildOpts().getFfsList() == null) {
1811 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
> li
= getfpdBuildOpts().getFfsList().listIterator();
1813 while(li
.hasNext()){
1814 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= li
.next();
1815 saa
[i
][0] = ffs
.getFfsKey();
1820 public void updateBuildOptionsFfsKey(int i
, String key
) {
1821 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1825 /**Get ith FFS key and contents.
1828 public void getBuildOptionsFfs(int i
, String
[] sa
, LinkedHashMap
<String
, String
> ffsAttribMap
, ArrayList
<String
> firstLevelSections
, ArrayList
<String
> firstLevelSection
) {
1829 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1833 sa
[0] = ffs
.getFfsKey();
1834 if (ffs
.getSections() != null) {
1835 if(ffs
.getSections().getEncapsulationType() != null){
1836 sa
[1] = ffs
.getSections().getEncapsulationType();
1838 if (ffs
.getSections().getSectionList() != null){
1839 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
> li
= ffs
.getSections().getSectionList().listIterator();
1840 while (li
.hasNext()) {
1841 firstLevelSection
.add(li
.next().getSectionType().toString());
1844 if (ffs
.getSections().getSectionsList() != null) {
1845 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
> li
= ffs
.getSections().getSectionsList().listIterator();
1846 while(li
.hasNext()) {
1847 firstLevelSections
.add(li
.next().getEncapsulationType());
1851 if (ffs
.getAttributeList() != null) {
1852 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
> li
= ffs
.getAttributeList().listIterator();
1853 while(li
.hasNext()) {
1854 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= li
.next();
1855 ffsAttribMap
.put(attrib
.getName(), attrib
.getValue());
1864 private BuildOptionsDocument
.BuildOptions
.Ffs
getFfs(int i
) {
1865 XmlObject o
= getfpdBuildOpts();
1866 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= null;
1868 XmlCursor cursor
= o
.newCursor();
1869 QName qFfs
= new QName(xmlNs
, "Ffs");
1870 if (cursor
.toChild(qFfs
)) {
1871 for (int j
= 0; j
< i
; ++j
) {
1872 cursor
.toNextSibling(qFfs
);
1874 ffs
= (BuildOptionsDocument
.BuildOptions
.Ffs
)cursor
.getObject();
1880 public void removeBuildOptionsFfs(int i
) {
1881 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
1886 XmlCursor cursor
= ffs
.newCursor();
1893 public PlatformDefinitionsDocument
.PlatformDefinitions
getfpdPlatformDefs(){
1894 if (fpdPlatformDefs
== null){
1895 fpdPlatformDefs
= fpdRoot
.addNewPlatformDefinitions();
1897 return fpdPlatformDefs
;
1900 public void getPlatformDefsSupportedArchs(Vector
<Object
> archs
){
1901 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {
1904 ListIterator li
= getfpdPlatformDefs().getSupportedArchitectures().listIterator();
1905 while(li
.hasNext()) {
1906 archs
.add(li
.next());
1910 public void setPlatformDefsSupportedArchs(Vector
<Object
> archs
) {
1911 if (archs
!= null) {
1912 getfpdPlatformDefs().setSupportedArchitectures(archs
);
1915 // XmlCursor cursor = getfpdPlatformDefs().newCursor();
1916 // if (cursor.toChild(xmlNs, "SupportedArchitectures")) {
1917 // cursor.removeXml();
1919 // cursor.dispose();
1923 public void getPlatformDefsBuildTargets(Vector
<Object
> targets
) {
1924 if (getfpdPlatformDefs().getBuildTargets() == null) {
1927 ListIterator li
= getfpdPlatformDefs().getBuildTargets().listIterator();
1928 while(li
.hasNext()) {
1929 targets
.add(li
.next());
1933 public void setPlatformDefsBuildTargets(Vector
<Object
> targets
) {
1934 getfpdPlatformDefs().setBuildTargets(targets
);
1937 public void genPlatformDefsSkuInfo(String id
, String name
) {
1938 SkuInfoDocument
.SkuInfo skuInfo
= null;
1939 if (getfpdPlatformDefs().getSkuInfo() == null) {
1940 skuInfo
= getfpdPlatformDefs().addNewSkuInfo();
1942 skuInfo
= getfpdPlatformDefs().getSkuInfo();
1943 if (skuInfo
.getUiSkuNameList() == null || skuInfo
.getUiSkuNameList().size() == 0) {
1944 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
1945 skuName
.setSkuID(new BigInteger("0"));
1946 skuName
.setStringValue("DEFAULT");
1948 if (id
.equals("0")) {
1951 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
1952 skuName
.setSkuID(new BigInteger(id
));
1953 skuName
.setStringValue(name
);
1956 public int getPlatformDefsSkuInfoCount(){
1957 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
1960 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();
1963 public void getPlatformDefsSkuInfos(String
[][] saa
){
1964 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
1965 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
1966 removeElement(getfpdDynPcdBuildDefs());
1967 fpdDynPcdBuildDefs
= null;
1972 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
1973 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
1975 while(li
.hasNext()) {
1976 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
1977 saa
[i
][0] = sku
.getSkuID()+"";
1978 saa
[i
][1] = sku
.getStringValue();
1983 public void removePlatformDefsSkuInfo(int i
) {
1984 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
1985 if (skuInfo
== null || i
== 0) {
1989 XmlCursor cursor
= skuInfo
.newCursor();
1990 if (cursor
.toFirstChild()) {
1991 for (int j
= 0; j
< i
; ++j
) {
1992 cursor
.toNextSibling();
1999 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
2000 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2001 if (skuInfo
== null || i
== 0) {
2005 XmlCursor cursor
= skuInfo
.newCursor();
2006 if (cursor
.toFirstChild()) {
2007 for (int j
= 0; j
< i
; ++j
) {
2008 cursor
.toNextSibling();
2010 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2011 sku
.setSkuID(new BigInteger(id
));
2012 sku
.setStringValue(name
);
2017 public String
getPlatformDefsInterDir(){
2018 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2021 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2024 public void setPlatformDefsInterDir(String interDir
){
2025 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2028 public String
getPlatformDefsOutputDir() {
2029 return getfpdPlatformDefs().getOutputDirectory();
2032 public void setPlatformDefsOutputDir(String outputDir
) {
2033 if (outputDir
!= null && outputDir
.length() > 0) {
2034 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2037 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2038 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2045 public FlashDocument
.Flash
getfpdFlash() {
2046 if (fpdFlash
== null) {
2047 fpdFlash
= fpdRoot
.addNewFlash();
2052 public void genFlashDefinitionFile(String file
) {
2053 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2055 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2058 fdf
.setStringValue(file
);
2061 public String
getFlashDefinitionFile() {
2062 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2067 return fdf
.getStringValue();
2070 public void genFvImagesNameValue(String name
, String value
) {
2072 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2074 fi
= getfpdFlash().addNewFvImages();
2077 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2082 public void removeFvImagesNameValue(int i
){
2084 XmlObject o
= getfpdFlash().getFvImages();
2089 QName qNameValue
= new QName(xmlNs
, "NameValue");
2090 XmlCursor cursor
= o
.newCursor();
2091 if (cursor
.toChild(qNameValue
)) {
2092 for (int j
= 0; j
< i
; ++j
) {
2093 cursor
.toNextSibling(qNameValue
);
2100 public void updateFvImagesNameValue(int i
, String name
, String value
){
2102 XmlObject o
= getfpdFlash().getFvImages();
2107 QName qNameValue
= new QName(xmlNs
, "NameValue");
2108 XmlCursor cursor
= o
.newCursor();
2109 if (cursor
.toChild(qNameValue
)) {
2110 for (int j
= 0; j
< i
; ++j
) {
2111 cursor
.toNextSibling(qNameValue
);
2113 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2120 public int getFvImagesNameValueCount() {
2122 FvImagesDocument
.FvImages fi
= null;
2123 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2126 return fi
.getNameValueList().size();
2129 public void getFvImagesNameValues(String
[][] nv
) {
2131 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2135 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2137 ListIterator li
= l
.listIterator();
2138 while (li
.hasNext()) {
2139 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2141 nv
[i
][0] = e
.getName();
2142 nv
[i
][1] = e
.getValue();
2148 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2150 FvImagesDocument
.FvImages fis
= null;
2151 if ((fis
= getfpdFlash().getFvImages()) == null) {
2152 fis
= getfpdFlash().addNewFvImages();
2156 //gen FvImage with FvImageNames array
2158 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2159 for (int i
= 0; i
< names
.length
; ++i
) {
2160 fi
.addFvImageNames(names
[i
]);
2162 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2163 if (options
!= null){
2164 setFvImagesFvImageFvImageOptions(options
, fi
);
2168 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
2169 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
2171 fio
= fi
.addNewFvImageOptions();
2174 Set
<String
> key
= options
.keySet();
2175 Iterator
<String
> i
= key
.iterator();
2176 while (i
.hasNext()) {
2178 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
2179 String k
= (String
)i
.next();
2182 nv
.setValue((String
)options
.get(k
));
2189 public void removeFvImagesFvImage(int i
) {
2191 XmlObject o
= getfpdFlash().getFvImages();
2196 QName qFvImage
= new QName(xmlNs
, "FvImage");
2197 XmlCursor cursor
= o
.newCursor();
2198 if (cursor
.toChild(qFvImage
)) {
2199 for (int j
= 0; j
< i
; ++j
) {
2200 cursor
.toNextSibling(qFvImage
);
2207 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
2209 XmlObject o
= getfpdFlash().getFvImages();
2213 XmlCursor cursor
= o
.newCursor();
2214 QName qFvImage
= new QName(xmlNs
, "FvImage");
2215 if (cursor
.toChild(qFvImage
)) {
2216 for (int j
= 0; j
< i
; ++j
) {
2217 cursor
.toNextSibling(qFvImage
);
2219 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2220 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2223 // remove old FvImageNames before adding new ones
2225 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
2226 cursor
.toChild(qFvImageNames
);
2228 while (cursor
.toNextSibling(qFvImageNames
)) {
2232 for (int k
= 0; k
< names
.length
; ++k
) {
2233 fi
.addFvImageNames(names
[k
]);
2236 // remove old FvImageOptions before adding new options
2238 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
2239 cursor
.toNextSibling(qFvImageOptions
);
2242 setFvImagesFvImageFvImageOptions(options
, fi
);
2247 public int getFvImagesFvImageCount() {
2249 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2252 return getfpdFlash().getFvImages().getFvImageList().size();
2255 /**Only Get Fv image setting - name and type.
2258 public void getFvImagesFvImages(String
[][] saa
) {
2260 if (getfpdFlash().getFvImages() == null) {
2263 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2267 ListIterator li
= l
.listIterator();
2269 while(li
.hasNext()) {
2270 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2272 // get FvImageNames array, space separated
2274 List
<String
> lfn
= fi
.getFvImageNamesList();
2275 ListIterator lfni
= lfn
.listIterator();
2277 while (lfni
.hasNext()) {
2278 saa
[i
][0] += (String
)lfni
.next();
2281 saa
[i
][0] = saa
[i
][0].trim();
2283 saa
[i
][1] = fi
.getType()+"";
2289 /**Get FvImage Options for FvImage i
2290 * @param i the ith FvImage
2292 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
2293 XmlObject o
= getfpdFlash().getFvImages();
2297 XmlCursor cursor
= o
.newCursor();
2298 QName qFvImage
= new QName(xmlNs
, "FvImage");
2299 if (cursor
.toChild(qFvImage
)) {
2300 for (int j
= 0; j
< i
; ++j
) {
2301 cursor
.toNextSibling(qFvImage
);
2303 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2304 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
2307 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
2308 while(li
.hasNext()){
2309 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
2310 m
.put(nv
.getName(), nv
.getValue());
2316 Get platform header element
2317 @return PlatformHeaderDocument.PlatformHeader
2319 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
2320 if (fpdHdr
== null) {
2321 fpdHdr
= fpdRoot
.addNewPlatformHeader();
2323 genPlatformDefsSkuInfo("0", "DEFAULT");
2327 public String
getFpdHdrPlatformName() {
2328 return getFpdHdr().getPlatformName();
2331 public String
getFpdHdrGuidValue() {
2332 return getFpdHdr().getGuidValue();
2335 public String
getFpdHdrVer() {
2336 return getFpdHdr().getVersion();
2339 public String
getFpdHdrAbs() {
2340 return getFpdHdr().getAbstract();
2343 public String
getFpdHdrDescription() {
2344 return getFpdHdr().getDescription();
2347 public String
getFpdHdrCopyright() {
2348 return getFpdHdr().getCopyright();
2351 public String
getFpdHdrLicense() {
2352 LicenseDocument
.License l
= getFpdHdr().getLicense();
2356 return l
.getStringValue();
2359 public String
getFpdHdrUrl() {
2360 LicenseDocument
.License l
= getFpdHdr().getLicense();
2367 public String
getFpdHdrSpec() {
2369 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2370 // return getFpdHdr().getSpecification();
2373 public void setFpdHdrPlatformName(String name
){
2374 getFpdHdr().setPlatformName(name
);
2377 public void setFpdHdrGuidValue(String guid
){
2378 getFpdHdr().setGuidValue(guid
);
2381 public void setFpdHdrVer(String v
){
2382 getFpdHdr().setVersion(v
);
2385 public void setFpdHdrAbs(String abs
) {
2386 getFpdHdr().setAbstract(abs
);
2389 public void setFpdHdrDescription(String desc
){
2390 getFpdHdr().setDescription(desc
);
2393 public void setFpdHdrCopyright(String cr
) {
2394 getFpdHdr().setCopyright(cr
);
2397 public void setFpdHdrLicense(String license
){
2398 LicenseDocument
.License l
= getFpdHdr().getLicense();
2400 getFpdHdr().addNewLicense().setStringValue(license
);
2403 l
.setStringValue(license
);
2407 public void setFpdHdrUrl(String url
){
2408 LicenseDocument
.License l
= getFpdHdr().getLicense();
2414 public void setFpdHdrSpec(String s
){
2415 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2416 getFpdHdr().setSpecification(s
);
2419 Save the processed xml contents to file
2421 @param fpdFile The file to save xml contents
2422 @throws IOException Exceptions during file operation
2424 public void saveAs(File fpdFile
) throws IOException
{
2426 XmlOptions options
= new XmlOptions();
2428 options
.setCharacterEncoding("UTF-8");
2429 options
.setSavePrettyPrint();
2430 options
.setSavePrettyPrintIndent(2);
2432 fpdd
.save(fpdFile
, options
);
2433 } catch (IOException e
) {
2434 e
.printStackTrace();
2439 private String
listToString(List l
) {
2444 ListIterator li
= l
.listIterator();
2445 while(li
.hasNext()) {
2452 private void removeElement(XmlObject o
) {
2453 XmlCursor cursor
= o
.newCursor();
2459 class PcdItemTypeConflictException
extends Exception
{
2464 private static final long serialVersionUID
= 1L;
2465 private String details
= null;
2467 PcdItemTypeConflictException(String info
){
2468 details
= "ItemTypeConflict: " + info
;
2471 public String
getMessage() {
2476 class PcdDeclNotFound
extends Exception
{
2481 private static final long serialVersionUID
= 1L;
2482 private String details
= null;
2484 PcdDeclNotFound(String info
) {
2485 details
= "PcdDeclNotFound: " + info
;
2488 public String
getMessage() {
2493 class PcdValueMalFormed
extends Exception
{
2498 private static final long serialVersionUID
= 1L;
2499 private String details
= null;
2501 PcdValueMalFormed(String info
) {
2502 details
= "PcdValueMalFormed: " + info
;
2505 public String
getMessage() {