2 Java class FpdFileContents is used to parse fpd xml file.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 package org
.tianocore
.frameworkwizard
.platform
.ui
;
16 import java
.io
.IOException
;
17 import java
.math
.BigInteger
;
18 import java
.util
.ArrayList
;
19 import java
.util
.HashMap
;
20 import java
.util
.Iterator
;
21 import java
.util
.LinkedHashMap
;
22 import java
.util
.List
;
23 import java
.util
.ListIterator
;
26 import java
.util
.Vector
;
28 import javax
.xml
.namespace
.QName
;
30 import org
.apache
.xmlbeans
.XmlCursor
;
31 import org
.apache
.xmlbeans
.XmlObject
;
32 import org
.apache
.xmlbeans
.XmlOptions
;
33 import org
.tianocore
.AntTaskDocument
;
34 import org
.tianocore
.BuildOptionsDocument
;
35 import org
.tianocore
.DynamicPcdBuildDefinitionsDocument
;
36 import org
.tianocore
.EfiSectionType
;
37 import org
.tianocore
.FlashDefinitionFileDocument
;
38 import org
.tianocore
.FlashDocument
;
39 import org
.tianocore
.FrameworkModulesDocument
;
40 import org
.tianocore
.IntermediateOutputType
;
41 import org
.tianocore
.LibrariesDocument
;
42 import org
.tianocore
.ModuleSADocument
;
43 import org
.tianocore
.ModuleSaBuildOptionsDocument
;
44 import org
.tianocore
.ModuleSurfaceAreaDocument
;
45 import org
.tianocore
.OptionDocument
;
46 import org
.tianocore
.OptionsDocument
;
47 import org
.tianocore
.PcdBuildDefinitionDocument
;
48 import org
.tianocore
.PcdCodedDocument
;
49 import org
.tianocore
.PcdDataTypes
;
50 import org
.tianocore
.PcdDeclarationsDocument
;
51 import org
.tianocore
.PcdItemTypes
;
52 import org
.tianocore
.PlatformDefinitionsDocument
;
53 import org
.tianocore
.PlatformSurfaceAreaDocument
;
54 import org
.tianocore
.FvImageTypes
;
55 import org
.tianocore
.FvImagesDocument
;
56 import org
.tianocore
.LicenseDocument
;
57 import org
.tianocore
.PlatformHeaderDocument
;
58 import org
.tianocore
.SkuInfoDocument
;
59 import org
.tianocore
.UserDefinedAntTasksDocument
;
60 import org
.tianocore
.UserExtensionsDocument
;
61 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.WorkspaceProfile
;
62 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.SurfaceAreaQuery
;
63 import org
.tianocore
.frameworkwizard
.module
.Identifications
.ModuleIdentification
;
64 import org
.tianocore
.frameworkwizard
.packaging
.PackageIdentification
;
67 This class processes fpd file contents such as add remove xml elements.
68 @since PackageEditor 1.0
70 public class FpdFileContents
{
72 static final String xmlNs
= "http://www.TianoCore.org/2006/Edk2.0";
73 static final String regExpNewLineAndSpaces
= "((\n)|(\r\n)|(\r)|(\u0085)|(\u2028)|(\u2029))(\\s)*";
75 private PlatformSurfaceAreaDocument fpdd
= null;
77 private PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpdRoot
= null;
79 private PlatformHeaderDocument
.PlatformHeader fpdHdr
= null;
81 private PlatformDefinitionsDocument
.PlatformDefinitions fpdPlatformDefs
= null;
83 private FlashDocument
.Flash fpdFlash
= null;
85 private BuildOptionsDocument
.BuildOptions fpdBuildOpts
= null;
87 private FrameworkModulesDocument
.FrameworkModules fpdFrameworkModules
= null;
89 private DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs
= null;
91 private HashMap
<String
, ArrayList
<String
>> dynPcdMap
= null;
93 private HashMap
<String
, String
> defaultPcdValue
= new HashMap
<String
, String
>();
95 private String
itemType (String pcdInfo
) {
97 return pcdInfo
.substring(pcdInfo
.lastIndexOf(" ") + 1);
101 * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings.
103 public void initDynPcdMap() {
104 if (dynPcdMap
== null) {
105 dynPcdMap
= new HashMap
<String
, ArrayList
<String
>>();
106 List
<ModuleSADocument
.ModuleSA
> l
= getfpdFrameworkModules().getModuleSAList();
108 removeElement(getfpdFrameworkModules());
109 fpdFrameworkModules
= null;
112 ListIterator
<ModuleSADocument
.ModuleSA
> li
= l
.listIterator();
113 while (li
.hasNext()) {
114 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
115 if (moduleSa
.getPcdBuildDefinition() == null || moduleSa
.getPcdBuildDefinition().getPcdDataList() == null) {
118 String ModuleInfo
= moduleSa
.getModuleGuid().toLowerCase() + " " + moduleSa
.getModuleVersion() +
119 " " + moduleSa
.getPackageGuid().toLowerCase() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
120 List
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lp
= moduleSa
.getPcdBuildDefinition().getPcdDataList();
121 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> lpi
= lp
.listIterator();
122 while (lpi
.hasNext()) {
123 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= lpi
.next();
124 String pcdKey
= pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName();
125 if (dynPcdMap
.get(pcdKey
) == null) {
126 ArrayList
<String
> al
= new ArrayList
<String
>();
127 al
.add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
128 dynPcdMap
.put(pcdKey
, al
);
131 dynPcdMap
.get(pcdKey
).add(ModuleInfo
+ " " + pcdData
.getItemType().toString());
138 public ArrayList
<String
> getDynPcdMapValue(String key
) {
139 return dynPcdMap
.get(key
);
142 Constructor to create a new spd file
144 public FpdFileContents() {
146 fpdd
= PlatformSurfaceAreaDocument
.Factory
.newInstance();
147 fpdRoot
= fpdd
.addNewPlatformSurfaceArea();
152 Constructor for existing document object
155 public FpdFileContents(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
157 fpdHdr
= fpdRoot
.getPlatformHeader();
158 fpdPlatformDefs
= fpdRoot
.getPlatformDefinitions();
159 fpdBuildOpts
= fpdRoot
.getBuildOptions();
160 fpdFrameworkModules
= fpdRoot
.getFrameworkModules();
161 fpdDynPcdBuildDefs
= fpdRoot
.getDynamicPcdBuildDefinitions();
162 fpdFlash
= fpdRoot
.getFlash();
166 Constructor based on an existing spd file
168 @param f Existing spd file
170 public FpdFileContents(File f
) {
172 fpdd
= PlatformSurfaceAreaDocument
.Factory
.parse(f
);
173 fpdRoot
= fpdd
.getPlatformSurfaceArea();
174 } catch (Exception e
) {
175 System
.out
.println(e
.toString());
179 public DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
getfpdDynPcdBuildDefs() {
180 if (fpdDynPcdBuildDefs
== null){
181 fpdDynPcdBuildDefs
= fpdRoot
.addNewDynamicPcdBuildDefinitions();
183 return fpdDynPcdBuildDefs
;
186 public FrameworkModulesDocument
.FrameworkModules
getfpdFrameworkModules() {
187 if (fpdFrameworkModules
== null){
188 fpdFrameworkModules
= fpdRoot
.addNewFrameworkModules();
190 return fpdFrameworkModules
;
193 public void getFrameworkModuleSAByFvBinding (String fvName
, Vector
<String
[]> vGuid
) {
194 if (getFrameworkModulesCount() == 0){
198 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
199 while(li
.hasNext()) {
200 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
201 if (moduleSa
.getModuleSaBuildOptions() == null) {
204 String fvBinding
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
205 if (fvBinding
== null) {
209 String
[] fvNames
= fvBinding
.split(" ");
210 for (int i
= 0; i
< fvNames
.length
; ++i
) {
212 // BugBug : underscore "_" should not be replaced!!!
213 // But Fv name FVMAIN from fdf file not consist with FV_MAIN in fpd file.
215 if (fvNames
[i
].equals(fvName
) || fvNames
[i
].replaceAll("_", "").equals(fvName
)) {
216 String
[] sa
= new String
[] {moduleSa
.getModuleGuid(), moduleSa
.getModuleVersion(),
217 moduleSa
.getPackageGuid(), moduleSa
.getPackageVersion(),
218 listToString(moduleSa
.getSupArchList())};
226 public int getFrameworkModulesCount() {
227 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
228 removeElement(getfpdFrameworkModules());
229 fpdFrameworkModules
= null;
232 return getfpdFrameworkModules().getModuleSAList().size();
235 public void getFrameworkModulesInfo(String
[][] saa
) {
236 if (getFrameworkModulesCount() == 0){
240 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
242 while(li
.hasNext()) {
243 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
244 saa
[i
][0] = moduleSa
.getModuleGuid();
245 saa
[i
][1] = moduleSa
.getModuleVersion();
247 saa
[i
][2] = moduleSa
.getPackageGuid();
248 saa
[i
][3] = moduleSa
.getPackageVersion();
249 saa
[i
][4] = listToString(moduleSa
.getSupArchList());
254 public void getFrameworkModuleInfo(int i
, String
[] sa
) {
255 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
259 sa
[0] = msa
.getModuleGuid();
260 sa
[1] = msa
.getModuleVersion();
261 sa
[2] = msa
.getPackageGuid();
262 sa
[3] = msa
.getPackageVersion();
263 sa
[4] = listToString(msa
.getSupArchList());
266 public ModuleSADocument
.ModuleSA
getModuleSA(String key
) {
268 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0) {
269 removeElement(getfpdFrameworkModules());
270 fpdFrameworkModules
= null;
273 String
[] s
= key
.split(" ");
274 String archsInKey
= "";
276 for (int i
= 4; i
< s
.length
; ++i
) {
280 archsInKey
= archsInKey
.trim();
283 ListIterator li
= getfpdFrameworkModules().getModuleSAList().listIterator();
284 while(li
.hasNext()) {
285 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)li
.next();
286 if (moduleSa
.getModuleGuid().equalsIgnoreCase(s
[0]) && moduleSa
.getPackageGuid().equalsIgnoreCase(s
[2])) {
287 if (moduleSa
.getModuleVersion() != null) {
288 if (!moduleSa
.getModuleVersion().equals(s
[1])) {
292 if (moduleSa
.getPackageVersion() != null) {
293 if (!moduleSa
.getPackageVersion().equals(s
[3])) {
297 //ToDo add arch check .
298 if (moduleSa
.getSupArchList() != null) {
299 if (listToString(moduleSa
.getSupArchList()).equals(archsInKey
)) {
304 if (archsInKey
.length() == 0) {
313 private ModuleSADocument
.ModuleSA
getModuleSA(int i
) {
314 ModuleSADocument
.ModuleSA moduleSa
= null;
315 if (fpdRoot
.getFrameworkModules() == null) {
318 XmlCursor cursor
= fpdRoot
.getFrameworkModules().newCursor();
319 if (cursor
.toFirstChild()) {
320 for (int j
= 0; j
< i
; ++j
) {
321 cursor
.toNextSibling();
323 moduleSa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
329 public void removeModuleSA(int i
) {
330 XmlObject o
= fpdRoot
.getFrameworkModules();
335 XmlCursor cursor
= o
.newCursor();
336 if (cursor
.toFirstChild()) {
337 for (int j
= 0; j
< i
; ++j
) {
338 cursor
.toNextSibling();
341 // remove pcd from dynPcdMap, if DynamicPcdBuildData exists, remove them too.
343 ModuleSADocument
.ModuleSA moduleSa
= (ModuleSADocument
.ModuleSA
)cursor
.getObject();
344 String moduleInfo
= moduleSa
.getModuleGuid() + " " + moduleSa
.getModuleVersion() + " " +
345 moduleSa
.getPackageGuid()+ " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
346 PcdBuildDefinitionDocument
.PcdBuildDefinition pcdBuildDef
= moduleSa
.getPcdBuildDefinition();
347 if (pcdBuildDef
!= null && pcdBuildDef
.getPcdDataList() != null) {
348 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
> li
= pcdBuildDef
.getPcdDataList().listIterator();
349 while(li
.hasNext()) {
350 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
351 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(), moduleInfo
);
356 while (cursor
.hasPrevToken()) {
357 cursor
.toPrevToken();
358 if (!cursor
.isText()) {
361 if (cursor
.getObject() == null) {
364 String s
= cursor
.getTextValue();
365 if (s
.matches(regExpNewLineAndSpaces
)) {
370 if (cursor
.isComment()) {
376 if (getFrameworkModulesCount() == 0) {
378 removeElement(getfpdFrameworkModules());
379 fpdFrameworkModules
= null;
386 public boolean adjustPcd (int seqModuleSa
) throws Exception
{
387 boolean dataModified
= false;
388 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(seqModuleSa
);
389 int pcdCount
= getPcdDataCount(seqModuleSa
);
390 String
[][] saaModuleSaPcd
= new String
[pcdCount
][7];
391 getPcdData(seqModuleSa
, saaModuleSaPcd
);
392 String mg
= moduleSa
.getModuleGuid();
393 String mv
= moduleSa
.getModuleVersion();
394 String pg
= moduleSa
.getPackageGuid();
395 String pv
= moduleSa
.getPackageVersion();
396 String arch
= listToString(moduleSa
.getSupArchList());
398 // delete pcd in ModuleSA but not in MSA files any longer.
400 String moduleKey
= mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
;
401 int libCount
= getLibraryInstancesCount(moduleKey
);
402 String
[][] saaLib
= new String
[libCount
][5];
403 getLibraryInstances(moduleKey
, saaLib
);
404 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(moduleKey
);
405 Vector
<ModuleIdentification
> vMi
= new Vector
<ModuleIdentification
>();
407 // create vector for module & library instance MIs.
410 for (int j
= 0; j
< saaLib
.length
; ++j
) {
411 String libKey
= saaLib
[j
][1] + " " + saaLib
[j
][2] + " " + saaLib
[j
][3] + " " + saaLib
[j
][4];
412 ModuleIdentification libMi
= WorkspaceProfile
.getModuleId(libKey
);
416 nextPcd
:for (int i
= 0; i
< saaModuleSaPcd
.length
; ++i
) {
418 for (int j
= 0; j
< vMi
.size(); ++j
) {
419 ModuleIdentification nextMi
= vMi
.get(j
);
420 if (WorkspaceProfile
.pcdInMsa(saaModuleSaPcd
[i
][0], saaModuleSaPcd
[i
][1], nextMi
)) {
424 removePcdData(seqModuleSa
, saaModuleSaPcd
[i
][0], saaModuleSaPcd
[i
][1]);
428 // add new Pcd from MSA file to ModuleSA.
430 for (int i
= 0; i
< vMi
.size(); ++i
) {
431 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
) WorkspaceProfile
432 .getModuleXmlObject(vMi
434 if (msa
.getPcdCoded() == null || msa
.getPcdCoded().getPcdEntryList() == null) {
437 ListIterator li
= msa
.getPcdCoded().getPcdEntryList().listIterator();
438 msaPcdIter
:while (li
.hasNext()) {
439 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
) li
.next();
440 ArrayList
<String
> al
= getDynPcdMapValue(msaPcd
.getCName() + " " + msaPcd
.getTokenSpaceGuidCName());
442 for (int j
= 0; j
< al
.size(); ++j
) {
443 if (al
.get(j
).contains(moduleKey
)) {
449 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, vMi
.get(i
));
450 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
451 if (spdPcd
== null) {
455 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module "
459 // AddItem to ModuleSA PcdBuildDefinitions
461 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue()
462 : msaPcd
.getDefaultValue();
464 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(),
465 msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType() + "", defaultVal
, moduleSa
);
474 private void maintainDynPcdMap(String pcdKey
, String moduleInfo
) {
476 ArrayList
<String
> al
= dynPcdMap
.get(pcdKey
);
480 String
[] s
= moduleInfo
.split(" ");
481 for(int i
= 0; i
< al
.size(); ++i
){
482 String consumer
= al
.get(i
);
483 if (consumer
.contains(s
[0].toLowerCase()) && consumer
.contains(s
[2].toLowerCase())){
484 String
[] consumerPart
= consumer
.split(" ");
485 if (!consumerPart
[4].equals(s
[4])) {
493 if (al
.size() == 0) {
494 defaultPcdValue
.remove(pcdKey
);
495 dynPcdMap
.remove(pcdKey
);
496 String
[] s1
= pcdKey
.split(" ");
497 removeDynamicPcdBuildData(s1
[0], s1
[1]);
502 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
504 public int getPcdDataCount (int i
){
505 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
507 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
510 return msa
.getPcdBuildDefinition().getPcdDataList().size();
514 public void getPcdData (int i
, String
[][] saa
) {
515 ModuleSADocument
.ModuleSA msa
= getModuleSA(i
);
517 if (msa
== null || msa
.getPcdBuildDefinition() == null || msa
.getPcdBuildDefinition().getPcdDataList() == null){
520 ListIterator
<PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
>li
= msa
.getPcdBuildDefinition().getPcdDataList().listIterator();
521 for (int k
= 0; k
< saa
.length
; ++k
) {
522 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= li
.next();
523 saa
[k
][0] = pcdData
.getCName();
524 saa
[k
][1] = pcdData
.getTokenSpaceGuidCName();
525 saa
[k
][2] = pcdData
.getItemType()+"";
526 saa
[k
][3] = pcdData
.getToken().toString();
527 saa
[k
][4] = pcdData
.getMaxDatumSize()+"";
528 saa
[k
][5] = pcdData
.getDatumType()+"";
529 saa
[k
][6] = pcdData
.getValue();
534 public void removePcdData (int seqModuleSa
, String cName
, String tsGuid
) {
535 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(seqModuleSa
);
536 if (moduleSa
== null || moduleSa
.getPcdBuildDefinition() == null){
540 String mg
= moduleSa
.getModuleGuid();
541 String mv
= moduleSa
.getModuleVersion();
542 String pg
= moduleSa
.getPackageGuid();
543 String pv
= moduleSa
.getPackageVersion();
544 String arch
= listToString(moduleSa
.getSupArchList());
545 String moduleKey
= mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
;
547 XmlCursor cursor
= moduleSa
.getPcdBuildDefinition().newCursor();
548 if (cursor
.toFirstChild()){
551 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
)cursor
.getObject();
552 if (pcdData
.getCName().equals(cName
) && pcdData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
553 maintainDynPcdMap(cName
+ " " + tsGuid
, moduleKey
);
554 if (getPcdDataCount(seqModuleSa
) == 1) {
561 while(cursor
.toNextSibling());
567 public void updatePcdData (String key
, String cName
, String tsGuid
, String itemType
, String maxSize
, String value
){
568 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(key
);
569 if (moduleSa
== null || moduleSa
.getPcdBuildDefinition() == null){
573 XmlCursor cursor
= moduleSa
.getPcdBuildDefinition().newCursor();
574 if (cursor
.toFirstChild()){
576 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
)cursor
.getObject();
577 if (pcdData
.getCName().equals(cName
) && pcdData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
579 // change item type while not updating dynPcdData????
581 if (itemType
!= null) {
582 pcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
585 if(pcdData
.getDatumType().equals("VOID*") && maxSize
!= null) {
586 pcdData
.setMaxDatumSize(new Integer(maxSize
));
589 // if value input is null, keep old value untouched.
592 pcdData
.setValue(value
);
593 defaultPcdValue
.put(cName
+ " " + tsGuid
, value
);
599 while(cursor
.toNextSibling());
604 /**Get original Pcd info from MSA & SPD files.
605 * @param mi ModuleIdentification from which MSA & SPD come
606 * @param cName PCD cName
607 * @param sa Results: HelpText, Original item type.
610 public boolean getPcdBuildDataInfo(ModuleIdentification mi
, String cName
, String tsGuid
, String
[] sa
) throws Exception
{
613 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(mi
);
614 if (msa
.getPcdCoded() == null) {
618 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
619 m
.put("ModuleSurfaceArea", msa
);
620 SurfaceAreaQuery
.setDoc(m
);
621 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, mi
);
623 // First look through MSA pcd entries.
625 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
626 ListIterator li
= l
.listIterator();
627 while(li
.hasNext()) {
628 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
629 if (!msaPcd
.getCName().equals(cName
)) {
632 if (!msaPcd
.getTokenSpaceGuidCName().equals(tsGuid
)) {
635 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
636 if (spdPcd
== null) {
640 throw new PcdDeclNotFound(mi
.getName() + " " + msaPcd
.getCName());
643 // Get Pcd help text and original item type.
645 sa
[0] = spdPcd
.getHelpText() + msaPcd
.getHelpText();
646 sa
[1] = msaPcd
.getPcdItemType()+"";
647 sa
[2] = msa
.getModuleDefinitions().getBinaryModule()+"";
661 private boolean multiSourcePcd (String cName
, String tsGuidCName
, String moduleKey
) {
662 int libCount
= getLibraryInstancesCount(moduleKey
);
663 String
[][] saaLib
= new String
[libCount
][5];
664 getLibraryInstances(moduleKey
, saaLib
);
665 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(moduleKey
);
666 Vector
<ModuleIdentification
> vMi
= new Vector
<ModuleIdentification
>();
668 // create vector for module & library instance MIs.
671 for (int j
= 0; j
< saaLib
.length
; ++j
) {
672 String libKey
= saaLib
[j
][1] + " " + saaLib
[j
][2] + " " + saaLib
[j
][3] + " " + saaLib
[j
][4];
673 ModuleIdentification libMi
= WorkspaceProfile
.getModuleId(libKey
);
677 int pcdSourceCount
= 0;
678 for (int i
= 0; i
< vMi
.size(); ++i
) {
679 if (WorkspaceProfile
.pcdInMsa(cName
, tsGuidCName
, vMi
.get(i
))) {
684 if (pcdSourceCount
< 2) {
693 /**Remove PCDBuildDefinition entries from ModuleSA
694 * @param moduleKey identifier of ModuleSA.
695 * @param consumer where these entries come from.
697 public void removePcdData(String moduleKey
, ModuleIdentification consumer
) {
699 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(consumer
);
700 if (msa
.getPcdCoded() == null) {
704 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
705 ListIterator li
= l
.listIterator();
707 while(li
.hasNext()) {
708 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
709 ModuleSADocument
.ModuleSA moduleSA
= getModuleSA(moduleKey
);
710 if (moduleSA
.getPcdBuildDefinition() != null) {
711 XmlCursor cursor
= moduleSA
.getPcdBuildDefinition().newCursor();
713 if (cursor
.toFirstChild()) {
715 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData pcdData
= (PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData
) cursor
717 String cName
= msaPcd
.getCName();
718 String tsGuidCName
= msaPcd
.getTokenSpaceGuidCName();
719 if (cName
.equals(pcdData
.getCName())
720 && tsGuidCName
.equals(pcdData
.getTokenSpaceGuidCName()) && !multiSourcePcd(cName
, tsGuidCName
, moduleKey
)) {
722 maintainDynPcdMap(pcdData
.getCName() + " " + pcdData
.getTokenSpaceGuidCName(),
727 } while (cursor
.toNextSibling());
731 if (moduleSA
.getPcdBuildDefinition().getPcdDataList().size() == 0) {
740 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"
742 public int getLibraryInstancesCount(String key
) {
743 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
744 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
747 return msa
.getLibraries().getInstanceList().size();
750 public void getLibraryInstances(String key
, String
[][] saa
){
751 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
752 if (msa
== null || msa
.getLibraries() == null || msa
.getLibraries().getInstanceList() == null){
756 ListIterator
<LibrariesDocument
.Libraries
.Instance
> li
= msa
.getLibraries().getInstanceList().listIterator();
757 for (int i
= 0; i
< saa
.length
; ++i
) {
758 LibrariesDocument
.Libraries
.Instance instance
= li
.next();
759 saa
[i
][1] = instance
.getModuleGuid();
760 saa
[i
][2] = instance
.getModuleVersion();
761 saa
[i
][3] = instance
.getPackageGuid();
762 saa
[i
][4] = instance
.getPackageVersion();
766 public void removeLibraryInstance(String key
, int i
) {
767 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
768 if (msa
== null || msa
.getLibraries() == null){
772 XmlCursor cursor
= msa
.getLibraries().newCursor();
773 if (cursor
.toFirstChild()) {
774 for (int j
= 0; j
< i
; ++j
) {
775 cursor
.toNextSibling();
778 while (cursor
.hasPrevToken()) {
779 cursor
.toPrevToken();
780 if (!cursor
.isText()) {
783 String s
= cursor
.getTextValue();
784 if (s
.matches(regExpNewLineAndSpaces
)) {
789 if (cursor
.isComment()) {
794 if (getLibraryInstancesCount(key
) == 0) {
803 public void genLibraryInstance(ModuleIdentification libMi
, String key
) {
804 ModuleSADocument
.ModuleSA msa
= getModuleSA(key
);
806 msa
= getfpdFrameworkModules().addNewModuleSA();
808 LibrariesDocument
.Libraries libs
= msa
.getLibraries();
810 libs
= msa
.addNewLibraries();
813 String mn
= libMi
.getName();
814 String mg
= libMi
.getGuid();
815 String mv
= libMi
.getVersion();
816 String pn
= libMi
.getPackageId().getName();
817 String pg
= libMi
.getPackageId().getGuid();
818 String pv
= libMi
.getPackageId().getVersion();
819 LibrariesDocument
.Libraries
.Instance instance
= libs
.addNewInstance();
820 XmlCursor cursor
= instance
.newCursor();
822 String comment
= "Pkg: " + pn
+ " Mod: " + mn
823 + " Path: " + libMi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
824 cursor
.insertComment(comment
);
833 instance
.setModuleGuid(mg
);
834 instance
.setModuleVersion(mv
);
835 instance
.setPackageGuid(pg
);
836 instance
.setPackageVersion(pv
);
840 public String
getFvBinding(String moduleKey
){
841 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
842 return getFvBinding (moduleSa
);
845 public String
getFvBinding (ModuleSADocument
.ModuleSA moduleSa
) {
846 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null) {
849 return moduleSa
.getModuleSaBuildOptions().getFvBinding();
852 public void setFvBinding(ModuleSADocument
.ModuleSA moduleSa
, String fvBinding
) {
853 if (moduleSa
== null ) {
856 if (fvBinding
== null || fvBinding
.length() == 0) {
857 if(moduleSa
.getModuleSaBuildOptions() != null){
858 moduleSa
.getModuleSaBuildOptions().unsetFvBinding();
862 if(moduleSa
.getModuleSaBuildOptions() == null){
863 moduleSa
.addNewModuleSaBuildOptions().setFvBinding(fvBinding
);
866 moduleSa
.getModuleSaBuildOptions().setFvBinding(fvBinding
);
870 public void setFvBinding(String moduleKey
, String fvBinding
){
871 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
872 setFvBinding (moduleSa
, fvBinding
);
875 private int fvBindingForModuleSA (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
876 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
880 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
881 String
[] fvNamesArray
= fvNameList
.split(" ");
883 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
884 if (fvNamesArray
[i
].equals(fvName
)) {
892 public void removeFvBinding (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
893 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
897 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
898 String
[] fvNamesArray
= fvNameList
.split(" ");
900 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
901 if (fvNamesArray
[i
].equals(fvName
)) {
906 // jump over where the input fvName occurs in the original Fv list.
907 if (occursAt
!= -1) {
908 String newFvNameList
= " ";
909 for (int i
= 0; i
< fvNamesArray
.length
; ++i
) {
913 newFvNameList
+= fvNamesArray
[i
];
915 setFvBinding (moduleSa
, newFvNameList
.trim());
921 * @param fvName The FV name that to be removed from FvBinding List.
923 public void removeFvBindingAll (String fvName
) {
924 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
925 removeElement(getfpdFrameworkModules());
926 fpdFrameworkModules
= null;
930 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
931 while (li
.hasNext()) {
932 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
933 removeFvBinding (moduleSa
, fvName
);
937 public void appendFvBindingAll (String fvName
) {
938 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
939 removeElement(getfpdFrameworkModules());
940 fpdFrameworkModules
= null;
944 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
945 while (li
.hasNext()) {
946 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
947 appendFvBinding (moduleSa
, fvName
);
951 public void appendFvBindingFor (String oldFvName
, String newFvName
) {
952 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){
953 removeElement(getfpdFrameworkModules());
954 fpdFrameworkModules
= null;
958 Iterator
<ModuleSADocument
.ModuleSA
> li
= getfpdFrameworkModules().getModuleSAList().iterator();
959 while (li
.hasNext()) {
960 ModuleSADocument
.ModuleSA moduleSa
= li
.next();
961 String fvBinding
= getFvBinding (moduleSa
);
962 if (fvBinding
!= null && fvBindingForModuleSA (moduleSa
, oldFvName
) >= 0) {
963 appendFvBinding (moduleSa
, newFvName
);
968 public void appendFvBinding (String moduleKey
, String fvName
) {
969 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
970 appendFvBinding (moduleSa
, fvName
);
973 public void appendFvBinding (ModuleSADocument
.ModuleSA moduleSa
, String fvName
) {
974 if (moduleSa
== null) {
978 if (moduleSa
.getModuleSaBuildOptions() == null || moduleSa
.getModuleSaBuildOptions().getFvBinding() == null) {
979 setFvBinding(moduleSa
, fvName
);
983 String fvNameList
= moduleSa
.getModuleSaBuildOptions().getFvBinding();
984 String newFvNameList
= fvNameList
+ " " + fvName
;
985 setFvBinding (moduleSa
, newFvNameList
.trim());
988 public void updateFvBindingInModuleSA (String moduleKey
, String fvName
) {
990 appendFvBinding (moduleKey
, fvName
);
993 public String
getFfsFileNameGuid(String moduleKey
){
994 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(moduleKey
);
995 if (moduleSa
== null || moduleSa
.getModuleSaBuildOptions() == null) {
998 return moduleSa
.getModuleSaBuildOptions().getFfsFileNameGuid();
1001 public void setFfsFileNameGuid(String moduleKey
, String fileGuid
){
1002 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1006 if(msa
.getModuleSaBuildOptions() == null){
1007 msa
.addNewModuleSaBuildOptions();
1010 ModuleSaBuildOptionsDocument
.ModuleSaBuildOptions msaBuildOpts
= msa
.getModuleSaBuildOptions();
1011 if (fileGuid
!= null) {
1012 msaBuildOpts
.setFfsFileNameGuid(fileGuid
);
1015 XmlCursor cursor
= msaBuildOpts
.newCursor();
1016 if (cursor
.toChild(xmlNs
, "FfsFileNameGuid")) {
1024 public String
getFfsFormatKey(String moduleKey
){
1025 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1026 if (msa
== null || msa
.getModuleSaBuildOptions() == null) {
1029 return msa
.getModuleSaBuildOptions().getFfsFormatKey();
1032 public void setFfsFormatKey(String moduleKey
, String ffsKey
){
1033 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1037 if(msa
.getModuleSaBuildOptions() == null){
1038 msa
.addNewModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
1041 msa
.getModuleSaBuildOptions().setFfsFormatKey(ffsKey
);
1044 public void setModuleSAForceDebug(int i
, boolean dbgEnable
) {
1045 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(i
);
1046 moduleSa
.setForceDebug(dbgEnable
);
1049 public boolean getModuleSAForceDebug (int i
) {
1050 ModuleSADocument
.ModuleSA moduleSa
= getModuleSA(i
);
1051 if (moduleSa
.getForceDebug() == true) {
1057 public void getModuleSAOptions(String moduleKey
, String
[][] saa
) {
1058 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1059 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
1060 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
1064 List
<OptionDocument
.Option
> lOpt
= msa
.getModuleSaBuildOptions().getOptions().getOptionList();
1065 ListIterator li
= lOpt
.listIterator();
1067 while(li
.hasNext()) {
1068 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
1069 if (opt
.getBuildTargets() != null) {
1070 saa
[i
][0] = listToString(opt
.getBuildTargets());
1072 saa
[i
][1] = opt
.getToolChainFamily();
1073 saa
[i
][2] = opt
.getTagName();
1074 saa
[i
][3] = opt
.getToolCode();
1076 if (opt
.getSupArchList() != null){
1077 saa
[i
][4] = listToString(opt
.getSupArchList());
1083 saa
[i
][5] = opt
.getStringValue();
1089 public int getModuleSAOptionsCount(String moduleKey
){
1090 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1091 if (msa
== null || msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null
1092 || msa
.getModuleSaBuildOptions().getOptions().getOptionList() == null) {
1095 return msa
.getModuleSaBuildOptions().getOptions().getOptionList().size();
1098 public void genModuleSAOptionsOpt(String moduleKey
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1099 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1100 if (msa
.getModuleSaBuildOptions() == null) {
1101 msa
.addNewModuleSaBuildOptions();
1103 if (msa
.getModuleSaBuildOptions().getOptions() == null){
1104 msa
.getModuleSaBuildOptions().addNewOptions();
1106 OptionDocument
.Option opt
= msa
.getModuleSaBuildOptions().getOptions().addNewOption();
1107 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1110 public void removeModuleSAOptionsOpt(String moduleKey
, int i
) {
1111 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1112 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
1115 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
1116 XmlCursor cursor
= opts
.newCursor();
1117 if (cursor
.toFirstChild()) {
1118 for (int j
= 0; j
< i
; ++j
){
1119 cursor
.toNextSibling();
1122 if (getModuleSAOptionsCount(moduleKey
) == 0) {
1130 public void updateModuleSAOptionsOpt(String moduleKey
, int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
1131 ModuleSADocument
.ModuleSA msa
= getModuleSA(moduleKey
);
1132 if (msa
.getModuleSaBuildOptions() == null || msa
.getModuleSaBuildOptions().getOptions() == null) {
1135 OptionsDocument
.Options opts
= msa
.getModuleSaBuildOptions().getOptions();
1136 XmlCursor cursor
= opts
.newCursor();
1137 if (cursor
.toFirstChild()) {
1138 for (int j
= 0; j
< i
; ++j
){
1139 cursor
.toNextSibling();
1141 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
1142 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
1147 /**add pcd information of module mi to a ModuleSA.
1149 * @param moduleSa if null, generate a new ModuleSA.
1151 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi
, String arch
, ModuleSADocument
.ModuleSA moduleSa
) throws Exception
{
1152 //ToDo add Arch filter
1155 if (moduleSa
== null) {
1156 moduleSa
= genModuleSA(mi
, arch
);
1159 ModuleSurfaceAreaDocument
.ModuleSurfaceArea msa
= (ModuleSurfaceAreaDocument
.ModuleSurfaceArea
)WorkspaceProfile
.getModuleXmlObject(mi
);
1160 if (msa
.getPcdCoded() == null) {
1164 Map
<String
, XmlObject
> m
= new HashMap
<String
, XmlObject
>();
1165 m
.put("ModuleSurfaceArea", msa
);
1166 SurfaceAreaQuery
.setDoc(m
);
1167 PackageIdentification
[] depPkgs
= SurfaceAreaQuery
.getDependencePkg(null, mi
);
1169 // Implementing InitializePlatformPcdBuildDefinitions
1171 List
<PcdCodedDocument
.PcdCoded
.PcdEntry
> l
= msa
.getPcdCoded().getPcdEntryList();
1172 ListIterator li
= l
.listIterator();
1173 while(li
.hasNext()) {
1174 PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
= (PcdCodedDocument
.PcdCoded
.PcdEntry
)li
.next();
1175 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= LookupPcdDeclaration(msaPcd
, depPkgs
);
1176 if (spdPcd
== null) {
1180 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd
.getCName() + " in Module " + mi
.getName());
1183 // AddItem to ModuleSA PcdBuildDefinitions
1185 String defaultVal
= msaPcd
.getDefaultValue() == null ? spdPcd
.getDefaultValue() : msaPcd
.getDefaultValue();
1187 genPcdData(msaPcd
.getCName(), spdPcd
.getToken(), msaPcd
.getTokenSpaceGuidCName(), msaPcd
.getPcdItemType().toString(), spdPcd
.getDatumType()+"", defaultVal
, moduleSa
);
1191 catch (Exception e
){
1198 private PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
LookupPcdDeclaration (PcdCodedDocument
.PcdCoded
.PcdEntry msaPcd
, PackageIdentification
[] depPkgs
) {
1200 PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry spdPcd
= null;
1201 for (int i
= 0; i
< depPkgs
.length
; ++i
) {
1203 XmlObject
[] xo
= SurfaceAreaQuery
.getSpdPcdDeclarations(depPkgs
[i
]);
1207 for (int j
= 0; j
< xo
.length
; ++j
) {
1208 spdPcd
= (PcdDeclarationsDocument
.PcdDeclarations
.PcdEntry
)xo
[j
];
1209 if (msaPcd
.getTokenSpaceGuidCName() == null) {
1210 if (spdPcd
.getCName().equals(msaPcd
.getCName())) {
1215 if (spdPcd
.getCName().equals(msaPcd
.getCName()) && spdPcd
.getTokenSpaceGuidCName().equals(msaPcd
.getTokenSpaceGuidCName())) {
1226 private ModuleSADocument
.ModuleSA
genModuleSA (ModuleIdentification mi
, String arch
) {
1227 PackageIdentification pi
= WorkspaceProfile
.getPackageForModule(mi
);
1228 ModuleSADocument
.ModuleSA msa
= getfpdFrameworkModules().addNewModuleSA();
1229 XmlCursor cursor
= msa
.newCursor();
1231 String comment
= "Mod: " + mi
.getName() + " Type: " + SurfaceAreaQuery
.getModuleType(mi
) + " Path: "
1232 + mi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
1233 cursor
.insertComment(comment
);
1236 e
.printStackTrace();
1241 msa
.setModuleGuid(mi
.getGuid());
1242 msa
.setModuleVersion(mi
.getVersion());
1243 msa
.setPackageGuid(pi
.getGuid());
1244 msa
.setPackageVersion(pi
.getVersion());
1246 Vector
<String
> v
= new Vector
<String
>();
1248 msa
.setSupArchList(v
);
1254 private void genPcdData (String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
, ModuleSADocument
.ModuleSA moduleSa
)
1255 throws PcdItemTypeConflictException
, PcdValueMalFormed
{
1256 if (moduleSa
.getPcdBuildDefinition() == null){
1257 moduleSa
.addNewPcdBuildDefinition();
1260 // constructe pcd to modulesa mapping first.
1261 // Attention : for any error condition, remove from map this pcd.
1263 ArrayList
<String
> pcdConsumer
= LookupPlatformPcdData(cName
+ " " + tsGuid
);
1264 if (pcdConsumer
== null) {
1265 pcdConsumer
= new ArrayList
<String
>();
1268 // Check whether this PCD has already added to ModuleSA, if so, just return.
1270 String moduleInfo
= moduleSa
.getModuleGuid().toLowerCase() + " " + moduleSa
.getModuleVersion()
1271 + " " + moduleSa
.getPackageGuid().toLowerCase() + " " + moduleSa
.getPackageVersion() + " " + listToString(moduleSa
.getSupArchList());
1272 for (int i
= 0; i
< pcdConsumer
.size(); ++i
) {
1273 String pcdInfo
= pcdConsumer
.get(i
);
1274 if (moduleInfo
.equals(pcdInfo
.substring(0, pcdInfo
.lastIndexOf(" ")))){
1279 // Using existing Pcd type, if this pcd already exists in other ModuleSA
1281 if (pcdConsumer
.size() > 0) {
1283 itemType
= itemType (pcdConsumer
.get(0));
1285 String listValue
= moduleInfo
+ " " + itemType
;
1286 pcdConsumer
.add(listValue
);
1287 dynPcdMap
.put(cName
+ " " + tsGuid
, pcdConsumer
);
1289 PcdBuildDefinitionDocument
.PcdBuildDefinition
.PcdData fpdPcd
= moduleSa
.getPcdBuildDefinition().addNewPcdData();
1290 fpdPcd
.setCName(cName
);
1291 fpdPcd
.setToken(token
);
1292 fpdPcd
.setTokenSpaceGuidCName(tsGuid
);
1293 fpdPcd
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1294 fpdPcd
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1296 if (defaultVal
!= null){
1297 fpdPcd
.setValue(defaultVal
);
1300 if (dataType
.equals("UINT8") || dataType
.equals("UINT16") || dataType
.equals("UINT32") || dataType
.equals("UINT64")) {
1301 fpdPcd
.setValue("0");
1303 if (dataType
.equals("BOOLEAN")){
1304 fpdPcd
.setValue("FALSE");
1306 if (dataType
.equals("VOID*")) {
1307 fpdPcd
.setValue("");
1311 // Using existing pcd value, if this pcd already exists in other moduleSa.
1313 if (defaultPcdValue
.get(cName
+ " " + tsGuid
) == null) {
1314 defaultPcdValue
.put(cName
+ " " + tsGuid
, fpdPcd
.getValue());
1317 fpdPcd
.setValue(defaultPcdValue
.get(cName
+ " " + tsGuid
));
1320 if (dataType
.equals("UINT8")){
1321 fpdPcd
.setMaxDatumSize(1);
1323 if (dataType
.equals("UINT16")) {
1324 fpdPcd
.setMaxDatumSize(2);
1326 if (dataType
.equals("UINT32")) {
1327 fpdPcd
.setMaxDatumSize(4);
1329 if (dataType
.equals("UINT64")){
1330 fpdPcd
.setMaxDatumSize(8);
1332 if (dataType
.equals("BOOLEAN")){
1333 fpdPcd
.setMaxDatumSize(1);
1335 if (dataType
.equals("VOID*")) {
1336 int maxSize
= setMaxSizeForPointer(fpdPcd
.getValue());
1337 fpdPcd
.setMaxDatumSize(maxSize
);
1341 if (itemType
.equals("DYNAMIC") || itemType
.equals("DYNAMIC_EX")) {
1342 ArrayList
<String
> al
= LookupDynamicPcdBuildDefinition(cName
+ " " + tsGuid
);
1344 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.
1345 // so need to add one dyn pcd.
1347 if (al
.size() == 1) {
1348 addDynamicPcdBuildData(cName
, token
, tsGuid
, itemType
, dataType
, defaultVal
);
1354 public int setMaxSizeForPointer(String datum
) throws PcdValueMalFormed
{
1355 if (datum
== null) {
1358 char ch
= datum
.charAt(0);
1362 // For void* type PCD, only three datum is support:
1363 // 1) Unicode: string with start char is "L"
1364 // 2) Ansci: String is ""
1365 // 3) byte array: String start char "{"
1368 start
= datum
.indexOf('\"');
1369 end
= datum
.lastIndexOf('\"');
1370 if ((start
> end
) ||
1371 (end
> datum
.length())||
1372 ((start
== end
) && (datum
.length() > 0))) {
1373 //ToDo Error handling here
1374 throw new PcdValueMalFormed (datum
);
1377 strValue
= datum
.substring(start
+ 1, end
);
1378 return strValue
.length() * 2;
1379 } else if (ch
== '\"'){
1380 start
= datum
.indexOf('\"');
1381 end
= datum
.lastIndexOf('\"');
1382 if ((start
> end
) ||
1383 (end
> datum
.length())||
1384 ((start
== end
) && (datum
.length() > 0))) {
1385 throw new PcdValueMalFormed (datum
);
1387 strValue
= datum
.substring(start
+ 1, end
);
1388 return strValue
.length();
1389 } else if (ch
=='{') {
1390 String
[] strValueArray
;
1392 start
= datum
.indexOf('{');
1393 end
= datum
.lastIndexOf('}');
1394 strValue
= datum
.substring(start
+ 1, end
);
1395 strValue
= strValue
.trim();
1396 if (strValue
.length() == 0) {
1399 strValueArray
= strValue
.split(",");
1400 for (int index
= 0; index
< strValueArray
.length
; index
++) {
1401 Integer value
= Integer
.decode(strValueArray
[index
].trim());
1404 // "[FPD file error] The datum type of PCD %s in %s is VOID*, "+
1405 // "it must be a byte array. But the element of %s exceed the byte range",
1406 throw new PcdValueMalFormed (datum
);
1409 return strValueArray
.length
;
1413 // "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+
1414 // "1) UNICODE string: like L\"xxxx\";\r\n"+
1415 // "2) ANSIC string: like \"xxx\";\r\n"+
1416 // "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+
1417 // "but the datum in seems does not following above format!",
1418 throw new PcdValueMalFormed (datum
);
1423 private ArrayList
<String
> LookupDynamicPcdBuildDefinition(String dynPcdKey
) {
1424 ArrayList
<String
> al
= dynPcdMap
.get(dynPcdKey
);
1429 private ArrayList
<String
> LookupPlatformPcdData(String pcdKey
) {
1431 return dynPcdMap
.get(pcdKey
);
1434 public int getDynamicPcdBuildDataCount() {
1435 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1436 removeElement(getfpdDynPcdBuildDefs());
1437 fpdDynPcdBuildDefs
= null;
1440 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();
1443 public void getDynamicPcdBuildData(String
[][] saa
) {
1444 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1445 removeElement(getfpdDynPcdBuildDefs());
1446 fpdDynPcdBuildDefs
= null;
1449 List
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> l
= getfpdDynPcdBuildDefs().getPcdBuildDataList();
1450 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
> li
= l
.listIterator();
1452 while(li
.hasNext()) {
1453 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcd
= li
.next();
1454 saa
[i
][0] = dynPcd
.getCName();
1455 saa
[i
][1] = dynPcd
.getToken().toString();
1456 saa
[i
][2] = dynPcd
.getTokenSpaceGuidCName();
1457 saa
[i
][3] = dynPcd
.getMaxDatumSize()+"";
1458 saa
[i
][4] = dynPcd
.getDatumType().toString();
1464 public void addDynamicPcdBuildData(String cName
, Object token
, String tsGuid
, String itemType
, String dataType
, String defaultVal
)
1465 throws PcdValueMalFormed
{
1466 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData dynPcdData
= getfpdDynPcdBuildDefs().addNewPcdBuildData();
1467 dynPcdData
.setItemType(PcdItemTypes
.Enum
.forString(itemType
));
1468 dynPcdData
.setCName(cName
);
1469 dynPcdData
.setToken(token
);
1470 dynPcdData
.setTokenSpaceGuidCName(tsGuid
);
1471 dynPcdData
.setDatumType(PcdDataTypes
.Enum
.forString(dataType
));
1473 BigInteger bigInt
= new BigInteger("0");
1474 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= dynPcdData
.addNewSkuInfo();
1475 skuInfo
.setSkuId(bigInt
);
1476 if (defaultVal
!= null){
1477 skuInfo
.setValue(defaultVal
);
1480 if (dataType
.equals("UINT8")){
1481 skuInfo
.setValue("0");
1483 if (dataType
.equals("UINT16")) {
1484 skuInfo
.setValue("0");
1486 if (dataType
.equals("UINT32")) {
1487 skuInfo
.setValue("0");
1489 if (dataType
.equals("UINT64")){
1490 skuInfo
.setValue("0");
1492 if (dataType
.equals("BOOLEAN")){
1493 skuInfo
.setValue("false");
1495 if (dataType
.equals("VOID*")) {
1496 skuInfo
.setValue("");
1499 if (dataType
.equals("UINT8")){
1500 dynPcdData
.setMaxDatumSize(1);
1502 if (dataType
.equals("UINT16")) {
1503 dynPcdData
.setMaxDatumSize(2);
1505 if (dataType
.equals("UINT32")) {
1506 dynPcdData
.setMaxDatumSize(4);
1508 if (dataType
.equals("UINT64")){
1509 dynPcdData
.setMaxDatumSize(8);
1511 if (dataType
.equals("BOOLEAN")){
1512 dynPcdData
.setMaxDatumSize(1);
1514 if (dataType
.equals("VOID*")) {
1515 int maxSize
= setMaxSizeForPointer(defaultVal
);
1516 dynPcdData
.setMaxDatumSize(maxSize
);
1520 public void removeDynamicPcdBuildData(String cName
, String tsGuid
) {
1521 XmlObject o
= fpdRoot
.getDynamicPcdBuildDefinitions();
1526 XmlCursor cursor
= o
.newCursor();
1527 if (cursor
.toFirstChild()) {
1529 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdBuildData
=
1530 (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1531 if (pcdBuildData
.getCName().equals(cName
) && pcdBuildData
.getTokenSpaceGuidCName().equals(tsGuid
)) {
1533 if (getDynamicPcdBuildDataCount() == 1) {
1536 fpdDynPcdBuildDefs
= null;
1544 while (cursor
.toNextSibling());
1549 // Get the Sku Info count of ith dyn pcd element.
1551 public int getDynamicPcdSkuInfoCount(int i
){
1552 if (fpdRoot
.getDynamicPcdBuildDefinitions() == null || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null
1553 || fpdRoot
.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {
1554 removeElement(getfpdDynPcdBuildDefs());
1555 fpdDynPcdBuildDefs
= null;
1559 int skuInfoCount
= 0;
1560 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1561 if (cursor
.toFirstChild()) {
1562 for (int j
= 0; j
< i
; ++j
) {
1563 cursor
.toNextSibling();
1565 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1566 if (pcdData
.getSkuInfoList() == null) {
1570 skuInfoCount
= pcdData
.getSkuInfoList().size();
1574 return skuInfoCount
;
1577 public void getDynamicPcdSkuInfos(int i
, String
[][] saa
){
1578 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1579 removeElement(getfpdDynPcdBuildDefs());
1580 fpdDynPcdBuildDefs
= null;
1584 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1585 if (cursor
.toFirstChild()) {
1586 for (int j
= 0; j
< i
; ++j
) {
1587 cursor
.toNextSibling();
1589 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1590 if (pcdData
.getSkuInfoList() == null) {
1595 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1597 while (li
.hasNext()) {
1598 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1599 saa
[k
][0] = skuInfo
.getSkuId()+"";
1600 saa
[k
][1] = skuInfo
.getVariableName();
1601 saa
[k
][2] = skuInfo
.getVariableGuid();
1602 saa
[k
][3] = skuInfo
.getVariableOffset();
1603 saa
[k
][4] = skuInfo
.getHiiDefaultValue();
1604 saa
[k
][5] = skuInfo
.getVpdOffset();
1605 saa
[k
][6] = skuInfo
.getValue();
1615 public String
getDynamicPcdBuildDataValue(int i
){
1616 String value
= null;
1617 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1618 removeElement(getfpdDynPcdBuildDefs());
1619 fpdDynPcdBuildDefs
= null;
1623 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1624 if (cursor
.toFirstChild()) {
1625 for (int j
= 0; j
< i
; ++j
) {
1626 cursor
.toNextSibling();
1628 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1629 if (pcdData
.getSkuInfoList() == null) {
1633 value
= pcdData
.getSkuInfoArray(0).getValue();
1640 public String
getDynamicPcdBuildDataVpdOffset(int i
){
1641 String vpdOffset
= null;
1642 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1643 removeElement(getfpdDynPcdBuildDefs());
1644 fpdDynPcdBuildDefs
= null;
1648 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1649 if (cursor
.toFirstChild()) {
1650 for (int j
= 0; j
< i
; ++j
) {
1651 cursor
.toNextSibling();
1653 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1654 if (pcdData
.getSkuInfoList() == null) {
1658 vpdOffset
= pcdData
.getSkuInfoArray(0).getVpdOffset();
1665 public void removeDynamicPcdBuildDataSkuInfo(int i
) {
1666 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1667 removeElement(getfpdDynPcdBuildDefs());
1668 fpdDynPcdBuildDefs
= null;
1672 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1673 if (cursor
.toFirstChild()) {
1674 for (int j
= 0; j
< i
; ++j
) {
1675 cursor
.toNextSibling();
1677 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1678 if (pcdData
.getSkuInfoList() == null) {
1683 QName qSkuInfo
= new QName(xmlNs
, "SkuInfo");
1684 cursor
.toChild(qSkuInfo
);
1691 // generate sku info for ith dyn pcd build data.
1693 public void genDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1694 String hiiDefault
, String vpdOffset
, String value
, int i
) {
1695 // if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1699 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1700 if (cursor
.toFirstChild()) {
1701 for (int j
= 0; j
< i
; ++j
) {
1702 cursor
.toNextSibling();
1704 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1705 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= pcdData
.addNewSkuInfo();
1706 skuInfo
.setSkuId(new BigInteger(id
));
1707 if (varName
!= null){
1708 skuInfo
.setVariableName(varName
);
1709 skuInfo
.setVariableGuid(varGuid
);
1710 skuInfo
.setVariableOffset(varOffset
);
1711 skuInfo
.setHiiDefaultValue(hiiDefault
);
1713 else if (vpdOffset
!= null){
1714 skuInfo
.setVpdOffset(vpdOffset
);
1717 skuInfo
.setValue(value
);
1722 public void updateDynamicPcdBuildDataSkuInfo(String id
, String varName
, String varGuid
, String varOffset
,
1723 String hiiDefault
, String vpdOffset
, String value
, int i
){
1724 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {
1725 removeElement(getfpdDynPcdBuildDefs());
1726 fpdDynPcdBuildDefs
= null;
1730 XmlCursor cursor
= getfpdDynPcdBuildDefs().newCursor();
1731 if (cursor
.toFirstChild()) {
1732 for (int j
= 0; j
< i
; ++j
) {
1733 cursor
.toNextSibling();
1735 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData pcdData
= (DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
)cursor
.getObject();
1736 ListIterator
<DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo
> li
= pcdData
.getSkuInfoList().listIterator();
1737 while (li
.hasNext()) {
1738 DynamicPcdBuildDefinitionsDocument
.DynamicPcdBuildDefinitions
.PcdBuildData
.SkuInfo skuInfo
= li
.next();
1739 if (skuInfo
.getSkuId().toString().equals(id
)){
1740 if (varName
!= null){
1741 skuInfo
.setVariableName(varName
);
1742 skuInfo
.setVariableGuid(varGuid
);
1743 skuInfo
.setVariableOffset(varOffset
);
1744 skuInfo
.setHiiDefaultValue(hiiDefault
);
1746 else if (vpdOffset
!= null){
1747 skuInfo
.setVpdOffset(vpdOffset
);
1750 skuInfo
.setValue(value
);
1758 public BuildOptionsDocument
.BuildOptions
getfpdBuildOpts() {
1759 if (fpdBuildOpts
== null) {
1760 fpdBuildOpts
= fpdRoot
.addNewBuildOptions();
1762 return fpdBuildOpts
;
1765 public void genBuildOptionsUserExtensions(String fvName
, String outputFileName
, Vector
<String
[]> includeModules
) {
1766 QName elementFvName
= new QName (xmlNs
, "FvName");
1767 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1768 QName elementInfFileName
= new QName(xmlNs
, "InfFileName");
1769 QName elementModule
= new QName(xmlNs
, "Module");
1771 UserExtensionsDocument
.UserExtensions userExts
= getfpdBuildOpts().addNewUserExtensions();
1772 userExts
.setUserID("IMAGES");
1773 userExts
.setIdentifier(new BigInteger("1"));
1774 XmlCursor cursor
= userExts
.newCursor();
1775 cursor
.toEndToken();
1777 cursor
.beginElement(elementFvName
);
1778 cursor
.insertChars(fvName
);
1779 cursor
.toNextToken();
1781 cursor
.beginElement(elementInfFileName
);
1782 cursor
.insertChars(fvName
+ ".inf");
1783 cursor
.toNextToken();
1785 cursor
.beginElement(elementIncludeModules
);
1786 for (int i
= 0; i
< includeModules
.size(); ++i
) {
1787 cursor
.beginElement(elementModule
);
1788 cursor
.insertAttributeWithValue("ModuleGuid", includeModules
.get(i
)[0]);
1789 if (!includeModules
.get(i
)[1].equals("null") && includeModules
.get(i
)[1].length() != 0) {
1790 cursor
.insertAttributeWithValue("ModuleVersion", includeModules
.get(i
)[1]);
1792 cursor
.insertAttributeWithValue("PackageGuid", includeModules
.get(i
)[2]);
1793 if (!includeModules
.get(i
)[3].equals("null") && includeModules
.get(i
)[3].length() != 0) {
1794 cursor
.insertAttributeWithValue("PackageVersion", includeModules
.get(i
)[3]);
1797 cursor
.insertAttributeWithValue("Arch", includeModules
.get(i
)[4]);
1798 cursor
.toEndToken();
1799 cursor
.toNextToken();
1804 public int getUserExtsIncModCount (String fvName
) {
1805 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1808 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1809 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1810 while (li
.hasNext()) {
1811 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1812 if (!ues
.getUserID().equals("IMAGES")) {
1815 XmlCursor cursor
= ues
.newCursor();
1816 cursor
.toFirstChild();
1817 String elementName
= cursor
.getTextValue();
1818 if (elementName
.equals(fvName
)) {
1819 cursor
.toNextSibling(elementIncludeModules
);
1820 if (cursor
.toFirstChild()) {
1822 for (i
= 1; cursor
.toNextSibling(); ++i
);
1834 public void getUserExtsIncMods(String fvName
, String
[][] saa
) {
1835 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1839 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1840 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1841 QName attribUserId
= new QName ("UserID");
1842 QName elementFvName
= new QName (xmlNs
, "FvName");
1843 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1844 QName attribModuleGuid
= new QName("ModuleGuid");
1845 QName attribModuleVersion
= new QName("ModuleVersion");
1846 QName attribPackageGuid
= new QName("PackageGuid");
1847 QName attribPackageVersion
= new QName("PackageVersion");
1848 QName attribArch
= new QName("Arch");
1850 if (cursor
.toChild(elementUserExts
)) {
1853 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1854 cursor
.toChild(elementFvName
);
1855 String elementName
= cursor
.getTextValue();
1856 if (elementName
.equals(fvName
)) {
1857 cursor
.toNextSibling(elementIncludeModules
);
1858 if (cursor
.toFirstChild()) {
1861 saa
[i
][0] = cursor
.getAttributeText(attribModuleGuid
);
1862 saa
[i
][1] = cursor
.getAttributeText(attribModuleVersion
);
1863 saa
[i
][2] = cursor
.getAttributeText(attribPackageGuid
);
1864 saa
[i
][3] = cursor
.getAttributeText(attribPackageVersion
);
1865 saa
[i
][4] = cursor
.getAttributeText(attribArch
);
1867 }while (cursor
.toNextSibling());
1873 }while (cursor
.toNextSibling(elementUserExts
));
1879 public void updateBuildOptionsUserExtensions (String oldFvName
, String newFvName
) {
1880 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1883 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1884 while (li
.hasNext()) {
1885 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1886 if (!ues
.getUserID().equals("IMAGES")) {
1889 XmlCursor cursor
= ues
.newCursor();
1890 cursor
.toFirstChild();
1891 String elementName
= cursor
.getTextValue();
1892 if (elementName
.equals(oldFvName
)) {
1893 cursor
.setTextValue(newFvName
);
1900 public void removeBuildOptionsUserExtensions (String fvName
) {
1901 if (getfpdBuildOpts().getUserExtensionsList() == null) {
1905 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
1906 while (li
.hasNext()) {
1907 UserExtensionsDocument
.UserExtensions ues
= li
.next();
1908 if (!ues
.getUserID().equals("IMAGES")) {
1911 XmlCursor cursor
= ues
.newCursor();
1912 cursor
.toFirstChild();
1913 String elementName
= cursor
.getTextValue();
1914 if (elementName
.equals(fvName
)) {
1925 private boolean versionEqual (String v1
, String v2
) {
1927 if ((v1
== null || v1
.length() == 0 || v1
.equalsIgnoreCase("null"))
1928 && (v2
== null || v2
.length() == 0 || v2
.equalsIgnoreCase("null"))) {
1932 if (v1
!= null && v1
.equals(v2
)) {
1939 public boolean moduleInBuildOptionsUserExtensions (String fvName
, String moduleGuid
, String moduleVersion
, String packageGuid
, String packageVersion
, String arch
) {
1940 boolean inList
= false;
1941 if (getUserExtsIncModCount(fvName
) > 0) {
1943 XmlCursor cursor
= getfpdBuildOpts().newCursor();
1944 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
1945 QName attribUserId
= new QName ("UserID");
1946 QName elementFvName
= new QName (xmlNs
, "FvName");
1947 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
1948 QName attribModuleGuid
= new QName("ModuleGuid");
1949 QName attribModuleVersion
= new QName("ModuleVersion");
1950 QName attribPackageGuid
= new QName("PackageGuid");
1951 QName attribPackageVersion
= new QName("PackageVersion");
1952 QName attribArch
= new QName("Arch");
1954 if (cursor
.toChild(elementUserExts
)) {
1957 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
1958 cursor
.toChild(elementFvName
);
1959 String elementName
= cursor
.getTextValue();
1960 if (elementName
.equals(fvName
)) {
1961 cursor
.toNextSibling(elementIncludeModules
);
1962 if (cursor
.toFirstChild()) {
1965 String mg
= cursor
.getAttributeText(attribModuleGuid
);
1966 String mv
= cursor
.getAttributeText(attribModuleVersion
);
1967 String pg
= cursor
.getAttributeText(attribPackageGuid
);
1968 String pv
= cursor
.getAttributeText(attribPackageVersion
);
1969 String ar
= cursor
.getAttributeText(attribArch
);
1970 if (!moduleGuid
.equalsIgnoreCase(mg
)) {
1973 if (!packageGuid
.equalsIgnoreCase(pg
)) {
1976 if (!arch
.equalsIgnoreCase(ar
)) {
1979 if (!versionEqual(moduleVersion
, mv
)) {
1982 if (!versionEqual(packageVersion
, pv
)) {
1987 }while (cursor
.toNextSibling());
1993 }while (cursor
.toNextSibling(elementUserExts
));
2000 public void removeModuleInBuildOptionsUserExtensions (String fvName
, String moduleGuid
, String moduleVersion
, String packageGuid
, String packageVersion
, String arch
) {
2002 // if there is only one module before remove operation, the whole user extension should be removed.
2004 int moduleAmount
= getUserExtsIncModCount(fvName
);
2005 if (moduleAmount
== 1) {
2006 removeBuildOptionsUserExtensions(fvName
);
2010 if (moduleAmount
> 1) {
2012 XmlCursor cursor
= getfpdBuildOpts().newCursor();
2013 QName elementUserExts
= new QName (xmlNs
, "UserExtensions");
2014 QName attribUserId
= new QName ("UserID");
2015 QName elementFvName
= new QName (xmlNs
, "FvName");
2016 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
2017 QName attribModuleGuid
= new QName("ModuleGuid");
2018 QName attribModuleVersion
= new QName("ModuleVersion");
2019 QName attribPackageGuid
= new QName("PackageGuid");
2020 QName attribPackageVersion
= new QName("PackageVersion");
2021 QName attribArch
= new QName("Arch");
2023 if (cursor
.toChild(elementUserExts
)) {
2026 if (cursor
.getAttributeText(attribUserId
).equals("IMAGES")) {
2027 cursor
.toChild(elementFvName
);
2028 String elementName
= cursor
.getTextValue();
2029 if (elementName
.equals(fvName
)) {
2030 cursor
.toNextSibling(elementIncludeModules
);
2031 if (cursor
.toFirstChild()) {
2034 String mg
= cursor
.getAttributeText(attribModuleGuid
);
2035 String mv
= cursor
.getAttributeText(attribModuleVersion
);
2036 String pg
= cursor
.getAttributeText(attribPackageGuid
);
2037 String pv
= cursor
.getAttributeText(attribPackageVersion
);
2038 String ar
= cursor
.getAttributeText(attribArch
);
2039 if (!moduleGuid
.equalsIgnoreCase(mg
)) {
2042 if (!packageGuid
.equalsIgnoreCase(pg
)) {
2045 if (!arch
.equalsIgnoreCase(ar
)) {
2048 if (!versionEqual(moduleVersion
, mv
)) {
2051 if (!versionEqual(packageVersion
, pv
)) {
2055 }while (cursor
.toNextSibling());
2061 }while (cursor
.toNextSibling(elementUserExts
));
2067 public void addModuleIntoBuildOptionsUserExtensions (String fvName
, String moduleGuid
, String moduleVersion
, String packageGuid
, String packageVersion
, String arch
) {
2068 if (moduleInBuildOptionsUserExtensions (fvName
, moduleGuid
, moduleVersion
, packageGuid
, packageVersion
, arch
)) {
2071 ListIterator
<UserExtensionsDocument
.UserExtensions
> li
= getfpdBuildOpts().getUserExtensionsList().listIterator();
2072 QName elementIncludeModules
= new QName(xmlNs
, "IncludeModules");
2073 QName elementModule
= new QName(xmlNs
, "Module");
2074 while (li
.hasNext()) {
2075 UserExtensionsDocument
.UserExtensions ues
= li
.next();
2076 if (!ues
.getUserID().equals("IMAGES")) {
2079 XmlCursor cursor
= ues
.newCursor();
2080 cursor
.toFirstChild();
2081 String elementName
= cursor
.getTextValue();
2082 if (elementName
.equals(fvName
)) {
2083 cursor
.toNextSibling(elementIncludeModules
);
2084 cursor
.toLastChild();
2085 cursor
.toEndToken();
2086 cursor
.toNextToken();
2087 cursor
.beginElement(elementModule
);
2088 cursor
.insertAttributeWithValue("ModuleGuid", moduleGuid
);
2089 if (!moduleVersion
.equals("null") && moduleVersion
.length() != 0) {
2090 cursor
.insertAttributeWithValue("ModuleVersion", moduleVersion
);
2092 cursor
.insertAttributeWithValue("PackageGuid", packageGuid
);
2093 if (!packageVersion
.equals("null") && packageVersion
.length() != 0) {
2094 cursor
.insertAttributeWithValue("PackageVersion", packageVersion
);
2097 cursor
.insertAttributeWithValue("Arch", arch
);
2106 public void genBuildOptionsUserDefAntTask (String id
, String fileName
, String execOrder
) {
2107 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2108 if (udats
== null) {
2109 udats
= getfpdBuildOpts().addNewUserDefinedAntTasks();
2112 AntTaskDocument
.AntTask at
= udats
.addNewAntTask();
2113 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
2116 private void setBuildOptionsUserDefAntTask(String id
, String fileName
, String execOrder
, AntTaskDocument
.AntTask at
) {
2117 at
.setId(new Integer(id
));
2118 XmlCursor cursor
= at
.newCursor();
2119 if (fileName
!= null){
2120 at
.setFilename(fileName
);
2122 else if (cursor
.toChild(xmlNs
, "Filename")) {
2125 if (execOrder
!= null) {
2126 at
.setAntCmdOptions(execOrder
);
2128 else if (cursor
.toChild(xmlNs
, "AntCmdOptions")) {
2134 public void removeBuildOptionsUserDefAntTask(int i
) {
2135 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
2139 XmlCursor cursor
= o
.newCursor();
2140 if (cursor
.toFirstChild()) {
2141 for (int j
= 0; j
< i
; ++j
) {
2142 cursor
.toNextSibling();
2145 if (getBuildOptionsUserDefAntTaskCount() == 0) {
2153 public void updateBuildOptionsUserDefAntTask(int i
, String id
, String fileName
, String execOrder
){
2154 XmlObject o
= getfpdBuildOpts().getUserDefinedAntTasks();
2158 XmlCursor cursor
= o
.newCursor();
2159 if (cursor
.toFirstChild()) {
2160 for (int j
= 0; j
< i
; ++j
) {
2161 cursor
.toNextSibling();
2163 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)cursor
.getObject();
2164 setBuildOptionsUserDefAntTask(id
, fileName
, execOrder
, at
);
2169 public int getBuildOptionsUserDefAntTaskCount() {
2170 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2171 if (udats
== null || udats
.getAntTaskList() == null) {
2175 return udats
.getAntTaskList().size();
2178 public void getBuildOptionsUserDefAntTasks(String
[][] saa
) {
2179 UserDefinedAntTasksDocument
.UserDefinedAntTasks udats
= getfpdBuildOpts().getUserDefinedAntTasks();
2180 if (udats
== null || udats
.getAntTaskList() == null) {
2184 List
<AntTaskDocument
.AntTask
> l
= udats
.getAntTaskList();
2185 ListIterator li
= l
.listIterator();
2187 while (li
.hasNext()) {
2188 AntTaskDocument
.AntTask at
= (AntTaskDocument
.AntTask
)li
.next();
2189 saa
[i
][0] = at
.getId() + "";
2190 saa
[i
][1] = saa
[i
][2] = "";
2191 if (at
.getFilename() != null){
2192 saa
[i
][1] = at
.getFilename();
2194 if (at
.getAntCmdOptions() != null) {
2195 saa
[i
][2] = at
.getAntCmdOptions();
2200 public void genBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
2201 OptionsDocument
.Options opts
= getfpdBuildOpts().getOptions();
2203 opts
= getfpdBuildOpts().addNewOptions();
2205 OptionDocument
.Option opt
= opts
.addNewOption();
2206 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2209 private void setBuildOptionsOpt(Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
, OptionDocument
.Option opt
){
2210 opt
.setStringValue(contents
);
2211 if (buildTargets
!= null) {
2212 opt
.setBuildTargets(buildTargets
);
2215 if (opt
.isSetBuildTargets()) {
2216 opt
.unsetBuildTargets();
2220 if (toolChain
!= null && toolChain
.length() > 0) {
2221 opt
.setToolChainFamily(toolChain
);
2224 if (opt
.isSetToolChainFamily()) {
2225 opt
.unsetToolChainFamily();
2229 if (tagName
!= null && tagName
.length() > 0) {
2230 opt
.setTagName(tagName
);
2233 if (opt
.isSetTagName()) {
2238 if (toolCmd
!= null && toolCmd
.length() > 0) {
2239 opt
.setToolCode(toolCmd
);
2242 if (opt
.isSetToolCode()) {
2243 opt
.unsetToolCode();
2248 if (archList
!= null) {
2249 opt
.setSupArchList(archList
);
2252 if (opt
.isSetSupArchList()) {
2253 opt
.unsetSupArchList();
2258 public void removeBuildOptionsOpt(int i
){
2260 XmlObject o
= getfpdBuildOpts().getOptions();
2265 XmlCursor cursor
= o
.newCursor();
2266 if (cursor
.toFirstChild()) {
2267 for (int j
= 0; j
< i
; ++j
) {
2268 cursor
.toNextSibling();
2271 if (getBuildOptionsOptCount() == 0) {
2279 public void updateBuildOptionsOpt(int i
, Vector
<Object
> buildTargets
, String toolChain
, String tagName
, String toolCmd
, Vector
<Object
> archList
, String contents
) {
2280 XmlObject o
= getfpdBuildOpts().getOptions();
2285 XmlCursor cursor
= o
.newCursor();
2286 if (cursor
.toFirstChild()) {
2287 for (int j
= 0; j
< i
; ++j
) {
2288 cursor
.toNextSibling();
2290 OptionDocument
.Option opt
= (OptionDocument
.Option
)cursor
.getObject();
2291 setBuildOptionsOpt(buildTargets
, toolChain
, tagName
, toolCmd
, archList
, contents
, opt
);
2296 public int getBuildOptionsOptCount(){
2297 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2300 return getfpdBuildOpts().getOptions().getOptionList().size();
2303 public void getBuildOptionsOpts(String
[][] saa
) {
2304 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {
2308 List
<OptionDocument
.Option
> lOpt
= getfpdBuildOpts().getOptions().getOptionList();
2309 ListIterator li
= lOpt
.listIterator();
2311 while(li
.hasNext()) {
2312 OptionDocument
.Option opt
= (OptionDocument
.Option
)li
.next();
2313 if (opt
.getBuildTargets() != null) {
2314 saa
[i
][0] = listToString(opt
.getBuildTargets());
2316 saa
[i
][1] = opt
.getToolChainFamily();
2317 if (opt
.getSupArchList() != null){
2318 saa
[i
][2] = listToString(opt
.getSupArchList());
2321 saa
[i
][3] = opt
.getToolCode();
2322 saa
[i
][4] = opt
.getTagName();
2323 saa
[i
][5] = opt
.getStringValue();
2329 public void genBuildOptionsFfs(String ffsKey
, String type
) {
2330 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2331 ffs
.setFfsKey(ffsKey
);
2333 ffs
.addNewSections().setEncapsulationType(type
);
2337 public void updateBuildOptionsFfsSectionsType(int i
, String type
) {
2338 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getfpdBuildOpts().addNewFfs();
2340 ffs
.addNewSections().setEncapsulationType(type
);
2344 public void genBuildOptionsFfsAttribute(int i
, String name
, String value
) {
2345 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2346 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= ffs
.addNewAttribute();
2347 attrib
.setName(name
);
2348 attrib
.setValue(value
);
2351 /**update jth attribute of ith ffs.
2355 public void updateBuildOptionsFfsAttribute(int i
, int j
, String name
, String value
){
2356 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2357 XmlCursor cursor
= ffs
.newCursor();
2358 QName qAttrib
= new QName(xmlNs
, "Attribute");
2359 if (cursor
.toChild(qAttrib
)) {
2360 for (int k
= 0; k
< j
; ++k
) {
2361 cursor
.toNextSibling(qAttrib
);
2363 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
)cursor
.getObject();
2364 attrib
.setName(name
);
2365 attrib
.setValue(value
);
2370 public void removeBuildOptionsFfsAttribute(int i
, int j
){
2371 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2372 XmlCursor cursor
= ffs
.newCursor();
2373 QName qAttrib
= new QName(xmlNs
, "Attribute");
2374 if (cursor
.toChild(qAttrib
)) {
2375 for (int k
= 0; k
< j
; ++k
) {
2376 cursor
.toNextSibling(qAttrib
);
2383 public void genBuildOptionsFfsSectionsSection(int i
, String sectionType
) {
2384 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2388 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2390 if (sections
== null){
2391 sections
= ffs
.addNewSections();
2393 sections
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(sectionType
));
2396 public void removeBuildOptionsFfsSectionsSection(int i
, int j
) {
2397 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2398 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2399 if (sections
== null) {
2402 XmlCursor cursor
= sections
.newCursor();
2403 QName qSection
= new QName(xmlNs
, "Section");
2404 if (cursor
.toChild(qSection
)) {
2405 for (int k
= 0; k
< j
; ++k
) {
2406 cursor
.toNextSibling(qSection
);
2413 public void updateBuildOptionsFfsSectionsSection(int i
, int j
, String type
){
2414 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2415 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2416 if (sections
== null) {
2419 XmlCursor cursor
= sections
.newCursor();
2420 QName qSection
= new QName(xmlNs
, "Section");
2421 if (cursor
.toChild(qSection
)) {
2422 for (int k
= 0; k
< j
; ++k
) {
2423 cursor
.toNextSibling(qSection
);
2425 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
)cursor
.getObject();
2426 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2431 public void genBuildOptionsFfsSectionsSections(int i
, String encapType
) {
2432 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2436 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2438 if (sections
== null){
2439 sections
= ffs
.addNewSections();
2441 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= sections
.addNewSections();
2442 sections2
.setEncapsulationType(encapType
);
2443 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString("EFI_SECTION_PE32"));
2446 public void removeBuildOptionsFfsSectionsSections(int i
, int j
) {
2447 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2448 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2449 if (sections
== null) {
2452 XmlCursor cursor
= sections
.newCursor();
2453 QName qSections
= new QName(xmlNs
, "Sections");
2454 if (cursor
.toChild(qSections
)) {
2455 for (int k
= 0; k
< j
; ++k
) {
2456 cursor
.toNextSibling(qSections
);
2463 public void updateBuildOptionsFfsSectionsSections(int i
, int j
, String type
) {
2464 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2465 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2466 if (sections
== null) {
2469 XmlCursor cursor
= sections
.newCursor();
2470 QName qSections
= new QName(xmlNs
, "Sections");
2471 if (cursor
.toChild(qSections
)) {
2472 for (int k
= 0; k
< j
; ++k
) {
2473 cursor
.toNextSibling(qSections
);
2475 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2476 sections2
.setEncapsulationType(type
);
2481 public void genBuildOptionsFfsSectionsSectionsSection(int i
, int j
, String type
) {
2482 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2486 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2487 XmlCursor cursor
= sections
.newCursor();
2488 QName qSections
= new QName(xmlNs
, "Sections");
2489 if (cursor
.toChild(qSections
)){
2490 for (int k
= 0; k
< j
; ++k
) {
2491 cursor
.toNextSibling(qSections
);
2493 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2494 sections2
.addNewSection().setSectionType(EfiSectionType
.Enum
.forString(type
));
2499 public void removeBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
) {
2500 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2501 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2502 if (sections
== null) {
2505 XmlCursor cursor
= sections
.newCursor();
2506 QName qSections
= new QName(xmlNs
, "Sections");
2507 if (cursor
.toChild(qSections
)) {
2508 for (int l
= 0; l
< j
; ++l
) {
2509 cursor
.toNextSibling(qSections
);
2511 if (cursor
.toFirstChild()) {
2513 for (; m
< k
; ++m
) {
2514 cursor
.toNextSibling();
2526 public void updateBuildOptionsFfsSectionsSectionsSection(int i
, int j
, int k
, String type
) {
2527 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2528 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2529 if (sections
== null) {
2532 XmlCursor cursor
= sections
.newCursor();
2533 QName qSections
= new QName(xmlNs
, "Sections");
2534 if (cursor
.toChild(qSections
)) {
2535 for (int l
= 0; l
< j
; ++l
) {
2536 cursor
.toNextSibling(qSections
);
2538 if (cursor
.toFirstChild()) {
2539 for (int m
= 0; m
< k
; ++m
) {
2540 cursor
.toNextSibling();
2542 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
)cursor
.getObject();
2543 section
.setSectionType(EfiSectionType
.Enum
.forString(type
));
2549 public void getBuildOptionsFfsSectionsSectionsSection(int i
, int j
, ArrayList
<String
> al
) {
2550 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2554 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections sections
= ffs
.getSections();
2555 XmlCursor cursor
= sections
.newCursor();
2556 QName qSections
= new QName(xmlNs
, "Sections");
2557 if (cursor
.toChild(qSections
)){
2558 for (int k
= 0; k
< j
; ++k
) {
2559 cursor
.toNextSibling(qSections
);
2561 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2 sections2
= (BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
)cursor
.getObject();
2562 if (sections2
.getSectionList() == null){
2566 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section
> li
= sections2
.getSectionList().listIterator();
2567 while(li
.hasNext()) {
2568 BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
.Section section
= li
.next();
2569 // if (section.isSetSectionType()) {
2570 al
.add(section
.getSectionType()+"");
2579 public int getBuildOptionsFfsCount(){
2580 if (getfpdBuildOpts().getFfsList() == null) {
2583 return getfpdBuildOpts().getFfsList().size();
2586 public void getBuildOptionsFfsKey(String
[][] saa
) {
2587 if (getfpdBuildOpts().getFfsList() == null) {
2590 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
> li
= getfpdBuildOpts().getFfsList().listIterator();
2592 while(li
.hasNext()){
2593 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= li
.next();
2594 saa
[i
][0] = ffs
.getFfsKey();
2599 public void updateBuildOptionsFfsKey(int i
, String key
) {
2600 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2604 /**Get ith FFS key and contents.
2607 public void getBuildOptionsFfs(int i
, String
[] sa
, LinkedHashMap
<String
, String
> ffsAttribMap
, ArrayList
<String
> firstLevelSections
, ArrayList
<String
> firstLevelSection
) {
2608 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2612 sa
[0] = ffs
.getFfsKey();
2613 if (ffs
.getSections() != null) {
2614 if(ffs
.getSections().getEncapsulationType() != null){
2615 sa
[1] = ffs
.getSections().getEncapsulationType();
2617 if (ffs
.getSections().getSectionList() != null){
2618 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Section
> li
= ffs
.getSections().getSectionList().listIterator();
2619 while (li
.hasNext()) {
2620 firstLevelSection
.add(li
.next().getSectionType()+"");
2623 if (ffs
.getSections().getSectionsList() != null) {
2624 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Sections
.Sections2
> li
= ffs
.getSections().getSectionsList().listIterator();
2625 while(li
.hasNext()) {
2626 firstLevelSections
.add(li
.next().getEncapsulationType());
2630 if (ffs
.getAttributeList() != null) {
2631 ListIterator
<BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute
> li
= ffs
.getAttributeList().listIterator();
2632 while(li
.hasNext()) {
2633 BuildOptionsDocument
.BuildOptions
.Ffs
.Attribute attrib
= li
.next();
2634 ffsAttribMap
.put(attrib
.getName(), attrib
.getValue());
2643 private BuildOptionsDocument
.BuildOptions
.Ffs
getFfs(int i
) {
2644 XmlObject o
= getfpdBuildOpts();
2645 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= null;
2647 XmlCursor cursor
= o
.newCursor();
2648 QName qFfs
= new QName(xmlNs
, "Ffs");
2649 if (cursor
.toChild(qFfs
)) {
2650 for (int j
= 0; j
< i
; ++j
) {
2651 cursor
.toNextSibling(qFfs
);
2653 ffs
= (BuildOptionsDocument
.BuildOptions
.Ffs
)cursor
.getObject();
2659 public void removeBuildOptionsFfs(int i
) {
2660 BuildOptionsDocument
.BuildOptions
.Ffs ffs
= getFfs(i
);
2665 XmlCursor cursor
= ffs
.newCursor();
2672 public PlatformDefinitionsDocument
.PlatformDefinitions
getfpdPlatformDefs(){
2673 if (fpdPlatformDefs
== null){
2674 fpdPlatformDefs
= fpdRoot
.addNewPlatformDefinitions();
2676 return fpdPlatformDefs
;
2679 public void getPlatformDefsSupportedArchs(Vector
<Object
> archs
){
2680 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {
2683 ListIterator li
= getfpdPlatformDefs().getSupportedArchitectures().listIterator();
2684 while(li
.hasNext()) {
2685 archs
.add(li
.next());
2689 public void setPlatformDefsSupportedArchs(Vector
<Object
> archs
) {
2690 if (archs
!= null) {
2691 getfpdPlatformDefs().setSupportedArchitectures(archs
);
2694 // XmlCursor cursor = getfpdPlatformDefs().newCursor();
2695 // if (cursor.toChild(xmlNs, "SupportedArchitectures")) {
2696 // cursor.removeXml();
2698 // cursor.dispose();
2702 public void getPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2703 if (getfpdPlatformDefs().getBuildTargets() == null) {
2706 ListIterator li
= getfpdPlatformDefs().getBuildTargets().listIterator();
2707 while(li
.hasNext()) {
2708 targets
.add(li
.next());
2712 public void setPlatformDefsBuildTargets(Vector
<Object
> targets
) {
2713 getfpdPlatformDefs().setBuildTargets(targets
);
2716 public void genPlatformDefsSkuInfo(String id
, String name
) {
2717 SkuInfoDocument
.SkuInfo skuInfo
= null;
2718 if (getfpdPlatformDefs().getSkuInfo() == null) {
2719 skuInfo
= getfpdPlatformDefs().addNewSkuInfo();
2721 skuInfo
= getfpdPlatformDefs().getSkuInfo();
2722 if (skuInfo
.getUiSkuNameList() == null || skuInfo
.getUiSkuNameList().size() == 0) {
2723 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2724 skuName
.setSkuID(new BigInteger("0"));
2725 skuName
.setStringValue("DEFAULT");
2727 if (id
.equals("0")) {
2730 SkuInfoDocument
.SkuInfo
.UiSkuName skuName
= skuInfo
.addNewUiSkuName();
2731 skuName
.setSkuID(new BigInteger(id
));
2732 skuName
.setStringValue(name
);
2735 public int getPlatformDefsSkuInfoCount(){
2736 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2739 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();
2742 public void getPlatformDefsSkuInfos(String
[][] saa
){
2743 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {
2744 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {
2745 removeElement(getfpdDynPcdBuildDefs());
2746 fpdDynPcdBuildDefs
= null;
2751 List
<SkuInfoDocument
.SkuInfo
.UiSkuName
> l
= getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();
2752 ListIterator
<SkuInfoDocument
.SkuInfo
.UiSkuName
> li
= l
.listIterator();
2754 while(li
.hasNext()) {
2755 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= li
.next();
2756 saa
[i
][0] = sku
.getSkuID()+"";
2757 saa
[i
][1] = sku
.getStringValue();
2762 public void removePlatformDefsSkuInfo(int i
) {
2763 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2764 if (skuInfo
== null || i
== 0) {
2768 XmlCursor cursor
= skuInfo
.newCursor();
2769 if (cursor
.toFirstChild()) {
2770 for (int j
= 0; j
< i
; ++j
) {
2771 cursor
.toNextSibling();
2778 public void updatePlatformDefsSkuInfo(int i
, String id
, String name
) {
2779 SkuInfoDocument
.SkuInfo skuInfo
= getfpdPlatformDefs().getSkuInfo();
2780 if (skuInfo
== null || i
== 0) {
2784 XmlCursor cursor
= skuInfo
.newCursor();
2785 if (cursor
.toFirstChild()) {
2786 for (int j
= 0; j
< i
; ++j
) {
2787 cursor
.toNextSibling();
2789 SkuInfoDocument
.SkuInfo
.UiSkuName sku
= (SkuInfoDocument
.SkuInfo
.UiSkuName
)cursor
.getObject();
2790 sku
.setSkuID(new BigInteger(id
));
2791 sku
.setStringValue(name
);
2796 public String
getPlatformDefsInterDir(){
2797 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {
2800 return getfpdPlatformDefs().getIntermediateDirectories().toString();
2803 public void setPlatformDefsInterDir(String interDir
){
2804 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType
.Enum
.forString(interDir
));
2807 public String
getPlatformDefsOutputDir() {
2808 return getfpdPlatformDefs().getOutputDirectory();
2811 public void setPlatformDefsOutputDir(String outputDir
) {
2812 if (outputDir
!= null && outputDir
.length() > 0) {
2813 getfpdPlatformDefs().setOutputDirectory(outputDir
);
2816 XmlCursor cursor
= getfpdPlatformDefs().newCursor();
2817 if (cursor
.toChild(new QName(xmlNs
, "OutputDirectory"))) {
2824 public FlashDocument
.Flash
getfpdFlash() {
2825 if (fpdFlash
== null) {
2826 fpdFlash
= fpdRoot
.addNewFlash();
2831 public void genFlashDefinitionFile(String file
) {
2832 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2834 fdf
= getfpdFlash().addNewFlashDefinitionFile();
2837 fdf
.setStringValue(file
);
2840 public String
getFlashDefinitionFile() {
2841 FlashDefinitionFileDocument
.FlashDefinitionFile fdf
= getfpdFlash().getFlashDefinitionFile();
2846 return fdf
.getStringValue();
2849 public void genFvImagesNameValue(String name
, String value
) {
2851 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2853 fi
= getfpdFlash().addNewFvImages();
2856 FvImagesDocument
.FvImages
.NameValue nv
= fi
.addNewNameValue();
2861 public void removeFvImagesNameValue(int i
){
2863 XmlObject o
= getfpdFlash().getFvImages();
2868 QName qNameValue
= new QName(xmlNs
, "NameValue");
2869 XmlCursor cursor
= o
.newCursor();
2870 if (cursor
.toChild(qNameValue
)) {
2871 for (int j
= 0; j
< i
; ++j
) {
2872 cursor
.toNextSibling(qNameValue
);
2879 public void updateFvImagesNameValue(int i
, String name
, String value
){
2881 XmlObject o
= getfpdFlash().getFvImages();
2886 QName qNameValue
= new QName(xmlNs
, "NameValue");
2887 XmlCursor cursor
= o
.newCursor();
2888 if (cursor
.toChild(qNameValue
)) {
2889 for (int j
= 0; j
< i
; ++j
) {
2890 cursor
.toNextSibling(qNameValue
);
2892 FvImagesDocument
.FvImages
.NameValue nv
= (FvImagesDocument
.FvImages
.NameValue
)cursor
.getObject();
2899 public int getFvImagesNameValueCount() {
2901 FvImagesDocument
.FvImages fi
= null;
2902 if ((fi
= getfpdFlash().getFvImages()) == null || fi
.getNameValueList() == null) {
2905 return fi
.getNameValueList().size();
2908 public void getFvImagesNameValues(String
[][] nv
) {
2910 FvImagesDocument
.FvImages fi
= getfpdFlash().getFvImages();
2914 List
<FvImagesDocument
.FvImages
.NameValue
> l
= fi
.getNameValueList();
2916 ListIterator li
= l
.listIterator();
2917 while (li
.hasNext()) {
2918 FvImagesDocument
.FvImages
.NameValue e
= (FvImagesDocument
.FvImages
.NameValue
) li
2920 nv
[i
][0] = e
.getName();
2921 nv
[i
][1] = e
.getValue();
2927 public void getFvImagesFvImageFvImageNames (Vector
<String
> vImageNames
) {
2928 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2929 if (fis
== null || fis
.getFvImageList() == null) {
2933 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2934 while (li
.hasNext()) {
2935 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2936 if (fi
.getType().toString().equals("ImageName")) {
2937 vImageNames
.addAll(fi
.getFvImageNamesList());
2943 public void addFvImageFvImageNames (String
[] fvNames
) {
2944 FvImagesDocument
.FvImages fis
= getfpdFlash().getFvImages();
2945 if (fis
== null || fis
.getFvImageList() == null) {
2946 genFvImagesFvImage (fvNames
, "ImageName", null);
2950 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= fis
.getFvImageList().listIterator();
2951 while (li
.hasNext()) {
2952 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
2953 if (fi
.getType().toString().equals("ImageName")) {
2954 addFvImageNamesInFvImage (fi
, fvNames
);
2958 genFvImagesFvImage (fvNames
, "ImageName", null);
2961 public void addFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String
[] fvNames
) {
2963 for (int i
= 0; i
< fvNames
.length
; ++i
) {
2964 fi
.addFvImageNames(fvNames
[i
]);
2968 public void addFvImageNamesInFvImage (int i
, String
[] fvNames
) {
2969 XmlObject o
= getfpdFlash().getFvImages();
2973 XmlCursor cursor
= o
.newCursor();
2974 QName qFvImage
= new QName(xmlNs
, "FvImage");
2975 if (cursor
.toChild(qFvImage
)) {
2976 for (int j
= 0; j
< i
; ++j
) {
2977 cursor
.toNextSibling(qFvImage
);
2979 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
2980 addFvImageNamesInFvImage(fi
, fvNames
);
2985 public void genFvImagesFvImage(String
[] names
, String types
, Map
<String
, String
> options
) {
2987 FvImagesDocument
.FvImages fis
= null;
2988 if ((fis
= getfpdFlash().getFvImages()) == null) {
2989 fis
= getfpdFlash().addNewFvImages();
2993 //gen FvImage with FvImageNames array
2995 FvImagesDocument
.FvImages
.FvImage fi
= fis
.addNewFvImage();
2996 for (int i
= 0; i
< names
.length
; ++i
) {
2997 fi
.addFvImageNames(names
[i
]);
2999 fi
.setType(FvImageTypes
.Enum
.forString(types
));
3000 if (options
!= null){
3001 setFvImagesFvImageFvImageOptions(options
, fi
);
3005 private void setFvImagesFvImageFvImageOptions(Map
<String
, String
> options
, FvImagesDocument
.FvImages
.FvImage fi
){
3006 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions fio
= fi
.getFvImageOptions();
3008 fio
= fi
.addNewFvImageOptions();
3011 Set
<String
> key
= options
.keySet();
3012 Iterator
<String
> i
= key
.iterator();
3013 while (i
.hasNext()) {
3015 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fio
.addNewNameValue();
3016 String k
= (String
)i
.next();
3019 nv
.setValue((String
)options
.get(k
));
3026 public void removeFvImagesFvImage(int i
) {
3028 XmlObject o
= getfpdFlash().getFvImages();
3033 QName qFvImage
= new QName(xmlNs
, "FvImage");
3034 XmlCursor cursor
= o
.newCursor();
3035 if (cursor
.toChild(qFvImage
)) {
3036 for (int j
= 0; j
< i
; ++j
) {
3037 cursor
.toNextSibling(qFvImage
);
3046 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
3048 public void updateFvImageNameAll (String oldFvName
, String newFvName
) {
3049 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
3052 ListIterator
<FvImagesDocument
.FvImages
.FvImage
> li
= getfpdFlash().getFvImages().getFvImageList().listIterator();
3053 while (li
.hasNext()) {
3054 FvImagesDocument
.FvImages
.FvImage fi
= li
.next();
3055 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
3056 if (fi
.getFvImageNamesList().size() == 0) {
3062 public void updateFvImageNamesInFvImage (int i
, String oldFvName
, String newFvName
) {
3063 XmlObject o
= getfpdFlash().getFvImages();
3067 XmlCursor cursor
= o
.newCursor();
3068 QName qFvImage
= new QName(xmlNs
, "FvImage");
3069 if (cursor
.toChild(qFvImage
)) {
3070 for (int j
= 0; j
< i
; ++j
) {
3071 cursor
.toNextSibling(qFvImage
);
3073 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3074 updateFvImageNamesInFvImage (fi
, oldFvName
, newFvName
);
3080 * @param oldFvName The FV Name to be replaced.
3081 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.
3083 public void updateFvImageNamesInFvImage (FvImagesDocument
.FvImages
.FvImage fi
, String oldFvName
, String newFvName
) {
3084 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
3085 XmlCursor cursor
= fi
.newCursor();
3087 if (cursor
.toChild(qFvImageNames
)) {
3089 String xmlValue
= cursor
.getTextValue();
3090 if (xmlValue
.equals(oldFvName
)){
3091 if (newFvName
!= null) {
3092 cursor
.setTextValue(newFvName
);
3098 }while (cursor
.toNextSibling(qFvImageNames
));
3104 /**update the Type attribute of ith FvImage with new type.
3108 public void updateFvImagesFvImageType (int i
, String type
) {
3109 XmlObject o
= getfpdFlash().getFvImages();
3113 XmlCursor cursor
= o
.newCursor();
3114 QName qFvImage
= new QName(xmlNs
, "FvImage");
3115 if (cursor
.toChild(qFvImage
)) {
3116 for (int j
= 0; j
< i
; ++j
) {
3117 cursor
.toNextSibling(qFvImage
);
3119 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3120 fi
.setType(FvImageTypes
.Enum
.forString(type
));
3125 public void updateFvImagesFvImage(int i
, String
[] names
, String types
, Map
<String
, String
> options
){
3127 XmlObject o
= getfpdFlash().getFvImages();
3131 XmlCursor cursor
= o
.newCursor();
3132 QName qFvImage
= new QName(xmlNs
, "FvImage");
3133 if (cursor
.toChild(qFvImage
)) {
3134 for (int j
= 0; j
< i
; ++j
) {
3135 cursor
.toNextSibling(qFvImage
);
3137 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3138 fi
.setType(FvImageTypes
.Enum
.forString(types
));
3141 // remove old FvImageNames before adding new ones
3143 QName qFvImageNames
= new QName(xmlNs
, "FvImageNames");
3144 cursor
.toChild(qFvImageNames
);
3146 while (cursor
.toNextSibling(qFvImageNames
)) {
3150 for (int k
= 0; k
< names
.length
; ++k
) {
3151 fi
.addFvImageNames(names
[k
]);
3154 // remove old FvImageOptions before adding new options
3156 QName qFvImageOptions
= new QName(xmlNs
, "FvImageOptions");
3157 cursor
.toNextSibling(qFvImageOptions
);
3160 setFvImagesFvImageFvImageOptions(options
, fi
);
3165 public int getFvImagesFvImageCount(String type
) {
3167 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
3170 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3171 ListIterator li
= l
.listIterator();
3173 while(li
.hasNext()) {
3174 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3175 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3185 public Vector
<FvImagesDocument
.FvImages
.FvImage
> getFvImagesFvImageWithName (String fvName
, String type
) {
3186 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= new Vector
<FvImagesDocument
.FvImages
.FvImage
>();
3187 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {
3190 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3191 ListIterator li
= l
.listIterator();
3192 while(li
.hasNext()) {
3193 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3194 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3197 if (fi
.getFvImageNamesList().contains(fvName
)) {
3206 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.
3208 public void getFvImagesFvImages(String
[][] saa
, String type
) {
3210 if (getfpdFlash().getFvImages() == null) {
3213 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3217 ListIterator li
= l
.listIterator();
3219 while(li
.hasNext()) {
3220 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3221 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3225 // get FvImageNames array, space separated
3227 List
<String
> lfn
= fi
.getFvImageNamesList();
3228 ListIterator lfni
= lfn
.listIterator();
3230 while (lfni
.hasNext()) {
3231 saa
[i
][0] += (String
)lfni
.next();
3234 saa
[i
][0] = saa
[i
][0].trim();
3236 saa
[i
][1] = fi
.getType()+"";
3242 public void removeFvImageNameValue (int i
, String attributeName
) {
3243 XmlObject o
= getfpdFlash().getFvImages();
3247 XmlCursor cursor
= o
.newCursor();
3248 QName qFvImage
= new QName(xmlNs
, "FvImage");
3249 if (cursor
.toChild(qFvImage
)) {
3250 for (int j
= 0; j
< i
; ++j
) {
3251 cursor
.toNextSibling(qFvImage
);
3253 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3254 removeFvImageNameValue (fi
, attributeName
);
3258 /**Remove from fi the attribute pair with attributeName in FvImageOptions.
3260 * @param attributeName
3262 public void removeFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String attributeName
) {
3263 if (fi
.getFvImageOptions() != null && fi
.getFvImageOptions().getNameValueList() != null) {
3264 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3265 while (li
.hasNext()) {
3266 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3267 if (nv
.getName().equals(attributeName
)) {
3274 public void removeTypedNamedFvImageNameValue (String fvName
, String type
, String optName
) {
3275 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName(fvName
, type
);
3276 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3277 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3278 removeFvImageNameValue (fi
, optName
);
3282 /**Add name-value pair to FvImage element with type.
3283 * @param fvName FV name to add name-value pair.
3284 * @param type FvImage attribute.
3288 public void setTypedNamedFvImageNameValue (String fvName
, String type
, String name
, String value
, String newName
) {
3289 boolean fvImageExists
= false;
3290 if (getfpdFlash().getFvImages() != null) {
3292 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3294 ListIterator li
= l
.listIterator();
3295 while (li
.hasNext()) {
3296 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
) li
.next();
3297 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3300 if (!fi
.getFvImageNamesList().contains(fvName
)) {
3303 fvImageExists
= true;
3304 setFvImagesFvImageNameValue(fi
, name
, value
, newName
);
3309 if (!fvImageExists
) {
3310 HashMap
<String
, String
> map
= new HashMap
<String
, String
>();
3311 map
.put(name
, value
);
3312 genFvImagesFvImage(new String
[] { fvName
}, type
, map
);
3316 /**Add to all FvImage elements with type, the name-value pair.
3321 public void setTypedFvImageNameValue (String type
, String name
, String value
) {
3322 if (getfpdFlash().getFvImages() == null) {
3325 List
<FvImagesDocument
.FvImages
.FvImage
> l
= getfpdFlash().getFvImages().getFvImageList();
3329 ListIterator li
= l
.listIterator();
3330 while(li
.hasNext()) {
3331 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)li
.next();
3332 if (!fi
.getType().toString().equals(type
) && !type
.equals("ALL")) {
3335 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3340 public void setFvImagesFvImageNameValue (int i
, String name
, String value
) {
3341 XmlObject o
= getfpdFlash().getFvImages();
3345 XmlCursor cursor
= o
.newCursor();
3346 QName qFvImage
= new QName(xmlNs
, "FvImage");
3347 if (cursor
.toChild(qFvImage
)) {
3348 for (int j
= 0; j
< i
; ++j
) {
3349 cursor
.toNextSibling(qFvImage
);
3351 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3352 setFvImagesFvImageNameValue (fi
, name
, value
, null);
3357 /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before.
3363 public void setFvImagesFvImageNameValue (FvImagesDocument
.FvImages
.FvImage fi
, String name
, String value
, String newName
) {
3364 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3365 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.addNewFvImageOptions().addNewNameValue();
3368 if (newName
!= null && !newName
.equals(name
)) {
3369 nv
.setName(newName
);
3374 XmlCursor cursor
= fi
.getFvImageOptions().newCursor();
3375 if (cursor
.toFirstChild()) {
3377 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= (FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
)cursor
.getObject();
3378 if (nv
.getName().equals(name
)) {
3380 if (newName
!= null && !newName
.equals(name
)) {
3381 nv
.setName(newName
);
3386 }while (cursor
.toNextSibling());
3389 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= fi
.getFvImageOptions().addNewNameValue();
3392 if (newName
!= null && !newName
.equals(name
)) {
3393 nv
.setName(newName
);
3398 public void getFvImagesFvImageOptions (String fvName
, Map
<String
, String
> m
) {
3399 Vector
<FvImagesDocument
.FvImages
.FvImage
> vFvImage
= getFvImagesFvImageWithName (fvName
, "Options");
3400 for (int i
= 0; i
< vFvImage
.size(); ++i
) {
3401 FvImagesDocument
.FvImages
.FvImage fi
= vFvImage
.get(i
);
3402 if (fi
== null || fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null) {
3406 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions()
3409 while (li
.hasNext()) {
3410 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3411 m
.put(nv
.getName(), nv
.getValue());
3416 public int getFvImagePosInFvImages (String fvNameList
, String type
) {
3417 XmlObject o
= getfpdFlash().getFvImages();
3423 String
[] fvNameArray
= fvNameList
.trim().split(" ");
3424 Vector
<String
> vFvNames
= new Vector
<String
>();
3427 XmlCursor cursor
= o
.newCursor();
3428 QName qFvImage
= new QName(xmlNs
, "FvImage");
3429 if (cursor
.toChild(qFvImage
)) {
3432 vFvNames
.removeAllElements();
3433 for (int i
= 0; i
< fvNameArray
.length
; ++i
) {
3434 vFvNames
.add(fvNameArray
[i
]);
3436 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3437 if (!fi
.getType().toString().equals(type
)) {
3440 if (fi
.getFvImageNamesList() == null || fi
.getFvImageNamesList().size() != vFvNames
.size()) {
3443 ListIterator
<String
> li
= fi
.getFvImageNamesList().listIterator();
3444 while (li
.hasNext()) {
3445 String name
= li
.next();
3446 vFvNames
.remove(name
);
3448 if (vFvNames
.size() == 0) {
3453 }while (cursor
.toNextSibling(qFvImage
));
3459 /**Get FvImage Options for FvImage i
3460 * @param i the ith FvImage
3462 public void getFvImagesFvImageOptions(int i
, Map
<String
, String
> m
) {
3463 XmlObject o
= getfpdFlash().getFvImages();
3467 XmlCursor cursor
= o
.newCursor();
3468 QName qFvImage
= new QName(xmlNs
, "FvImage");
3469 if (cursor
.toChild(qFvImage
)) {
3470 for (int j
= 0; j
< i
; ++j
) {
3471 cursor
.toNextSibling(qFvImage
);
3473 FvImagesDocument
.FvImages
.FvImage fi
= (FvImagesDocument
.FvImages
.FvImage
)cursor
.getObject();
3474 if (fi
.getFvImageOptions() == null || fi
.getFvImageOptions().getNameValueList() == null){
3478 ListIterator
<FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue
> li
= fi
.getFvImageOptions().getNameValueList().listIterator();
3479 while(li
.hasNext()){
3480 FvImagesDocument
.FvImages
.FvImage
.FvImageOptions
.NameValue nv
= li
.next();
3481 m
.put(nv
.getName(), nv
.getValue());
3488 Get platform header element
3489 @return PlatformHeaderDocument.PlatformHeader
3491 public PlatformHeaderDocument
.PlatformHeader
getFpdHdr() {
3492 if (fpdHdr
== null) {
3493 fpdHdr
= fpdRoot
.addNewPlatformHeader();
3499 public String
getFpdHdrPlatformName() {
3500 return getFpdHdr().getPlatformName();
3503 public String
getFpdHdrGuidValue() {
3504 return getFpdHdr().getGuidValue();
3507 public String
getFpdHdrVer() {
3508 return getFpdHdr().getVersion();
3511 public String
getFpdHdrAbs() {
3512 return getFpdHdr().getAbstract();
3515 public String
getFpdHdrDescription() {
3516 return getFpdHdr().getDescription();
3519 public String
getFpdHdrCopyright() {
3520 return getFpdHdr().getCopyright();
3523 public String
getFpdHdrLicense() {
3524 LicenseDocument
.License l
= getFpdHdr().getLicense();
3528 return l
.getStringValue();
3531 public String
getFpdHdrUrl() {
3532 LicenseDocument
.License l
= getFpdHdr().getLicense();
3539 public String
getFpdHdrSpec() {
3541 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3542 // return getFpdHdr().getSpecification();
3545 public void setFpdHdrPlatformName(String name
){
3546 getFpdHdr().setPlatformName(name
);
3549 public void setFpdHdrGuidValue(String guid
){
3550 getFpdHdr().setGuidValue(guid
);
3553 public void setFpdHdrVer(String v
){
3554 getFpdHdr().setVersion(v
);
3557 public void setFpdHdrAbs(String abs
) {
3558 getFpdHdr().setAbstract(abs
);
3561 public void setFpdHdrDescription(String desc
){
3562 getFpdHdr().setDescription(desc
);
3565 public void setFpdHdrCopyright(String cr
) {
3566 getFpdHdr().setCopyright(cr
);
3569 public void setFpdHdrLicense(String license
){
3570 LicenseDocument
.License l
= getFpdHdr().getLicense();
3572 getFpdHdr().addNewLicense().setStringValue(license
);
3575 l
.setStringValue(license
);
3579 public void setFpdHdrUrl(String url
){
3580 LicenseDocument
.License l
= getFpdHdr().getLicense();
3586 public void setFpdHdrSpec(String s
){
3587 s
= "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";
3588 getFpdHdr().setSpecification(s
);
3591 Save the processed xml contents to file
3593 @param fpdFile The file to save xml contents
3594 @throws IOException Exceptions during file operation
3596 public void saveAs(File fpdFile
) throws IOException
{
3598 XmlOptions options
= new XmlOptions();
3600 options
.setCharacterEncoding("UTF-8");
3601 options
.setSavePrettyPrint();
3602 options
.setSavePrettyPrintIndent(2);
3604 fpdd
.save(fpdFile
, options
);
3605 } catch (IOException e
) {
3606 e
.printStackTrace();
3611 private String
listToString(List l
) {
3616 ListIterator li
= l
.listIterator();
3617 while(li
.hasNext()) {
3624 private void removeElement(XmlObject o
) {
3625 XmlCursor cursor
= o
.newCursor();
3631 class PcdItemTypeConflictException
extends Exception
{
3636 private static final long serialVersionUID
= 1L;
3637 private String details
= null;
3639 PcdItemTypeConflictException(String pcdName
, String info
){
3640 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(info
);
3641 details
= pcdName
+ " ItemType Conflicts with " + mi
.getName() + " in Pkg " + mi
.getPackageId().getName();
3644 public String
getMessage() {
3649 class PcdDeclNotFound
extends Exception
{
3654 private static final long serialVersionUID
= 1L;
3655 private String details
= null;
3657 PcdDeclNotFound(String info
) {
3658 details
= "PcdDeclNotFound: " + info
;
3661 public String
getMessage() {
3666 class PcdValueMalFormed
extends Exception
{
3671 private static final long serialVersionUID
= 1L;
3672 private String details
= null;
3674 PcdValueMalFormed(String info
) {
3675 details
= "PcdValueMalFormed: " + info
;
3678 public String
getMessage() {