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){
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) {
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().equals(s
[0]) && msa
.getPackageGuid().equals(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) {
1038 removeElement(getfpdDynPcdBuildDefs());
1039 fpdDynPcdBuildDefs
= null;
1042 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1045 public void getDynamicPcdBuildData(String
[][] saa
) {
1046 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
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) {
1968 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
1969 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
1971 while(li
.hasNext()) {
1972 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
1973 saa
[i
][0] = sku
.getSkuID()+"";
1974 saa
[i
][1] = sku
.getStringValue();
1979 public void removePlatformDefsSkuInfo(int i
) {
1980 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
1981 if (skuInfo
== null || i
== 0) {
1985 XmlCursor cursor
= skuInfo
.newCursor();
1986 if (cursor
.toFirstChild()) {
1987 for (int j
= 0; j
< i
; ++j
) {
1988 cursor
.toNextSibling();
1995 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
1996 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
1997 if (skuInfo
== null || i
== 0) {
2001 XmlCursor cursor
= skuInfo
.newCursor();
2002 if (cursor
.toFirstChild()) {
2003 for (int j
= 0; j
< i
; ++j
) {
2004 cursor
.toNextSibling();
2006 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2007 sku
.setSkuID(new BigInteger(id
));
2008 sku
.setStringValue(name
);
2013 public String
getPlatformDefsInterDir(){
2014 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2017 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2020 public void setPlatformDefsInterDir(String interDir
){
2021 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2024 public String
getPlatformDefsOutputDir() {
2025 return getfpdPlatformDefs().getOutputDirectory();
2028 public void setPlatformDefsOutputDir(String outputDir
) {
2029 if (outputDir
!= null && outputDir
.length() > 0) {
2030 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2033 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2034 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2041 public FlashDocument
.Flash
getfpdFlash() {
2042 if (fpdFlash
== null) {
2043 fpdFlash
= fpdRoot
.addNewFlash();
2048 public void genFlashDefinitionFile(String file
) {
2049 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2051 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2054 fdf
.setStringValue(file
);
2057 public String
getFlashDefinitionFile() {
2058 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2063 return fdf
.getStringValue();
2066 public void genFvImagesNameValue(String name
, String value
) {
2068 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2070 fi
= getfpdFlash().addNewFvImages();
2073 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2078 public void removeFvImagesNameValue(int i
){
2080 XmlObject o
= getfpdFlash().getFvImages();
2085 QName qNameValue
= new QName(xmlNs
, "NameValue");
2086 XmlCursor cursor
= o
.newCursor();
2087 if (cursor
.toChild(qNameValue
)) {
2088 for (int j
= 0; j
< i
; ++j
) {
2089 cursor
.toNextSibling(qNameValue
);
2096 public void updateFvImagesNameValue(int i
, String name
, String value
){
2098 XmlObject o
= getfpdFlash().getFvImages();
2103 QName qNameValue
= new QName(xmlNs
, "NameValue");
2104 XmlCursor cursor
= o
.newCursor();
2105 if (cursor
.toChild(qNameValue
)) {
2106 for (int j
= 0; j
< i
; ++j
) {
2107 cursor
.toNextSibling(qNameValue
);
2109 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2116 public int getFvImagesNameValueCount() {
2118 FvImagesDocument
.FvImages fi
= null;
2119 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2122 return fi
.getNameValueList().size();
2125 public void getFvImagesNameValues(String
[][] nv
) {
2127 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2131 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2133 ListIterator li
= l
.listIterator();
2134 while (li
.hasNext()) {
2135 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2137 nv
[i
][0] = e
.getName();
2138 nv
[i
][1] = e
.getValue();
2144 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2146 FvImagesDocument
.FvImages fis
= null;
2147 if ((fis
= getfpdFlash().getFvImages()) == null) {
2148 fis
= getfpdFlash().addNewFvImages();
2152 //gen FvImage with FvImageNames array
2154 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2155 for (int i
= 0; i
< names
.length
; ++i
) {
2156 fi
.addFvImageNames(names
[i
]);
2158 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2159 if (options
!= null){
2160 setFvImagesFvImageFvImageOptions(options
, fi
);
2164 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
2165 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
2167 fio
= fi
.addNewFvImageOptions();
2170 Set
<String
> key
= options
.keySet();
2171 Iterator
<String
> i
= key
.iterator();
2172 while (i
.hasNext()) {
2174 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
2175 String k
= (String
)i
.next();
2178 nv
.setValue((String
)options
.get(k
));
2185 public void removeFvImagesFvImage(int i
) {
2187 XmlObject o
= getfpdFlash().getFvImages();
2192 QName qFvImage
= new QName(xmlNs
, "FvImage");
2193 XmlCursor cursor
= o
.newCursor();
2194 if (cursor
.toChild(qFvImage
)) {
2195 for (int j
= 0; j
< i
; ++j
) {
2196 cursor
.toNextSibling(qFvImage
);
2203 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
2205 XmlObject o
= getfpdFlash().getFvImages();
2209 XmlCursor cursor
= o
.newCursor();
2210 QName qFvImage
= new QName(xmlNs
, "FvImage");
2211 if (cursor
.toChild(qFvImage
)) {
2212 for (int j
= 0; j
< i
; ++j
) {
2213 cursor
.toNextSibling(qFvImage
);
2215 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2216 fi
.setType(FvImageTypes
.Enum
.forString(types
));
2219 // remove old FvImageNames before adding new ones
2221 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
2222 cursor
.toChild(qFvImageNames
);
2224 while (cursor
.toNextSibling(qFvImageNames
)) {
2228 for (int k
= 0; k
< names
.length
; ++k
) {
2229 fi
.addFvImageNames(names
[k
]);
2232 // remove old FvImageOptions before adding new options
2234 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
2235 cursor
.toNextSibling(qFvImageOptions
);
2238 setFvImagesFvImageFvImageOptions(options
, fi
);
2243 public int getFvImagesFvImageCount() {
2245 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
2248 return getfpdFlash().getFvImages().getFvImageList().size();
2251 /**Only Get Fv image setting - name and type.
2254 public void getFvImagesFvImages(String
[][] saa
) {
2256 if (getfpdFlash().getFvImages() == null) {
2259 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
2263 ListIterator li
= l
.listIterator();
2265 while(li
.hasNext()) {
2266 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
2268 // get FvImageNames array, space separated
2270 List
<String
> lfn
= fi
.getFvImageNamesList();
2271 ListIterator lfni
= lfn
.listIterator();
2273 while (lfni
.hasNext()) {
2274 saa
[i
][0] += (String
)lfni
.next();
2277 saa
[i
][0] = saa
[i
][0].trim();
2279 saa
[i
][1] = fi
.getType()+"";
2285 /**Get FvImage Options for FvImage i
2286 * @param i the ith FvImage
2288 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
2289 XmlObject o
= getfpdFlash().getFvImages();
2293 XmlCursor cursor
= o
.newCursor();
2294 QName qFvImage
= new QName(xmlNs
, "FvImage");
2295 if (cursor
.toChild(qFvImage
)) {
2296 for (int j
= 0; j
< i
; ++j
) {
2297 cursor
.toNextSibling(qFvImage
);
2299 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2300 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
2303 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
2304 while(li
.hasNext()){
2305 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
2306 m
.put(nv
.getName(), nv
.getValue());
2312 Get platform header element
2313 @return PlatformHeaderDocument.PlatformHeader
2315 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
2316 if (fpdHdr
== null) {
2317 fpdHdr
= fpdRoot
.addNewPlatformHeader();
2319 genPlatformDefsSkuInfo("0", "DEFAULT");
2323 public String
getFpdHdrPlatformName() {
2324 return getFpdHdr().getPlatformName();
2327 public String
getFpdHdrGuidValue() {
2328 return getFpdHdr().getGuidValue();
2331 public String
getFpdHdrVer() {
2332 return getFpdHdr().getVersion();
2335 public String
getFpdHdrAbs() {
2336 return getFpdHdr().getAbstract();
2339 public String
getFpdHdrDescription() {
2340 return getFpdHdr().getDescription();
2343 public String
getFpdHdrCopyright() {
2344 return getFpdHdr().getCopyright();
2347 public String
getFpdHdrLicense() {
2348 LicenseDocument
.License l
= getFpdHdr().getLicense();
2352 return l
.getStringValue();
2355 public String
getFpdHdrUrl() {
2356 LicenseDocument
.License l
= getFpdHdr().getLicense();
2363 public String
getFpdHdrSpec() {
2365 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2366 // return getFpdHdr().getSpecification();
2369 public void setFpdHdrPlatformName(String name
){
2370 getFpdHdr().setPlatformName(name
);
2373 public void setFpdHdrGuidValue(String guid
){
2374 getFpdHdr().setGuidValue(guid
);
2377 public void setFpdHdrVer(String v
){
2378 getFpdHdr().setVersion(v
);
2381 public void setFpdHdrAbs(String abs
) {
2382 getFpdHdr().setAbstract(abs
);
2385 public void setFpdHdrDescription(String desc
){
2386 getFpdHdr().setDescription(desc
);
2389 public void setFpdHdrCopyright(String cr
) {
2390 getFpdHdr().setCopyright(cr
);
2393 public void setFpdHdrLicense(String license
){
2394 LicenseDocument
.License l
= getFpdHdr().getLicense();
2396 getFpdHdr().addNewLicense().setStringValue(license
);
2399 l
.setStringValue(license
);
2403 public void setFpdHdrUrl(String url
){
2404 LicenseDocument
.License l
= getFpdHdr().getLicense();
2410 public void setFpdHdrSpec(String s
){
2411 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
2412 getFpdHdr().setSpecification(s
);
2415 Save the processed xml contents to file
2417 @param fpdFile The file to save xml contents
2418 @throws IOException Exceptions during file operation
2420 public void saveAs(File fpdFile
) throws IOException
{
2422 XmlOptions options
= new XmlOptions();
2424 options
.setCharacterEncoding("UTF-8");
2425 options
.setSavePrettyPrint();
2426 options
.setSavePrettyPrintIndent(2);
2428 fpdd
.save(fpdFile
, options
);
2429 } catch (IOException e
) {
2430 e
.printStackTrace();
2435 private String
listToString(List l
) {
2440 ListIterator li
= l
.listIterator();
2441 while(li
.hasNext()) {
2448 private void removeElement(XmlObject o
) {
2449 XmlCursor cursor
= o
.newCursor();
2455 class PcdItemTypeConflictException
extends Exception
{
2460 private static final long serialVersionUID
= 1L;
2461 private String details
= null;
2463 PcdItemTypeConflictException(String info
){
2467 public String
getMessage() {
2472 class PcdDeclNotFound
extends Exception
{
2477 private static final long serialVersionUID
= 1L;
2478 private String details
= null;
2480 PcdDeclNotFound(String info
) {
2484 public String
getMessage() {
2489 class PcdValueMalFormed
extends Exception
{
2494 private static final long serialVersionUID
= 1L;
2495 private String details
= null;
2497 PcdValueMalFormed(String info
) {
2501 public String
getMessage() {