]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
There were suppose to be three spaces, not one between SPECIFICATION and 0x00 in...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFileContents.java
CommitLineData
a13899c5 1/** @file\r
2 Java class FpdFileContents is used to parse fpd xml file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.platform.ui;\r
14\r
15import java.io.File;\r
16import java.io.IOException;\r
17import java.math.BigInteger;\r
18import java.util.ArrayList;\r
19import java.util.HashMap;\r
20import java.util.Iterator;\r
21import java.util.LinkedHashMap;\r
22import java.util.List;\r
23import java.util.ListIterator;\r
24import java.util.Map;\r
25import java.util.Set;\r
6a09eb19 26import java.util.Vector;\r
a13899c5 27\r
28import javax.xml.namespace.QName;\r
29\r
30import org.apache.xmlbeans.XmlCursor;\r
31import org.apache.xmlbeans.XmlObject;\r
32import org.apache.xmlbeans.XmlOptions;\r
33import org.tianocore.AntTaskDocument;\r
34import org.tianocore.BuildOptionsDocument;\r
35import org.tianocore.DynamicPcdBuildDefinitionsDocument;\r
6cba26e8 36import org.tianocore.EfiSectionType;\r
a13899c5 37import org.tianocore.FlashDefinitionFileDocument;\r
a13899c5 38import org.tianocore.FlashDocument;\r
39import org.tianocore.FrameworkModulesDocument;\r
6a09eb19 40import org.tianocore.IntermediateOutputType;\r
a13899c5 41import org.tianocore.LibrariesDocument;\r
42import org.tianocore.ModuleSADocument;\r
43import org.tianocore.ModuleSurfaceAreaDocument;\r
44import org.tianocore.OptionDocument;\r
45import org.tianocore.OptionsDocument;\r
46import org.tianocore.PcdBuildDefinitionDocument;\r
47import org.tianocore.PcdCodedDocument;\r
48import org.tianocore.PcdDataTypes;\r
49import org.tianocore.PcdDeclarationsDocument;\r
50import org.tianocore.PcdItemTypes;\r
51import org.tianocore.PlatformDefinitionsDocument;\r
52import org.tianocore.PlatformSurfaceAreaDocument;\r
53import org.tianocore.FvImageTypes;\r
54import org.tianocore.FvImagesDocument;\r
55import org.tianocore.LicenseDocument;\r
56import org.tianocore.PlatformHeaderDocument;\r
57import org.tianocore.SkuInfoDocument;\r
58import org.tianocore.UserDefinedAntTasksDocument;\r
59import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
60import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
61import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
62import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
63\r
64/**\r
65 This class processes fpd file contents such as add remove xml elements. \r
66 @since PackageEditor 1.0\r
67**/\r
68public class FpdFileContents {\r
69\r
70 static final String xmlNs = "http://www.TianoCore.org/2006/Edk2.0";\r
71 \r
72 private PlatformSurfaceAreaDocument fpdd = null;\r
73 \r
74 private PlatformSurfaceAreaDocument.PlatformSurfaceArea fpdRoot = null;\r
75 \r
76 private PlatformHeaderDocument.PlatformHeader fpdHdr = null;\r
77 \r
78 private PlatformDefinitionsDocument.PlatformDefinitions fpdPlatformDefs = null;\r
79 \r
80 private FlashDocument.Flash fpdFlash = null;\r
81 \r
82 private BuildOptionsDocument.BuildOptions fpdBuildOpts = null;\r
83 \r
84 private FrameworkModulesDocument.FrameworkModules fpdFrameworkModules = null;\r
85 \r
86 private DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs = null;\r
87 \r
908b1c05 88 private HashMap<String, ArrayList<String>> dynPcdMap = null;\r
a13899c5 89 \r
90 /**\r
91 * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings.\r
92 */\r
93 public void initDynPcdMap() {\r
94 if (dynPcdMap == null) {\r
95 dynPcdMap = new HashMap<String, ArrayList<String>>();\r
96 List<ModuleSADocument.ModuleSA> l = getfpdFrameworkModules().getModuleSAList();\r
97 if (l == null) {\r
98 return;\r
99 }\r
100 ListIterator<ModuleSADocument.ModuleSA> li = l.listIterator();\r
101 while (li.hasNext()) {\r
102 ModuleSADocument.ModuleSA msa = li.next();\r
103 if (msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null) {\r
104 continue;\r
105 }\r
106 String ModuleInfo = msa.getModuleGuid() + " " + msa.getModuleVersion() +\r
107 " " + msa.getPackageGuid() + " " + msa.getPackageVersion();\r
108 List<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lp = msa.getPcdBuildDefinition().getPcdDataList();\r
109 ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lpi = lp.listIterator();\r
110 while (lpi.hasNext()) {\r
111 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = lpi.next();\r
112 String pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName();\r
113 if (dynPcdMap.get(pcdKey) == null) {\r
114 ArrayList<String> al = new ArrayList<String>();\r
115 al.add(ModuleInfo + " " + pcdData.getItemType().toString());\r
116 dynPcdMap.put(pcdKey, al);\r
117 }\r
118 else{\r
119 dynPcdMap.get(pcdKey).add(ModuleInfo + " " + pcdData.getItemType().toString());\r
120 }\r
121 }\r
122 }\r
123 }\r
124 }\r
908b1c05 125 \r
126 public ArrayList<String> getDynPcdMapValue(String key) {\r
127 return dynPcdMap.get(key);\r
128 }\r
a13899c5 129 /**\r
130 Constructor to create a new spd file\r
131 **/\r
132 public FpdFileContents() {\r
133\r
134 fpdd = PlatformSurfaceAreaDocument.Factory.newInstance();\r
135 fpdRoot = fpdd.addNewPlatformSurfaceArea();\r
136\r
137 }\r
138\r
139 /**\r
140 Constructor for existing document object\r
141 @param psa\r
142 **/\r
143 public FpdFileContents(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
144 fpdRoot = fpd;\r
145 fpdHdr = fpdRoot.getPlatformHeader();\r
146 fpdPlatformDefs = fpdRoot.getPlatformDefinitions();\r
147 fpdBuildOpts = fpdRoot.getBuildOptions();\r
148 fpdFrameworkModules = fpdRoot.getFrameworkModules();\r
149 fpdDynPcdBuildDefs = fpdRoot.getDynamicPcdBuildDefinitions();\r
150 fpdFlash = fpdRoot.getFlash();\r
151 }\r
152\r
153 /**\r
154 Constructor based on an existing spd file\r
155 \r
156 @param f Existing spd file\r
157 **/\r
158 public FpdFileContents(File f) {\r
159 try {\r
160 fpdd = PlatformSurfaceAreaDocument.Factory.parse(f);\r
161 fpdRoot = fpdd.getPlatformSurfaceArea();\r
162 } catch (Exception e) {\r
163 System.out.println(e.toString());\r
164 }\r
165 }\r
166 \r
167 public DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions getfpdDynPcdBuildDefs() {\r
168 if (fpdDynPcdBuildDefs == null){\r
169 fpdDynPcdBuildDefs = fpdRoot.addNewDynamicPcdBuildDefinitions();\r
170 }\r
171 return fpdDynPcdBuildDefs;\r
172 }\r
173 \r
174 public FrameworkModulesDocument.FrameworkModules getfpdFrameworkModules() {\r
175 if (fpdFrameworkModules == null){\r
176 fpdFrameworkModules = fpdRoot.addNewFrameworkModules();\r
177 }\r
178 return fpdFrameworkModules;\r
179 }\r
180 \r
a13899c5 181 public int getFrameworkModulesCount() {\r
182 if (getfpdFrameworkModules().getModuleSAList() == null){\r
183 return 0;\r
184 }\r
185 return getfpdFrameworkModules().getModuleSAList().size();\r
186 }\r
187 \r
188 public void getFrameworkModulesInfo(String[][] saa) {\r
189 if (getFrameworkModulesCount() == 0){\r
190 return;\r
191 }\r
192 \r
193 ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator();\r
194 int i = 0;\r
195 while(li.hasNext()) {\r
196 ModuleSADocument.ModuleSA msa = (ModuleSADocument.ModuleSA)li.next();\r
197 saa[i][1] = msa.getModuleGuid();\r
198 saa[i][2] = msa.getModuleVersion();\r
199 \r
200 saa[i][3] = msa.getPackageGuid();\r
201 saa[i][4] = msa.getPackageVersion();\r
202// saa[i][4] = listToString(msa.getSupArchList());\r
203 ++i;\r
204 }\r
205 }\r
206 \r
207 public ModuleSADocument.ModuleSA getModuleSA(String key) {\r
208 String[] s = key.split(" ");\r
209 if (getfpdFrameworkModules().getModuleSAList() == null) {\r
210 return null;\r
211 }\r
212 ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator();\r
213 while(li.hasNext()) {\r
214 ModuleSADocument.ModuleSA msa = (ModuleSADocument.ModuleSA)li.next();\r
f3b0ed9a 215 if (msa.getModuleGuid().equals(s[0]) && msa.getPackageGuid().equals(s[2])) {\r
12e17a0a 216 if (msa.getModuleVersion() != null) {\r
217 if (!msa.getModuleVersion().equals(s[1])) {\r
218 continue;\r
219 }\r
220 }\r
221 if (msa.getPackageVersion() != null) {\r
222 if (!msa.getPackageVersion().equals(s[3])) {\r
223 continue;\r
224 }\r
225 }\r
a13899c5 226 return msa;\r
227 }\r
228 }\r
229 return null;\r
230 }\r
231 public void removeModuleSA(int i) {\r
232 XmlObject o = getfpdFrameworkModules();\r
233 if (o == null) {\r
234 return;\r
235 }\r
236 \r
237 XmlCursor cursor = o.newCursor();\r
238 if (cursor.toFirstChild()) {\r
239 for (int j = 0; j < i; ++j) {\r
240 cursor.toNextSibling();\r
241 }\r
242 //\r
243 // remove pcd from dynPcdMap, if DynamicPcdBuildData exists, remove them too.\r
244 //\r
245 ModuleSADocument.ModuleSA moduleSa = (ModuleSADocument.ModuleSA)cursor.getObject();\r
246 String moduleInfo = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() + " " +\r
247 moduleSa.getPackageGuid()+ " " + moduleSa.getPackageVersion();\r
248 PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef = moduleSa.getPcdBuildDefinition();\r
908b1c05 249 if (pcdBuildDef != null && pcdBuildDef.getPcdDataList() != null) {\r
250 ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> li = pcdBuildDef.getPcdDataList().listIterator();\r
251 while(li.hasNext()) {\r
252 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = li.next();\r
253 maintainDynPcdMap(pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(), moduleInfo);\r
254 }\r
a13899c5 255 }\r
256 cursor.removeXml();\r
af25df16 257 if (getFrameworkModulesCount() == 0) {\r
258 cursor.toParent();\r
259 cursor.removeXml();\r
260 }\r
a13899c5 261 }\r
262 cursor.dispose();\r
263 }\r
264 \r
908b1c05 265 private void maintainDynPcdMap(String pcdKey, String moduleInfo) {\r
266 \r
267 ArrayList<String> al = dynPcdMap.get(pcdKey);\r
268 if (al == null) {\r
a13899c5 269 return;\r
270 }\r
908b1c05 271 String[] s = moduleInfo.split(" ");\r
a13899c5 272 for(int i = 0; i < al.size(); ++i){\r
908b1c05 273 String consumer = al.get(i);\r
274 if (consumer.contains(s[0]) && consumer.contains(s[2])){\r
275 al.remove(consumer);\r
a13899c5 276 break;\r
277 }\r
278 }\r
908b1c05 279\r
a13899c5 280 if (al.size() == 0) {\r
281 dynPcdMap.remove(pcdKey);\r
908b1c05 282 String[] s1 = pcdKey.split(" ");\r
283 removeDynamicPcdBuildData(s1[0], s1[1]);\r
a13899c5 284 }\r
285 \r
a13899c5 286 }\r
287 //\r
288 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer"\r
289 //\r
290 public int getPcdDataCount(String key){\r
291 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
292 if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
293 return 0;\r
294 }\r
295 return msa.getPcdBuildDefinition().getPcdDataList().size();\r
296 }\r
297 \r
298 public void getPcdData(String key, String[][] saa) {\r
299 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
300 if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
301 return;\r
302 }\r
303 ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData>li = msa.getPcdBuildDefinition().getPcdDataList().listIterator();\r
304 for (int i = 0; i < saa.length; ++i) {\r
305 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = li.next();\r
306 saa[i][0] = pcdData.getCName();\r
307 saa[i][1] = pcdData.getTokenSpaceGuidCName();\r
82961247 308 saa[i][2] = pcdData.getItemType()+"";\r
a13899c5 309 saa[i][3] = pcdData.getToken().toString();\r
82961247 310 saa[i][4] = pcdData.getMaxDatumSize()+"";\r
311 saa[i][5] = pcdData.getDatumType()+"";\r
312 saa[i][6] = pcdData.getValue();\r
a13899c5 313 \r
314 }\r
315 }\r
908b1c05 316 \r
317 public void updatePcdData(String key, String cName, String tsGuid, String itemType, String maxSize, String value){\r
318 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
319 if (msa == null || msa.getPcdBuildDefinition() == null){\r
320 return;\r
321 }\r
322 \r
323 XmlCursor cursor = msa.getPcdBuildDefinition().newCursor();\r
324 if (cursor.toFirstChild()){\r
325 do {\r
326 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
327 if (pcdData.getCName().equals(cName) && pcdData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
328 pcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
329 if(pcdData.getDatumType().equals("VOID*")) {\r
330 pcdData.setMaxDatumSize(new Integer(maxSize));\r
331 }\r
332 pcdData.setValue(value);\r
333 break;\r
334 }\r
335 }\r
336 while(cursor.toNextSibling());\r
337 }\r
338 cursor.dispose();\r
339 }\r
340 \r
341 /**Get original Pcd info from MSA & SPD files.\r
342 * @param mi ModuleIdentification from which MSA & SPD come\r
343 * @param cName PCD cName\r
344 * @param sa Results: HelpText, Original item type.\r
345 * @return\r
346 */\r
347 public boolean getPcdBuildDataInfo(ModuleIdentification mi, String cName, String[] sa) throws Exception{\r
348 try {\r
349 \r
350 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(mi);\r
351 if (msa.getPcdCoded() == null) {\r
352 return false;\r
353 }\r
354 \r
355 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
356 m.put("ModuleSurfaceArea", msa);\r
357 SurfaceAreaQuery.setDoc(m);\r
358 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null);\r
359 //\r
360 // First look through MSA pcd entries.\r
361 //\r
362 List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
363 ListIterator li = l.listIterator();\r
364 while(li.hasNext()) {\r
365 PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
366 if (!msaPcd.getCName().equals(cName)) {\r
367 continue;\r
368 }\r
369 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
370 if (spdPcd == null) {\r
371 //\r
372 // ToDo Error \r
373 //\r
374 throw new PcdDeclNotFound(mi.getName() + " " + msaPcd.getCName());\r
375 }\r
376 //\r
377 // Get Pcd help text and original item type.\r
378 //\r
379 sa[0] = spdPcd.getHelpText() + msaPcd.getHelpText();\r
380 sa[1] = msaPcd.getPcdItemType()+"";\r
381 return true;\r
382 }\r
383 \r
384 \r
385 }\r
386 catch (Exception e){\r
af25df16 387// e.printStackTrace();\r
908b1c05 388 throw e;\r
389 }\r
390 \r
391 return false;\r
392 }\r
393 \r
394 /**Remove PCDBuildDefinition entries from ModuleSA\r
395 * @param moduleKey identifier of ModuleSA.\r
396 * @param consumer where these entries come from.\r
397 */\r
398 public void removePcdData(String moduleKey, ModuleIdentification consumer) {\r
399 try {\r
400 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(consumer);\r
401 if (msa.getPcdCoded() == null) {\r
402 return;\r
403 }\r
404 \r
405 List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
406 ListIterator li = l.listIterator();\r
407 \r
408 while(li.hasNext()) {\r
409 PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
410 ModuleSADocument.ModuleSA moduleSA = getModuleSA(moduleKey);\r
411 XmlCursor cursor = moduleSA.getPcdBuildDefinition().newCursor();\r
412 if (cursor.toFirstChild()) {\r
413 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
414 if (msaPcd.getCName().equals(pcdData.getCName()) && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) {\r
415 \r
416 maintainDynPcdMap(pcdData.getCName()+" "+pcdData.getTokenSpaceGuidCName(), moduleKey);\r
417 cursor.removeXml();\r
418 break;\r
419 }\r
420 while (cursor.toNextSibling()) {\r
421 pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
422 if (msaPcd.getCName().equals(pcdData.getCName()) && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) {\r
423 maintainDynPcdMap(pcdData.getCName()+" "+pcdData.getTokenSpaceGuidCName(), moduleKey);\r
424 cursor.removeXml();\r
425 break;\r
426 }\r
427 }\r
428 }\r
429 cursor.dispose();\r
430 }\r
431 \r
432 }\r
433 catch (Exception e){\r
434 e.printStackTrace();\r
435 \r
436 }\r
437 }\r
a13899c5 438 //\r
439 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer"\r
440 //\r
441 public int getLibraryInstancesCount(String key) {\r
442 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
443 if (msa == null || msa.getLibraries() == null || msa.getLibraries().getInstanceList() == null){\r
444 return 0;\r
445 }\r
446 return msa.getLibraries().getInstanceList().size();\r
447 }\r
448 \r
449 public void getLibraryInstances(String key, String[][] saa){\r
450 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
451 if (msa == null || msa.getLibraries() == null || msa.getLibraries().getInstanceList() == null){\r
452 return ;\r
453 }\r
454 \r
455 ListIterator<LibrariesDocument.Libraries.Instance> li = msa.getLibraries().getInstanceList().listIterator();\r
456 for (int i = 0; i < saa.length; ++i) {\r
457 LibrariesDocument.Libraries.Instance instance = li.next();\r
458 saa[i][1] = instance.getModuleGuid();\r
459 saa[i][2] = instance.getModuleVersion();\r
460 saa[i][3] = instance.getPackageGuid();\r
461 saa[i][4] = instance.getPackageVersion();\r
462 }\r
463 }\r
464 \r
908b1c05 465 public void removeLibraryInstance(String key, int i) {\r
a13899c5 466 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
467 if (msa == null || msa.getLibraries() == null){\r
468 return ;\r
469 }\r
470 \r
471 XmlCursor cursor = msa.getLibraries().newCursor();\r
908b1c05 472 if (cursor.toFirstChild()) {\r
473 for (int j = 0; j < i; ++j) {\r
474 cursor.toNextSibling();\r
475 }\r
476 cursor.removeXml();\r
477 }\r
478 \r
a13899c5 479 cursor.dispose();\r
480 }\r
481 \r
482 public void genLibraryInstance(String mg, String mv, String pg, String pv, String key) {\r
483 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
484 if (msa == null){\r
485 msa = getfpdFrameworkModules().addNewModuleSA();\r
486 }\r
487 LibrariesDocument.Libraries libs = msa.getLibraries();\r
488 if(libs == null){\r
489 libs = msa.addNewLibraries();\r
490 }\r
491 \r
492 LibrariesDocument.Libraries.Instance instance = libs.addNewInstance();\r
493 instance.setModuleGuid(mg);\r
494 instance.setModuleVersion(mv);\r
495 instance.setPackageGuid(pg);\r
496 instance.setPackageVersion(pv);\r
497 \r
498 }\r
1800d80f 499 \r
500 public String getFvBinding(String moduleKey){\r
501 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
502 if (msa == null || msa.getModuleSaBuildOptions() == null) {\r
503 return null;\r
504 }\r
505 return msa.getModuleSaBuildOptions().getFvBinding();\r
506 }\r
507 \r
508 public void setFvBinding(String moduleKey, String fvBinding){\r
509 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
510 if (msa == null ) {\r
511 return;\r
512 }\r
513 if(msa.getModuleSaBuildOptions() == null){\r
514 msa.addNewModuleSaBuildOptions().setFvBinding(fvBinding);\r
515 return;\r
516 }\r
517 msa.getModuleSaBuildOptions().setFvBinding(fvBinding);\r
518 }\r
519 \r
520 public String getFfsFileNameGuid(String moduleKey){\r
521 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
522 if (msa == null || msa.getModuleSaBuildOptions() == null) {\r
523 return null;\r
524 }\r
525 return msa.getModuleSaBuildOptions().getFfsFileNameGuid();\r
526 }\r
527 \r
528 public void setFfsFileNameGuid(String moduleKey, String fileGuid){\r
529 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
530 if (msa == null ) {\r
531 return;\r
532 }\r
533 if(msa.getModuleSaBuildOptions() == null){\r
534 msa.addNewModuleSaBuildOptions().setFfsFileNameGuid(fileGuid);\r
535 return;\r
536 }\r
537 msa.getModuleSaBuildOptions().setFfsFileNameGuid(fileGuid);\r
538 }\r
539 \r
540 public String getFfsFormatKey(String moduleKey){\r
541 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
542 if (msa == null || msa.getModuleSaBuildOptions() == null) {\r
543 return null;\r
544 }\r
545 return msa.getModuleSaBuildOptions().getFfsFormatKey();\r
546 }\r
547 \r
548 public void setFfsFormatKey(String moduleKey, String ffsKey){\r
549 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
550 if (msa == null ) {\r
551 return;\r
552 }\r
553 if(msa.getModuleSaBuildOptions() == null){\r
554 msa.addNewModuleSaBuildOptions().setFfsFormatKey(ffsKey);\r
555 return;\r
556 }\r
557 msa.getModuleSaBuildOptions().setFvBinding(ffsKey);\r
558 }\r
559 \r
560 public void getModuleSAOptions(String moduleKey, String[][] saa) {\r
561 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
562 if (msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null\r
563 || msa.getModuleSaBuildOptions().getOptions().getOptionList() == null) {\r
564 return ;\r
565 }\r
566 \r
567 List<OptionDocument.Option> lOpt = msa.getModuleSaBuildOptions().getOptions().getOptionList();\r
568 ListIterator li = lOpt.listIterator();\r
569 int i = 0;\r
570 while(li.hasNext()) {\r
571 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
572 if (opt.getBuildTargets() != null) {\r
573 saa[i][0] = listToString(opt.getBuildTargets());\r
574 }\r
575 saa[i][1] = opt.getToolChainFamily();\r
576 if (opt.getSupArchList() != null){\r
577 saa[i][2] = listToString(opt.getSupArchList());\r
578\r
579 }\r
580 saa[i][3] = opt.getToolCode();\r
581 saa[i][4] = opt.getTagName();\r
582 saa[i][5] = opt.getStringValue();\r
583 \r
584 ++i;\r
585 }\r
586 }\r
587 \r
588 public int getModuleSAOptionsCount(String moduleKey){\r
589 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
590 if (msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null\r
591 || msa.getModuleSaBuildOptions().getOptions().getOptionList() == null) {\r
592 return 0;\r
593 }\r
594 return msa.getModuleSaBuildOptions().getOptions().getOptionList().size();\r
595 }\r
596 \r
597 public void genModuleSAOptionsOpt(String moduleKey, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
598 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
599 if (msa.getModuleSaBuildOptions() == null) {\r
600 msa.addNewModuleSaBuildOptions();\r
601 }\r
602 if (msa.getModuleSaBuildOptions().getOptions() == null){\r
603 msa.getModuleSaBuildOptions().addNewOptions();\r
604 }\r
605 OptionDocument.Option opt = msa.getModuleSaBuildOptions().getOptions().addNewOption();\r
606 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
607 }\r
608 \r
609 public void removeModuleSAOptionsOpt(String moduleKey, int i) {\r
610 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
611 if (msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null) {\r
612 return ;\r
613 }\r
614 OptionsDocument.Options opts = msa.getModuleSaBuildOptions().getOptions();\r
615 XmlCursor cursor = opts.newCursor();\r
616 if (cursor.toFirstChild()) {\r
617 for (int j = 0; j < i; ++j){\r
618 cursor.toNextSibling();\r
619 }\r
620 cursor.removeXml();\r
621 }\r
622 cursor.dispose();\r
623 }\r
624 \r
625 public void updateModuleSAOptionsOpt(String moduleKey, int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
626 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
627 if (msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null) {\r
628 return ;\r
629 }\r
630 OptionsDocument.Options opts = msa.getModuleSaBuildOptions().getOptions();\r
631 XmlCursor cursor = opts.newCursor();\r
632 if (cursor.toFirstChild()) {\r
633 for (int j = 0; j < i; ++j){\r
634 cursor.toNextSibling();\r
635 }\r
636 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
637 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
638 }\r
639 cursor.dispose();\r
640 }\r
641 \r
a13899c5 642 /**add pcd information of module mi to a ModuleSA. \r
643 * @param mi\r
644 * @param moduleSa if null, generate a new ModuleSA.\r
645 */\r
82961247 646 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi, ModuleSADocument.ModuleSA moduleSa) throws Exception {\r
a13899c5 647 //ToDo add Arch filter\r
648 \r
649 try {\r
af25df16 650 if (moduleSa == null) {\r
651 moduleSa = genModuleSA(mi);\r
652 }\r
653 \r
a13899c5 654 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(mi);\r
655 if (msa.getPcdCoded() == null) {\r
656 return;\r
657 }\r
af25df16 658 \r
a13899c5 659 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
660 m.put("ModuleSurfaceArea", msa);\r
661 SurfaceAreaQuery.setDoc(m);\r
662 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null);\r
663 //\r
664 // Implementing InitializePlatformPcdBuildDefinitions\r
665 //\r
666 List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
667 ListIterator li = l.listIterator();\r
668 while(li.hasNext()) {\r
669 PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
670 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
671 if (spdPcd == null) {\r
672 //\r
673 // ToDo Error \r
674 //\r
82961247 675 throw new PcdDeclNotFound(mi.getName() + " " + msaPcd.getCName());\r
a13899c5 676 }\r
677 //\r
678 // AddItem to ModuleSA PcdBuildDefinitions\r
679 //\r
680 String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
908b1c05 681 \r
a13899c5 682 genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType().toString(), spdPcd.getDatumType()+"", defaultVal, moduleSa);\r
683 }\r
684 \r
685 }\r
686 catch (Exception e){\r
af25df16 687// e.printStackTrace();\r
82961247 688 throw e; \r
a13899c5 689 }\r
690 \r
691 }\r
692 \r
693 private PcdDeclarationsDocument.PcdDeclarations.PcdEntry LookupPcdDeclaration (PcdCodedDocument.PcdCoded.PcdEntry msaPcd, PackageIdentification[] depPkgs) {\r
694 \r
695 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
696 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = null;\r
697 for (int i = 0; i < depPkgs.length; ++i) {\r
698 m.put("PackageSurfaceArea", GlobalData.getPackageXmlObject(depPkgs[i]));\r
699 SurfaceAreaQuery.setDoc(m);\r
700 XmlObject[] xo = SurfaceAreaQuery.getSpdPcdDeclarations();\r
701 if (xo == null) {\r
702 continue;\r
703 }\r
704 for (int j = 0; j < xo.length; ++j) {\r
705 spdPcd = (PcdDeclarationsDocument.PcdDeclarations.PcdEntry)xo[j];\r
706 if (msaPcd.getTokenSpaceGuidCName() == null) {\r
707 if (spdPcd.getCName().equals(msaPcd.getCName())) {\r
708 return spdPcd;\r
709 }\r
710 }\r
711 else{\r
712 if (spdPcd.getCName().equals(msaPcd.getCName()) && spdPcd.getTokenSpaceGuidCName().equals(msaPcd.getTokenSpaceGuidCName())) {\r
713 return spdPcd;\r
714 }\r
715 }\r
716 \r
717 }\r
718 \r
719 }\r
720 return null;\r
721 }\r
722 \r
723 private ModuleSADocument.ModuleSA genModuleSA (ModuleIdentification mi) {\r
724 PackageIdentification pi = GlobalData.getPackageForModule(mi);\r
725 ModuleSADocument.ModuleSA msa = getfpdFrameworkModules().addNewModuleSA();\r
726 msa.setModuleGuid(mi.getGuid());\r
727 msa.setModuleVersion(mi.getVersion());\r
728 msa.setPackageGuid(pi.getGuid());\r
729 msa.setPackageVersion(pi.getVersion());\r
730 \r
731 return msa;\r
732 }\r
733 \r
82961247 734 private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, ModuleSADocument.ModuleSA moduleSa) \r
735 throws PcdItemTypeConflictException, PcdValueMalFormed{\r
a13899c5 736 if (moduleSa.getPcdBuildDefinition() == null){\r
737 moduleSa.addNewPcdBuildDefinition();\r
738 }\r
739 //\r
740 // constructe pcd to modulesa mapping first.\r
741 // Attention : for any error condition, remove from map this pcd.\r
742 //\r
743 ArrayList<String> pcdConsumer = LookupPlatformPcdData(cName + " " + tsGuid);\r
744 if (pcdConsumer == null) {\r
745 pcdConsumer = new ArrayList<String>();\r
746 }\r
747 String listValue = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() \r
748 + " " + moduleSa.getPackageGuid() + " " + moduleSa.getPackageVersion() \r
749 + " " + itemType;\r
750 pcdConsumer.add(listValue);\r
751 dynPcdMap.put(cName + " " + tsGuid, pcdConsumer);\r
752 //\r
753 // Special dynamic type, if this pcd already exists in other ModuleSA\r
754 //\r
755 if (itemType.equals("DYNAMIC")) {\r
756 \r
757 ListIterator li = pcdConsumer.listIterator();\r
758 while(li.hasNext()) {\r
759 String value = li.next().toString();\r
760 String[] valuePart= value.split(" ");\r
761 if (!valuePart[4].equals("DYNAMIC")) {\r
762 //ToDo error for same pcd, other type than dynamic\r
763 pcdConsumer.remove(listValue);\r
82961247 764 throw new PcdItemTypeConflictException(value);\r
a13899c5 765 }\r
766 }\r
767 }\r
768 else {\r
769 ListIterator li = pcdConsumer.listIterator();\r
770 while(li.hasNext()) {\r
771 String value = li.next().toString();\r
772 String[] valuePart= value.split(" ");\r
773 if (valuePart[4].equals("DYNAMIC")) {\r
774 //ToDo error for same pcd, other type than non-dynamic\r
775 pcdConsumer.remove(listValue);\r
82961247 776 throw new PcdItemTypeConflictException(value);\r
a13899c5 777 }\r
778 }\r
779 }\r
780 \r
781 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData fpdPcd = moduleSa.getPcdBuildDefinition().addNewPcdData();\r
782 fpdPcd.setCName(cName);\r
783 fpdPcd.setToken(token);\r
784 fpdPcd.setTokenSpaceGuidCName(tsGuid);\r
785 fpdPcd.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
786 fpdPcd.setItemType(PcdItemTypes.Enum.forString(itemType));\r
787 \r
788 if (itemType.equals("DYNAMIC") || itemType.equals("DYNAMIC_EX")) {\r
789 ArrayList<String> al = LookupDynamicPcdBuildDefinition(cName + " " + tsGuid);\r
790 //\r
791 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.\r
792 // so need to add one dyn pcd.\r
793 //\r
794 if (al.size() == 1) {\r
795 addDynamicPcdBuildData(cName, token, tsGuid, itemType, dataType, defaultVal);\r
796 }\r
797 }\r
798 else {\r
799 if (defaultVal != null){\r
800 fpdPcd.setValue(defaultVal);\r
801 }\r
802 else {\r
803 if (dataType.equals("UINT8") || dataType.equals("UINT16") || dataType.equals("UINT32") || dataType.equals("UINT64")) {\r
804 fpdPcd.setValue("0");\r
805 }\r
806 if (dataType.equals("BOOLEAN")){\r
807 fpdPcd.setValue("false");\r
808 }\r
809 if (dataType.equals("VOID*")) {\r
810 fpdPcd.setValue("");\r
811 }\r
812 }\r
813 if (dataType.equals("UINT8")){\r
814 fpdPcd.setMaxDatumSize(1);\r
815 }\r
816 if (dataType.equals("UINT16")) {\r
817 fpdPcd.setMaxDatumSize(2);\r
818 }\r
819 if (dataType.equals("UINT32")) {\r
820 fpdPcd.setMaxDatumSize(4);\r
821 }\r
822 if (dataType.equals("UINT64")){\r
823 fpdPcd.setMaxDatumSize(8);\r
824 }\r
825 if (dataType.equals("BOOLEAN")){\r
826 fpdPcd.setMaxDatumSize(1);\r
827 }\r
828 if (dataType.equals("VOID*")) {\r
829 int maxSize = setMaxSizeForPointer(fpdPcd.getValue());\r
830 fpdPcd.setMaxDatumSize(maxSize);\r
831 }\r
832 }\r
833 }\r
834 \r
908b1c05 835 public int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{\r
a13899c5 836 if (datum == null) {\r
837 return 0;\r
838 }\r
839 char ch = datum.charAt(0);\r
840 int start, end;\r
841 String strValue;\r
842 //\r
843 // For void* type PCD, only three datum is support:\r
844 // 1) Unicode: string with start char is "L"\r
845 // 2) Ansci: String is ""\r
846 // 3) byte array: String start char "{"\r
847 // \r
848 if (ch == 'L') {\r
849 start = datum.indexOf('\"');\r
850 end = datum.lastIndexOf('\"');\r
851 if ((start > end) || \r
852 (end > datum.length())||\r
853 ((start == end) && (datum.length() > 0))) {\r
854 //ToDo Error handling here\r
82961247 855 throw new PcdValueMalFormed (datum);\r
a13899c5 856 }\r
857\r
858 strValue = datum.substring(start + 1, end);\r
859 return strValue.length() * 2;\r
860 } else if (ch == '\"'){\r
861 start = datum.indexOf('\"');\r
862 end = datum.lastIndexOf('\"');\r
863 if ((start > end) || \r
864 (end > datum.length())||\r
865 ((start == end) && (datum.length() > 0))) {\r
82961247 866 throw new PcdValueMalFormed (datum);\r
a13899c5 867 }\r
868 strValue = datum.substring(start + 1, end);\r
869 return strValue.length();\r
870 } else if (ch =='{') {\r
871 String[] strValueArray;\r
872\r
873 start = datum.indexOf('{');\r
874 end = datum.lastIndexOf('}');\r
875 strValue = datum.substring(start + 1, end);\r
876 strValue = strValue.trim();\r
877 if (strValue.length() == 0) {\r
878 return 0;\r
879 }\r
880 strValueArray = strValue.split(",");\r
881 for (int index = 0; index < strValueArray.length; index ++) {\r
882 Integer value = Integer.decode(strValueArray[index].trim());\r
883 \r
884 if (value > 0xFF) {\r
885// "[FPD file error] The datum type of PCD %s in %s is VOID*, "+\r
886// "it is byte array in fact. But the element of %s exceed the byte range",\r
82961247 887 throw new PcdValueMalFormed (datum); \r
a13899c5 888 }\r
889 }\r
890 return strValueArray.length;\r
891\r
892\r
893 } else {\r
894// "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+\r
895// "1) UNICODE string: like L\"xxxx\";\r\n"+\r
896// "2) ANSIC string: like \"xxx\";\r\n"+\r
897// "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+\r
898// "but the datum in seems does not following above format!",\r
82961247 899 throw new PcdValueMalFormed (datum);\r
a13899c5 900 \r
901 }\r
902 }\r
903 \r
904 private ArrayList<String> LookupDynamicPcdBuildDefinition(String dynPcdKey) {\r
905 ArrayList<String> al = dynPcdMap.get(dynPcdKey);\r
906 \r
907 return al;\r
908 }\r
909 \r
910 private ArrayList<String> LookupPlatformPcdData(String pcdKey) {\r
911 \r
912 return dynPcdMap.get("pcdKey");\r
913 }\r
914 \r
915 public int getDynamicPcdBuildDataCount() {\r
916 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
917 return 0;\r
918 }\r
919 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();\r
920 }\r
921 \r
922 public void getDynamicPcdBuildData(String[][] saa) {\r
923 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
924 return ;\r
925 }\r
926 List<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> l = getfpdDynPcdBuildDefs().getPcdBuildDataList();\r
927 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> li = l.listIterator();\r
928 int i = 0;\r
929 while(li.hasNext()) {\r
930 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcd = li.next();\r
931 saa[i][0] = dynPcd.getCName();\r
932 saa[i][1] = dynPcd.getToken().toString();\r
933 saa[i][2] = dynPcd.getTokenSpaceGuidCName();\r
934 saa[i][3] = dynPcd.getMaxDatumSize()+"";\r
935 saa[i][4] = dynPcd.getDatumType().toString();\r
936 \r
937 ++i;\r
938 }\r
939 }\r
940 \r
908b1c05 941 public void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) \r
82961247 942 throws PcdValueMalFormed{\r
a13899c5 943 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcdData = getfpdDynPcdBuildDefs().addNewPcdBuildData();\r
944 dynPcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
945 dynPcdData.setCName(cName);\r
946 dynPcdData.setToken(token);\r
947 dynPcdData.setTokenSpaceGuidCName(tsGuid);\r
948 dynPcdData.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
949 \r
950 BigInteger bigInt = new BigInteger("0");\r
951 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = dynPcdData.addNewSkuInfo();\r
952 skuInfo.setSkuId(bigInt);\r
953 if (defaultVal != null){\r
954 skuInfo.setValue(defaultVal);\r
955 }\r
956 else {\r
957 if (dataType.equals("UINT8")){\r
958 skuInfo.setValue("0");\r
959 }\r
960 if (dataType.equals("UINT16")) {\r
961 skuInfo.setValue("0");\r
962 }\r
963 if (dataType.equals("UINT32")) {\r
964 skuInfo.setValue("0");\r
965 }\r
966 if (dataType.equals("UINT64")){\r
967 skuInfo.setValue("0");\r
968 }\r
969 if (dataType.equals("BOOLEAN")){\r
970 skuInfo.setValue("false");\r
971 }\r
972 if (dataType.equals("VOID*")) {\r
973 skuInfo.setValue("");\r
974 }\r
975 }\r
976 if (dataType.equals("UINT8")){\r
977 dynPcdData.setMaxDatumSize(1);\r
978 }\r
979 if (dataType.equals("UINT16")) {\r
980 dynPcdData.setMaxDatumSize(2);\r
981 }\r
982 if (dataType.equals("UINT32")) {\r
983 dynPcdData.setMaxDatumSize(4);\r
984 }\r
985 if (dataType.equals("UINT64")){\r
986 dynPcdData.setMaxDatumSize(8);\r
987 }\r
988 if (dataType.equals("BOOLEAN")){\r
989 dynPcdData.setMaxDatumSize(1);\r
990 }\r
991 if (dataType.equals("VOID*")) {\r
992 int maxSize = setMaxSizeForPointer(defaultVal);\r
993 dynPcdData.setMaxDatumSize(maxSize);\r
994 }\r
995 }\r
996 \r
908b1c05 997 public void removeDynamicPcdBuildData(String cName, String tsGuid) {\r
a13899c5 998 XmlObject o = getfpdDynPcdBuildDefs();\r
999 \r
1000 XmlCursor cursor = o.newCursor();\r
1001 if (cursor.toFirstChild()) {\r
af25df16 1002 do {\r
1003 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = \r
1004 (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
908b1c05 1005 if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
1006 cursor.removeXml();\r
af25df16 1007 if (getDynamicPcdBuildDataCount() == 0) {\r
1008 cursor.toParent();\r
1009 cursor.removeXml();\r
1010 }\r
908b1c05 1011 cursor.dispose();\r
1012 return;\r
1013 }\r
a13899c5 1014 }\r
af25df16 1015 while (cursor.toNextSibling());\r
a13899c5 1016 }\r
1017 cursor.dispose();\r
1018 }\r
1019 //\r
1020 // Get the Sku Info count of ith dyn pcd element.\r
1021 //\r
1022 public int getDynamicPcdSkuInfoCount(int i){\r
1023 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1024 return 0;\r
1025 }\r
1026 \r
1027 int skuInfoCount = 0;\r
1028 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1029 if (cursor.toFirstChild()) {\r
1030 for (int j = 0; j < i; ++j) {\r
1031 cursor.toNextSibling();\r
1032 }\r
1033 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1034 if (pcdData.getSkuInfoList() == null) {\r
1035 skuInfoCount = 0;\r
1036 }\r
1037 else {\r
1038 skuInfoCount = pcdData.getSkuInfoList().size();\r
1039 }\r
1040 }\r
1041 cursor.dispose();\r
1042 return skuInfoCount;\r
1043 }\r
1044 \r
1045 public void getDynamicPcdSkuInfos(int i, String[][] saa){\r
1046 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1047 return;\r
1048 }\r
1049 \r
1050 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1051 if (cursor.toFirstChild()) {\r
1052 for (int j = 0; j < i; ++j) {\r
1053 cursor.toNextSibling();\r
1054 }\r
1055 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1056 if (pcdData.getSkuInfoList() == null) {\r
1057 cursor.dispose();\r
1058 return;\r
1059 }\r
1060 else {\r
1061 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1062 int k = 0;\r
1063 while (li.hasNext()) {\r
1064 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1065 saa[k][0] = skuInfo.getSkuId()+"";\r
1066 saa[k][1] = skuInfo.getVariableName();\r
1067 saa[k][2] = skuInfo.getVariableGuid();\r
1068 saa[k][3] = skuInfo.getVariableOffset();\r
1069 saa[k][4] = skuInfo.getHiiDefaultValue();\r
1070 saa[k][5] = skuInfo.getVpdOffset();\r
1071 saa[k][6] = skuInfo.getValue();\r
1072 ++k;\r
1073 }\r
1074 \r
1075 }\r
1076 }\r
1077 cursor.dispose();\r
1078 \r
1079 }\r
1080 \r
1081 public String getDynamicPcdBuildDataValue(int i){\r
1082 String value = null;\r
1083 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1084 return value;\r
1085 }\r
1086 \r
1087 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1088 if (cursor.toFirstChild()) {\r
1089 for (int j = 0; j < i; ++j) {\r
1090 cursor.toNextSibling();\r
1091 }\r
1092 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1093 if (pcdData.getSkuInfoList() == null) {\r
1094 value = null;\r
1095 }\r
1096 else {\r
1097 value = pcdData.getSkuInfoArray(0).getValue();\r
1098 }\r
1099 }\r
1100 cursor.dispose();\r
1101 return value;\r
1102 }\r
1103 \r
1104 public String getDynamicPcdBuildDataVpdOffset(int i){\r
1105 String vpdOffset = null;\r
1106 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1107 return vpdOffset;\r
1108 }\r
1109 \r
1110 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1111 if (cursor.toFirstChild()) {\r
1112 for (int j = 0; j < i; ++j) {\r
1113 cursor.toNextSibling();\r
1114 }\r
1115 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1116 if (pcdData.getSkuInfoList() == null) {\r
1117 vpdOffset = null;\r
1118 }\r
1119 else {\r
1120 vpdOffset = pcdData.getSkuInfoArray(0).getVpdOffset();\r
1121 }\r
1122 }\r
1123 cursor.dispose();\r
1124 return vpdOffset;\r
1125 }\r
1126 \r
1127 public void removeDynamicPcdBuildDataSkuInfo(int i) {\r
1128 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1129 return;\r
1130 }\r
1131 \r
1132 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1133 if (cursor.toFirstChild()) {\r
1134 for (int j = 0; j < i; ++j) {\r
1135 cursor.toNextSibling();\r
1136 }\r
1137 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1138 if (pcdData.getSkuInfoList() == null) {\r
1139 cursor.dispose();\r
1140 return;\r
1141 }\r
1142 else {\r
1143 QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
1144 cursor.toChild(qSkuInfo);\r
1145 cursor.removeXml();\r
1146 }\r
1147 }\r
1148 cursor.dispose();\r
1149 }\r
1150 //\r
1151 // generate sku info for ith dyn pcd build data.\r
1152 //\r
1153 public void genDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1154 String hiiDefault, String vpdOffset, String value, int i) {\r
1155 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1156 return;\r
1157 }\r
1158 \r
1159 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1160 if (cursor.toFirstChild()) {\r
1161 for (int j = 0; j < i; ++j) {\r
1162 cursor.toNextSibling();\r
1163 }\r
1164 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1165 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = pcdData.addNewSkuInfo();\r
1166 skuInfo.setSkuId(new BigInteger(id));\r
1167 if (varName != null){\r
1168 skuInfo.setVariableName(varName);\r
1169 skuInfo.setVariableGuid(varGuid);\r
1170 skuInfo.setVariableOffset(varOffset);\r
1171 skuInfo.setHiiDefaultValue(hiiDefault);\r
1172 }\r
1173 else if (vpdOffset != null){\r
1174 skuInfo.setVpdOffset(vpdOffset);\r
1175 }\r
1176 else{\r
1177 skuInfo.setValue(value);\r
1178 }\r
1179 }\r
1180 }\r
1181 \r
1182 public void updateDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1183 String hiiDefault, String vpdOffset, String value, int i){\r
1184 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1185 return;\r
1186 }\r
1187 \r
1188 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1189 if (cursor.toFirstChild()) {\r
1190 for (int j = 0; j < i; ++j) {\r
1191 cursor.toNextSibling();\r
1192 }\r
1193 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1194 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1195 while (li.hasNext()) {\r
1196 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1197 if (skuInfo.getSkuId().toString().equals(id)){\r
1198 if (varName != null){\r
1199 skuInfo.setVariableName(varName);\r
1200 skuInfo.setVariableGuid(varGuid);\r
1201 skuInfo.setVariableOffset(varOffset);\r
1202 skuInfo.setHiiDefaultValue(hiiDefault);\r
1203 }\r
1204 else if (vpdOffset != null){\r
1205 skuInfo.setVpdOffset(vpdOffset);\r
1206 }\r
1207 else{\r
1208 skuInfo.setValue(value);\r
1209 }\r
1210 break;\r
1211 }\r
1212 }\r
1213 }\r
1214 }\r
1215 \r
a13899c5 1216 public BuildOptionsDocument.BuildOptions getfpdBuildOpts() {\r
1217 if (fpdBuildOpts == null) {\r
1218 fpdBuildOpts = fpdRoot.addNewBuildOptions();\r
1219 }\r
1220 return fpdBuildOpts;\r
1221 }\r
1222 \r
1223 public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
1224 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1225 if (udats == null) {\r
1226 udats = getfpdBuildOpts().addNewUserDefinedAntTasks();\r
1227 }\r
1228 \r
1229 AntTaskDocument.AntTask at = udats.addNewAntTask();\r
1230 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
1231 }\r
1232 \r
1233 private void setBuildOptionsUserDefAntTask(String id, String fileName, String execOrder, AntTaskDocument.AntTask at) {\r
1234 at.setId(new Integer(id));\r
1235 if (fileName != null){\r
1236 at.setFilename(fileName);\r
1237 }\r
202c4f38 1238 if (execOrder != null) {\r
a13899c5 1239 at.setAntCmdOptions(execOrder);\r
1240 }\r
1241 }\r
1242 \r
1243 public void removeBuildOptionsUserDefAntTask(int i) {\r
1244 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1245 if (o == null) {\r
1246 return;\r
1247 }\r
1248 XmlCursor cursor = o.newCursor();\r
1249 if (cursor.toFirstChild()) {\r
1250 for (int j = 0; j < i; ++j) {\r
1251 cursor.toNextSibling();\r
1252 }\r
1253 cursor.removeXml();\r
af25df16 1254 if (getBuildOptionsUserDefAntTaskCount() == 0) {\r
1255 cursor.toParent();\r
1256 cursor.removeXml();\r
1257 }\r
a13899c5 1258 }\r
1259 cursor.dispose();\r
1260 }\r
1261 \r
1262 public void updateBuildOptionsUserDefAntTask(int i, String id, String fileName, String execOrder){\r
1263 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1264 if (o == null) {\r
1265 return;\r
1266 }\r
1267 XmlCursor cursor = o.newCursor();\r
1268 if (cursor.toFirstChild()) {\r
1269 for (int j = 0; j < i; ++j) {\r
1270 cursor.toNextSibling();\r
1271 }\r
1272 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)cursor.getObject();\r
1273 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
1274 }\r
1275 cursor.dispose();\r
1276 }\r
1277 \r
1278 public int getBuildOptionsUserDefAntTaskCount() {\r
1279 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1280 if (udats == null || udats.getAntTaskList() == null) {\r
1281 return 0;\r
1282 }\r
1283 \r
1284 return udats.getAntTaskList().size();\r
1285 }\r
1286 \r
1287 public void getBuildOptionsUserDefAntTasks(String[][] saa) {\r
1288 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1289 if (udats == null || udats.getAntTaskList() == null) {\r
1290 return ;\r
1291 }\r
1292 \r
1293 List<AntTaskDocument.AntTask> l = udats.getAntTaskList();\r
1294 ListIterator li = l.listIterator();\r
1295 int i = 0;\r
1296 while (li.hasNext()) {\r
1297 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)li.next();\r
1298 saa[i][0] = at.getId() + "";\r
1299 saa[i][1] = saa[i][2] = "";\r
1300 if (at.getFilename() != null){\r
1301 saa[i][1] = at.getFilename();\r
1302 }\r
1303 if (at.getAntCmdOptions() != null) {\r
1304 saa[i][2] = at.getAntCmdOptions();\r
1305 }\r
1306 ++i;\r
1307 }\r
1308 }\r
1800d80f 1309 public void genBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 1310 OptionsDocument.Options opts = getfpdBuildOpts().getOptions();\r
1311 if (opts == null) {\r
1312 opts = getfpdBuildOpts().addNewOptions();\r
1313 }\r
1314 OptionDocument.Option opt = opts.addNewOption();\r
1315 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1316 }\r
1317 \r
1800d80f 1318 private void setBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents, OptionDocument.Option opt){\r
a13899c5 1319 opt.setStringValue(contents);\r
1800d80f 1320 \r
1321 opt.setBuildTargets(buildTargets);\r
a13899c5 1322 opt.setToolChainFamily(toolChain);\r
1323 opt.setTagName(tagName);\r
1324 opt.setToolCode(toolCmd);\r
1800d80f 1325 \r
1326 opt.setSupArchList(archList);\r
a13899c5 1327 }\r
1328 \r
1329 public void removeBuildOptionsOpt(int i){\r
1330 \r
1331 XmlObject o = getfpdBuildOpts().getOptions();\r
1332 if (o == null) {\r
1333 return;\r
1334 }\r
1335 \r
1336 XmlCursor cursor = o.newCursor();\r
1337 if (cursor.toFirstChild()) {\r
1338 for (int j = 0; j < i; ++j) {\r
1339 cursor.toNextSibling();\r
1340 }\r
1341 cursor.removeXml();\r
af25df16 1342 if (getBuildOptionsOptCount() == 0) {\r
1343 cursor.toParent();\r
1344 cursor.removeXml();\r
1345 }\r
a13899c5 1346 }\r
1347 cursor.dispose();\r
1348 }\r
1349 \r
1800d80f 1350 public void updateBuildOptionsOpt(int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 1351 XmlObject o = getfpdBuildOpts().getOptions();\r
1352 if (o == null) {\r
1353 return;\r
1354 }\r
1355 \r
1356 XmlCursor cursor = o.newCursor();\r
1357 if (cursor.toFirstChild()) {\r
1358 for (int j = 0; j < i; ++j) {\r
1359 cursor.toNextSibling();\r
1360 }\r
1361 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
1362 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1363 }\r
1364 cursor.dispose();\r
1365 }\r
1366 \r
1367 public int getBuildOptionsOptCount(){\r
1368 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1369 return 0;\r
1370 }\r
1371 return getfpdBuildOpts().getOptions().getOptionList().size();\r
1372 }\r
1373 \r
1374 public void getBuildOptionsOpts(String[][] saa) {\r
1375 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1376 return ;\r
1377 }\r
1378 \r
1379 List<OptionDocument.Option> lOpt = getfpdBuildOpts().getOptions().getOptionList();\r
1380 ListIterator li = lOpt.listIterator();\r
1381 int i = 0;\r
1382 while(li.hasNext()) {\r
1383 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
6cba26e8 1384 if (opt.getBuildTargets() != null) {\r
1385 saa[i][0] = listToString(opt.getBuildTargets());\r
1386 }\r
a13899c5 1387 saa[i][1] = opt.getToolChainFamily();\r
1388 if (opt.getSupArchList() != null){\r
6cba26e8 1389 saa[i][2] = listToString(opt.getSupArchList());\r
1390\r
a13899c5 1391 }\r
1392 saa[i][3] = opt.getToolCode();\r
1393 saa[i][4] = opt.getTagName();\r
1394 saa[i][5] = opt.getStringValue();\r
1395 \r
1396 ++i;\r
1397 }\r
1398 }\r
1399 \r
6cba26e8 1400 public void genBuildOptionsFfs(String ffsKey, String type) {\r
1401 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
1402 ffs.setFfsKey(ffsKey);\r
1403 if (type != null) {\r
1404 ffs.addNewSections().setEncapsulationType(type);\r
1405 }\r
1406 }\r
1407 \r
3b405e9b 1408 public void updateBuildOptionsFfsSectionsType(int i, String type) {\r
1409 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
1410 if (type != null) {\r
1411 ffs.addNewSections().setEncapsulationType(type);\r
1412 }\r
1413 }\r
1414 \r
6cba26e8 1415 public void genBuildOptionsFfsAttribute(int i, String name, String value) {\r
1416 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1417 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = ffs.addNewAttribute();\r
1418 attrib.setName(name);\r
1419 attrib.setValue(value);\r
1420 }\r
1421 \r
1422 /**update jth attribute of ith ffs.\r
1423 * @param i\r
1424 * @param j\r
1425 */\r
1426 public void updateBuildOptionsFfsAttribute(int i, int j, String name, String value){\r
1427 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1428 XmlCursor cursor = ffs.newCursor();\r
1429 QName qAttrib = new QName(xmlNs, "Attribute");\r
1430 if (cursor.toChild(qAttrib)) {\r
1431 for (int k = 0; k < j; ++k) {\r
1432 cursor.toNextSibling(qAttrib);\r
1433 }\r
1434 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = (BuildOptionsDocument.BuildOptions.Ffs.Attribute)cursor.getObject();\r
1435 attrib.setName(name);\r
1436 attrib.setValue(value);\r
1437 }\r
1438 cursor.dispose();\r
1439 }\r
1440 \r
1441 public void removeBuildOptionsFfsAttribute(int i, int j){\r
1442 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1443 XmlCursor cursor = ffs.newCursor();\r
1444 QName qAttrib = new QName(xmlNs, "Attribute");\r
1445 if (cursor.toChild(qAttrib)) {\r
1446 for (int k = 0; k < j; ++k) {\r
1447 cursor.toNextSibling(qAttrib);\r
1448 }\r
1449 cursor.removeXml();\r
1450 }\r
1451 cursor.dispose();\r
1452 }\r
1453 \r
1454 public void genBuildOptionsFfsSectionsSection(int i, String sectionType) {\r
1455 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1456 if (ffs == null) {\r
1457 return;\r
1458 }\r
1459 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1460 \r
1461 if (sections == null){\r
1462 sections = ffs.addNewSections();\r
1463 }\r
1464 sections.addNewSection().setSectionType(EfiSectionType.Enum.forString(sectionType));\r
1465 }\r
1466 \r
3b405e9b 1467 public void removeBuildOptionsFfsSectionsSection(int i, int j) {\r
1468 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1469 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1470 if (sections == null) {\r
1471 return;\r
1472 }\r
1473 XmlCursor cursor = sections.newCursor();\r
1474 QName qSection = new QName(xmlNs, "Section");\r
1475 if (cursor.toChild(qSection)) {\r
1476 for (int k = 0; k < j; ++k) {\r
1477 cursor.toNextSibling(qSection);\r
1478 }\r
1479 cursor.removeXml();\r
1480 }\r
1481 cursor.dispose();\r
1482 }\r
1483 \r
1484 public void updateBuildOptionsFfsSectionsSection(int i, int j, String type){\r
1485 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1486 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1487 if (sections == null) {\r
1488 return;\r
1489 }\r
1490 XmlCursor cursor = sections.newCursor();\r
1491 QName qSection = new QName(xmlNs, "Section");\r
1492 if (cursor.toChild(qSection)) {\r
1493 for (int k = 0; k < j; ++k) {\r
1494 cursor.toNextSibling(qSection);\r
1495 }\r
1496 BuildOptionsDocument.BuildOptions.Ffs.Sections.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Section)cursor.getObject();\r
1497 section.setSectionType(EfiSectionType.Enum.forString(type));\r
1498 }\r
1499 cursor.dispose();\r
1500 } \r
1501 \r
6cba26e8 1502 public void genBuildOptionsFfsSectionsSections(int i, String encapType) {\r
1503 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1504 if (ffs == null) {\r
1505 return;\r
1506 }\r
1507 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1508 \r
1509 if (sections == null){\r
1510 sections = ffs.addNewSections();\r
1511 }\r
1512 sections.addNewSections().setEncapsulationType(encapType);\r
1513 }\r
1514 \r
3b405e9b 1515 public void removeBuildOptionsFfsSectionsSections(int i, int j) {\r
1516 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1517 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1518 if (sections == null) {\r
1519 return;\r
1520 }\r
1521 XmlCursor cursor = sections.newCursor();\r
1522 QName qSections = new QName(xmlNs, "Sections");\r
1523 if (cursor.toChild(qSections)) {\r
1524 for (int k = 0; k < j; ++k) {\r
1525 cursor.toNextSibling(qSections);\r
1526 }\r
1527 cursor.removeXml();\r
1528 }\r
1529 cursor.dispose();\r
1530 }\r
1531 \r
1532 public void updateBuildOptionsFfsSectionsSections(int i, int j, String type) {\r
1533 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1534 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1535 if (sections == null) {\r
1536 return;\r
1537 }\r
1538 XmlCursor cursor = sections.newCursor();\r
1539 QName qSections = new QName(xmlNs, "Sections");\r
1540 if (cursor.toChild(qSections)) {\r
1541 for (int k = 0; k < j; ++k) {\r
1542 cursor.toNextSibling(qSections);\r
1543 }\r
1544 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1545 sections2.setEncapsulationType(type);\r
1546 }\r
1547 cursor.dispose();\r
1548 }\r
1549 \r
6cba26e8 1550 public void genBuildOptionsFfsSectionsSectionsSection(int i, int j, String type) {\r
1551 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1552 if (ffs == null) {\r
1553 return;\r
1554 }\r
1555 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1556 XmlCursor cursor = sections.newCursor();\r
1557 QName qSections = new QName(xmlNs, "Sections");\r
1558 if (cursor.toChild(qSections)){\r
1559 for (int k = 0; k < j; ++k) {\r
1560 cursor.toNextSibling(qSections);\r
1561 }\r
1562 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1563 sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString(type));\r
1564 }\r
1565 cursor.dispose();\r
1566 }\r
1567 \r
3b405e9b 1568 public void removeBuildOptionsFfsSectionsSectionsSection(int i, int j, int k) {\r
1569 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1570 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1571 if (sections == null) {\r
1572 return;\r
1573 }\r
1574 XmlCursor cursor = sections.newCursor();\r
1575 QName qSections = new QName(xmlNs, "Sections");\r
1576 if (cursor.toChild(qSections)) {\r
1577 for (int l = 0; l < j; ++l) {\r
1578 cursor.toNextSibling(qSections);\r
1579 }\r
1580 if (cursor.toFirstChild()) {\r
af25df16 1581 int m = 0;\r
1582 for (; m < k; ++m) {\r
3b405e9b 1583 cursor.toNextSibling();\r
1584 }\r
1585 cursor.removeXml();\r
af25df16 1586 if (m == 0) {\r
1587 cursor.toParent();\r
1588 cursor.removeXml();\r
1589 }\r
3b405e9b 1590 }\r
1591 }\r
1592 cursor.dispose();\r
1593 }\r
1594 \r
1595 public void updateBuildOptionsFfsSectionsSectionsSection(int i, int j, int k, String type) {\r
1596 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1597 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1598 if (sections == null) {\r
1599 return;\r
1600 }\r
1601 XmlCursor cursor = sections.newCursor();\r
1602 QName qSections = new QName(xmlNs, "Sections");\r
1603 if (cursor.toChild(qSections)) {\r
1604 for (int l = 0; l < j; ++l) {\r
1605 cursor.toNextSibling(qSections);\r
1606 }\r
1607 if (cursor.toFirstChild()) {\r
1608 for (int m = 0; m < k; ++m) {\r
1609 cursor.toNextSibling();\r
1610 }\r
1611 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section)cursor.getObject();\r
1612 section.setSectionType(EfiSectionType.Enum.forString(type));\r
1613 }\r
1614 }\r
1615 cursor.dispose();\r
1616 }\r
1617 \r
6cba26e8 1618 public void getBuildOptionsFfsSectionsSectionsSection(int i, int j, ArrayList<String> al) {\r
1619 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1620 if (ffs == null) {\r
1621 return;\r
1622 }\r
1623 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1624 XmlCursor cursor = sections.newCursor();\r
1625 QName qSections = new QName(xmlNs, "Sections");\r
1626 if (cursor.toChild(qSections)){\r
1627 for (int k = 0; k < j; ++k) {\r
1628 cursor.toNextSibling(qSections);\r
1629 }\r
1630 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1631 if (sections2.getSectionList() == null){\r
1632 cursor.dispose();\r
1633 return;\r
1634 }\r
1635 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section> li = sections2.getSectionList().listIterator();\r
1636 while(li.hasNext()) {\r
1637 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = li.next();\r
3b405e9b 1638 if (section.isSetSectionType()) {\r
1800d80f 1639 al.add(section.getSectionType().toString());\r
1640 }\r
3b405e9b 1641 \r
1642 }\r
6cba26e8 1643 }\r
1644 cursor.dispose();\r
1645 \r
1646 }\r
1647 \r
1648 public int getBuildOptionsFfsCount(){\r
1649 if (getfpdBuildOpts().getFfsList() == null) {\r
1650 return 0;\r
1651 }\r
1652 return getfpdBuildOpts().getFfsList().size();\r
1653 }\r
1654 \r
1655 public void getBuildOptionsFfsKey(String[][] saa) {\r
1656 if (getfpdBuildOpts().getFfsList() == null) {\r
1657 return;\r
1658 }\r
1659 ListIterator<BuildOptionsDocument.BuildOptions.Ffs> li = getfpdBuildOpts().getFfsList().listIterator();\r
1660 int i = 0;\r
1661 while(li.hasNext()){\r
1662 BuildOptionsDocument.BuildOptions.Ffs ffs = li.next();\r
1663 saa[i][0] = ffs.getFfsKey();\r
1664 ++i;\r
1665 }\r
1666 }\r
1667 \r
3b405e9b 1668 public void updateBuildOptionsFfsKey(int i, String key) {\r
1669 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1670 ffs.setFfsKey(key);\r
1671 }\r
1672 \r
6cba26e8 1673 /**Get ith FFS key and contents.\r
1674 * @param saa\r
1675 */\r
1676 public void getBuildOptionsFfs(int i, String[] sa, LinkedHashMap<String, String> ffsAttribMap, ArrayList<String> firstLevelSections, ArrayList<String> firstLevelSection) {\r
1677 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1678 \r
1679 if (ffs != null) {\r
1680 \r
1681 sa[0] = ffs.getFfsKey();\r
1682 if (ffs.getSections() != null) {\r
1683 if(ffs.getSections().getEncapsulationType() != null){\r
1684 sa[1] = ffs.getSections().getEncapsulationType();\r
1685 }\r
1686 if (ffs.getSections().getSectionList() != null){\r
1687 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Section> li = ffs.getSections().getSectionList().listIterator();\r
1688 while (li.hasNext()) {\r
1689 firstLevelSection.add(li.next().getSectionType().toString());\r
1690 }\r
1691 }\r
1692 if (ffs.getSections().getSectionsList() != null) {\r
1693 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2> li = ffs.getSections().getSectionsList().listIterator();\r
1694 while(li.hasNext()) {\r
1695 firstLevelSections.add(li.next().getEncapsulationType());\r
1696 }\r
1697 }\r
1698 }\r
1699 if (ffs.getAttributeList() != null) {\r
1700 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Attribute> li = ffs.getAttributeList().listIterator();\r
1701 while(li.hasNext()) {\r
1702 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = li.next();\r
1703 ffsAttribMap.put(attrib.getName(), attrib.getValue());\r
1704 }\r
1705 \r
1706 }\r
1707 }\r
1708\r
1709 \r
1710 }\r
1711 \r
1712 private BuildOptionsDocument.BuildOptions.Ffs getFfs(int i) {\r
1713 XmlObject o = getfpdBuildOpts();\r
1714 BuildOptionsDocument.BuildOptions.Ffs ffs = null;\r
1715 \r
1716 XmlCursor cursor = o.newCursor();\r
1717 QName qFfs = new QName(xmlNs, "Ffs");\r
1718 if (cursor.toChild(qFfs)) {\r
1719 for (int j = 0; j < i; ++j) {\r
1720 cursor.toNextSibling(qFfs);\r
1721 }\r
1722 ffs = (BuildOptionsDocument.BuildOptions.Ffs)cursor.getObject();\r
1723 }\r
1724 cursor.dispose();\r
1725 return ffs;\r
1726 }\r
1727 \r
1728 public void removeBuildOptionsFfs(int i) {\r
1729 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1730 if (ffs == null){\r
1731 return;\r
1732 }\r
1733 \r
1734 XmlCursor cursor = ffs.newCursor();\r
1735 cursor.removeXml();\r
1736 cursor.dispose();\r
1737 }\r
1738 \r
3b405e9b 1739 \r
1740 \r
a13899c5 1741 public PlatformDefinitionsDocument.PlatformDefinitions getfpdPlatformDefs(){\r
1742 if (fpdPlatformDefs == null){\r
1743 fpdPlatformDefs = fpdRoot.addNewPlatformDefinitions();\r
1744 }\r
1745 return fpdPlatformDefs;\r
1746 }\r
1747 \r
6a09eb19 1748 public void getPlatformDefsSupportedArchs(Vector<Object> archs){\r
1749 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {\r
1750 return;\r
1751 }\r
1752 ListIterator li = getfpdPlatformDefs().getSupportedArchitectures().listIterator();\r
1753 while(li.hasNext()) {\r
1754 archs.add(li.next());\r
1755 }\r
1756 }\r
1757 \r
1758 public void setPlatformDefsSupportedArchs(Vector<Object> archs) {\r
1759 getfpdPlatformDefs().setSupportedArchitectures(archs);\r
1760 }\r
1761 \r
1762 public void getPlatformDefsBuildTargets(Vector<Object> targets) {\r
1763 if (getfpdPlatformDefs().getBuildTargets() == null) {\r
1764 return;\r
1765 }\r
1766 ListIterator li = getfpdPlatformDefs().getBuildTargets().listIterator();\r
1767 while(li.hasNext()) {\r
1768 targets.add(li.next());\r
1769 }\r
1770 }\r
1771 \r
1772 public void setPlatformDefsBuildTargets(Vector<Object> targets) {\r
1773 getfpdPlatformDefs().setBuildTargets(targets);\r
1774 }\r
1775 \r
1776 public void genPlatformDefsSkuInfo(String id, String name) {\r
1777 SkuInfoDocument.SkuInfo skuInfo = null;\r
1778 if (getfpdPlatformDefs().getSkuInfo() == null) {\r
1779 skuInfo = getfpdPlatformDefs().addNewSkuInfo();\r
1780 }\r
1781 skuInfo = getfpdPlatformDefs().getSkuInfo();\r
1782 if (skuInfo.getUiSkuNameList() == null || skuInfo.getUiSkuNameList().size() == 0) {\r
1783 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1784 skuName.setSkuID(new BigInteger("0"));\r
1785 skuName.setStringValue("DEFAULT");\r
1786 }\r
1787 if (id.equals("0")) {\r
1788 return;\r
1789 }\r
1790 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1791 skuName.setSkuID(new BigInteger(id));\r
1792 skuName.setStringValue(name);\r
1793 }\r
1794 \r
1795 public int getPlatformDefsSkuInfoCount(){\r
1796 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
1797 return 0;\r
1798 }\r
1799 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();\r
1800 }\r
1801 \r
1802 public void getPlatformDefsSkuInfos(String[][] saa){\r
1803 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
1804 return ;\r
1805 }\r
1806 \r
1807 List<SkuInfoDocument.SkuInfo.UiSkuName> l = getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();\r
1808 ListIterator<SkuInfoDocument.SkuInfo.UiSkuName> li = l.listIterator();\r
1809 int i = 0;\r
1810 while(li.hasNext()) {\r
1811 SkuInfoDocument.SkuInfo.UiSkuName sku = li.next();\r
1812 saa[i][0] = sku.getSkuID()+"";\r
1813 saa[i][1] = sku.getStringValue();\r
1814 ++i;\r
1815 }\r
1816 }\r
1817 \r
1818 public void removePlatformDefsSkuInfo(int i) {\r
1819 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
1820 if (skuInfo == null || i == 0) {\r
1821 return ;\r
1822 }\r
1823 \r
1824 XmlCursor cursor = skuInfo.newCursor();\r
1825 if (cursor.toFirstChild()) {\r
1826 for (int j = 0; j < i; ++j) {\r
1827 cursor.toNextSibling();\r
1828 }\r
1829 cursor.removeXml();\r
1830 }\r
1831 cursor.dispose();\r
1832 }\r
1833 \r
1834 public void updatePlatformDefsSkuInfo(int i, String id, String name) {\r
1835 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
1836 if (skuInfo == null || i == 0) {\r
1837 return ;\r
1838 }\r
1839 \r
1840 XmlCursor cursor = skuInfo.newCursor();\r
1841 if (cursor.toFirstChild()) {\r
1842 for (int j = 0; j < i; ++j) {\r
1843 cursor.toNextSibling();\r
1844 }\r
1845 SkuInfoDocument.SkuInfo.UiSkuName sku = (SkuInfoDocument.SkuInfo.UiSkuName)cursor.getObject();\r
1846 sku.setSkuID(new BigInteger(id));\r
1847 sku.setStringValue(name);\r
1848 }\r
1849 cursor.dispose();\r
1850 }\r
1851 \r
1852 public String getPlatformDefsInterDir(){\r
1853 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {\r
1854 return null;\r
1855 }\r
1856 return getfpdPlatformDefs().getIntermediateDirectories().toString();\r
1857 }\r
1858 \r
1859 public void setPlatformDefsInterDir(String interDir){\r
1860 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType.Enum.forString(interDir));\r
1861 }\r
1862 \r
1863 public String getPlatformDefsOutputDir() {\r
1864 return getfpdPlatformDefs().getOutputDirectory();\r
1865 }\r
1866 \r
1867 public void setPlatformDefsOutputDir(String outputDir) {\r
af25df16 1868 if (outputDir != null && outputDir.length() > 0) {\r
1869 getfpdPlatformDefs().setOutputDirectory(outputDir);\r
1870 }\r
1871 else{\r
1872 XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
1873 if (cursor.toChild(new QName(xmlNs, "OutputDirectory"))) {\r
1874 cursor.removeXml();\r
1875 }\r
1876 cursor.dispose();\r
1877 }\r
6a09eb19 1878 }\r
1879 \r
a13899c5 1880 public FlashDocument.Flash getfpdFlash() {\r
1881 if (fpdFlash == null) {\r
1882 fpdFlash = fpdRoot.addNewFlash();\r
1883 }\r
1884 return fpdFlash;\r
1885 }\r
1886 \r
1887 public void genFlashDefinitionFile(String file) {\r
1888 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
1889 if (fdf == null) {\r
1890 fdf = getfpdFlash().addNewFlashDefinitionFile();\r
1891 }\r
1892 \r
1893 fdf.setStringValue(file);\r
1894 }\r
1895 \r
1896 public String getFlashDefinitionFile() {\r
1897 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
1898 if (fdf == null) {\r
1899 return "";\r
1900 }\r
1901 \r
1902 return fdf.getStringValue();\r
1903 }\r
1904 \r
a13899c5 1905 public void genFvImagesNameValue(String name, String value) {\r
1906 \r
1907 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
1908 if (fi == null) {\r
1909 fi = getfpdFlash().addNewFvImages();\r
1910 }\r
1911 \r
1912 FvImagesDocument.FvImages.NameValue nv = fi.addNewNameValue();\r
1913 nv.setName(name);\r
1914 nv.setValue(value);\r
1915 }\r
1916 \r
1917 public void removeFvImagesNameValue(int i){\r
1918 \r
1919 XmlObject o = getfpdFlash().getFvImages();\r
1920 if (o == null) {\r
1921 return;\r
1922 }\r
1923 \r
1924 QName qNameValue = new QName(xmlNs, "NameValue");\r
1925 XmlCursor cursor = o.newCursor();\r
1926 if (cursor.toChild(qNameValue)) {\r
1927 for (int j = 0; j < i; ++j) {\r
1928 cursor.toNextSibling(qNameValue);\r
1929 }\r
1930 cursor.removeXml();\r
1931 }\r
1932 cursor.dispose();\r
1933 }\r
1934 \r
1935 public void updateFvImagesNameValue(int i, String name, String value){\r
1936 \r
1937 XmlObject o = getfpdFlash().getFvImages();\r
1938 if (o == null) {\r
1939 return;\r
1940 }\r
1941 \r
1942 QName qNameValue = new QName(xmlNs, "NameValue");\r
1943 XmlCursor cursor = o.newCursor();\r
1944 if (cursor.toChild(qNameValue)) {\r
1945 for (int j = 0; j < i; ++j) {\r
1946 cursor.toNextSibling(qNameValue);\r
1947 }\r
1948 FvImagesDocument.FvImages.NameValue nv = (FvImagesDocument.FvImages.NameValue)cursor.getObject();\r
1949 nv.setName(name);\r
1950 nv.setValue(value);\r
1951 }\r
1952 cursor.dispose();\r
1953 }\r
1954 \r
1955 public int getFvImagesNameValueCount() {\r
1956 \r
1957 FvImagesDocument.FvImages fi = null;\r
1958 if ((fi = getfpdFlash().getFvImages()) == null || fi.getNameValueList() == null) {\r
1959 return 0;\r
1960 }\r
1961 return fi.getNameValueList().size();\r
1962 }\r
1963 \r
1964 public void getFvImagesNameValues(String[][] nv) {\r
1965 \r
1966 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
1967 if (fi == null){\r
1968 return;\r
1969 }\r
1970 List<FvImagesDocument.FvImages.NameValue> l = fi.getNameValueList();\r
1971 int i = 0;\r
1972 ListIterator li = l.listIterator();\r
1973 while (li.hasNext()) {\r
1974 FvImagesDocument.FvImages.NameValue e = (FvImagesDocument.FvImages.NameValue) li\r
1975 .next();\r
1976 nv[i][0] = e.getName();\r
1977 nv[i][1] = e.getValue();\r
1978 \r
1979 i++;\r
1980 }\r
1981 }\r
1982 \r
1983 public void genFvImagesFvImage(String[] names, String types, Map<String, String> options) {\r
1984 \r
1985 FvImagesDocument.FvImages fis = null;\r
1986 if ((fis = getfpdFlash().getFvImages()) == null) {\r
1987 fis = getfpdFlash().addNewFvImages();\r
1988 }\r
1989 \r
1990 //\r
1991 //gen FvImage with FvImageNames array\r
1992 //\r
1993 FvImagesDocument.FvImages.FvImage fi = fis.addNewFvImage();\r
1994 for (int i = 0; i < names.length; ++i) {\r
1995 fi.addFvImageNames(names[i]);\r
1996 }\r
1997 fi.setType(FvImageTypes.Enum.forString(types));\r
1998 if (options != null){\r
1999 setFvImagesFvImageFvImageOptions(options, fi);\r
2000 }\r
2001 }\r
2002 \r
2003 private void setFvImagesFvImageFvImageOptions(Map<String, String> options, FvImagesDocument.FvImages.FvImage fi){\r
2004 FvImagesDocument.FvImages.FvImage.FvImageOptions fio = fi.getFvImageOptions();\r
2005 if (fio == null){\r
2006 fio = fi.addNewFvImageOptions();\r
2007 }\r
2008 \r
2009 Set<String> key = options.keySet();\r
2010 Iterator<String> i = key.iterator();\r
2011 while (i.hasNext()) {\r
44053733 2012 \r
a13899c5 2013 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
2014 String k = (String)i.next();\r
ae0d4fd2 2015 \r
a13899c5 2016 nv.setName(k);\r
2017 nv.setValue((String)options.get(k));\r
2018 \r
2019 }\r
2020 \r
2021 }\r
2022 \r
44053733 2023 \r
a13899c5 2024 public void removeFvImagesFvImage(int i) {\r
2025 \r
2026 XmlObject o = getfpdFlash().getFvImages();\r
2027 if (o == null) {\r
2028 return;\r
2029 }\r
2030 \r
2031 QName qFvImage = new QName(xmlNs, "FvImage");\r
2032 XmlCursor cursor = o.newCursor();\r
2033 if (cursor.toChild(qFvImage)) {\r
2034 for (int j = 0; j < i; ++j) {\r
2035 cursor.toNextSibling(qFvImage);\r
2036 }\r
2037 cursor.removeXml();\r
2038 }\r
2039 cursor.dispose();\r
2040 }\r
2041 \r
2042 public void updateFvImagesFvImage(int i, String[] names, String types, Map<String, String> options){\r
2043 \r
2044 XmlObject o = getfpdFlash().getFvImages();\r
2045 if (o == null) {\r
2046 return;\r
2047 }\r
2048 XmlCursor cursor = o.newCursor();\r
2049 QName qFvImage = new QName(xmlNs, "FvImage");\r
2050 if (cursor.toChild(qFvImage)) {\r
2051 for (int j = 0; j < i; ++j) {\r
2052 cursor.toNextSibling(qFvImage);\r
2053 }\r
2054 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
2055 fi.setType(FvImageTypes.Enum.forString(types));\r
2056 \r
2057 //\r
2058 // remove old FvImageNames before adding new ones\r
2059 //\r
2060 QName qFvImageNames = new QName(xmlNs, "FvImageNames"); \r
2061 cursor.toChild(qFvImageNames);\r
2062 cursor.removeXml();\r
2063 while (cursor.toNextSibling(qFvImageNames)) {\r
2064 cursor.removeXml();\r
2065 }\r
2066 \r
2067 for (int k = 0; k < names.length; ++k) {\r
2068 fi.addFvImageNames(names[k]);\r
2069 }\r
2070 //\r
2071 // remove old FvImageOptions before adding new options\r
2072 //\r
2073 QName qFvImageOptions = new QName(xmlNs, "FvImageOptions");\r
2074 cursor.toNextSibling(qFvImageOptions);\r
2075 cursor.removeXml();\r
2076 \r
2077 setFvImagesFvImageFvImageOptions(options, fi);\r
2078 }\r
2079 cursor.dispose();\r
2080 }\r
2081 \r
2082 public int getFvImagesFvImageCount() {\r
2083 \r
2084 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
2085 return 0;\r
2086 }\r
2087 return getfpdFlash().getFvImages().getFvImageList().size();\r
2088 }\r
2089 \r
ae0d4fd2 2090 /**Only Get Fv image setting - name and type.\r
2091 * @param saa\r
2092 */\r
2093 public void getFvImagesFvImages(String[][] saa) {\r
a13899c5 2094 \r
2095 if (getfpdFlash().getFvImages() == null) {\r
2096 return;\r
2097 }\r
2098 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
2099 if (l == null) {\r
2100 return;\r
2101 }\r
2102 ListIterator li = l.listIterator();\r
2103 int i = 0;\r
2104 while(li.hasNext()) {\r
2105 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
2106 //\r
2107 // get FvImageNames array, space separated\r
2108 //\r
2109 List<String> lfn = fi.getFvImageNamesList();\r
2110 ListIterator lfni = lfn.listIterator();\r
2111 saa[i][0] = " ";\r
2112 while (lfni.hasNext()) {\r
2113 saa[i][0] += (String)lfni.next();\r
2114 saa[i][0] += " ";\r
2115 }\r
2116 saa[i][0] = saa[i][0].trim();\r
2117 \r
2118 saa[i][1] = fi.getType()+"";\r
2119 \r
ae0d4fd2 2120 ++i;\r
2121 }\r
2122 }\r
2123 \r
2124 /**Get FvImage Options for FvImage i\r
2125 * @param i the ith FvImage\r
2126 */\r
2127 public void getFvImagesFvImageOptions(int i, Map<String, String> m) {\r
2128 XmlObject o = getfpdFlash().getFvImages();\r
2129 if (o == null) {\r
2130 return;\r
2131 }\r
2132 XmlCursor cursor = o.newCursor();\r
2133 QName qFvImage = new QName(xmlNs, "FvImage");\r
2134 if (cursor.toChild(qFvImage)) {\r
2135 for (int j = 0; j < i; ++j) {\r
2136 cursor.toNextSibling(qFvImage);\r
a13899c5 2137 }\r
ae0d4fd2 2138 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
2139 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){\r
2140 return;\r
a13899c5 2141 }\r
ae0d4fd2 2142 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
2143 while(li.hasNext()){\r
2144 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
a13899c5 2145 m.put(nv.getName(), nv.getValue());\r
2146 }\r
a13899c5 2147 }\r
2148 }\r
2149 \r
2150 /**\r
2151 Get platform header element\r
2152 @return PlatformHeaderDocument.PlatformHeader\r
2153 **/\r
2154 public PlatformHeaderDocument.PlatformHeader getFpdHdr() {\r
2155 if (fpdHdr == null) {\r
2156 fpdHdr = fpdRoot.addNewPlatformHeader();\r
2157 }\r
2158 genPlatformDefsSkuInfo("0", "DEFAULT");\r
2159 return fpdHdr;\r
2160 }\r
2161 \r
a13899c5 2162 public String getFpdHdrPlatformName() {\r
2163 return getFpdHdr().getPlatformName();\r
2164 }\r
2165 \r
2166 public String getFpdHdrGuidValue() {\r
2167 return getFpdHdr().getGuidValue();\r
2168 }\r
2169 \r
2170 public String getFpdHdrVer() {\r
2171 return getFpdHdr().getVersion();\r
2172 }\r
2173 \r
2174 public String getFpdHdrAbs() {\r
2175 return getFpdHdr().getAbstract();\r
2176 }\r
2177 \r
2178 public String getFpdHdrDescription() {\r
2179 return getFpdHdr().getDescription();\r
2180 }\r
2181 \r
2182 public String getFpdHdrCopyright() {\r
2183 return getFpdHdr().getCopyright();\r
2184 }\r
2185 \r
2186 public String getFpdHdrLicense() {\r
2187 LicenseDocument.License l = getFpdHdr().getLicense();\r
2188 if (l == null) {\r
2189 return null;\r
2190 }\r
2191 return l.getStringValue();\r
2192 }\r
2193 \r
2194 public String getFpdHdrUrl() {\r
2195 LicenseDocument.License l = getFpdHdr().getLicense();\r
2196 if (l == null) {\r
2197 return null;\r
2198 }\r
2199 return l.getURL();\r
2200 }\r
2201 \r
2202 public String getFpdHdrSpec() {\r
2203\r
c06e8657 2204 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 2205// return getFpdHdr().getSpecification();\r
2206 }\r
2207 \r
2208 public void setFpdHdrPlatformName(String name){\r
2209 getFpdHdr().setPlatformName(name);\r
2210 }\r
2211 \r
2212 public void setFpdHdrGuidValue(String guid){\r
2213 getFpdHdr().setGuidValue(guid);\r
2214 }\r
2215 \r
2216 public void setFpdHdrVer(String v){\r
2217 getFpdHdr().setVersion(v);\r
2218 }\r
2219 \r
2220 public void setFpdHdrAbs(String abs) {\r
2221 getFpdHdr().setAbstract(abs);\r
2222 }\r
2223 \r
2224 public void setFpdHdrDescription(String desc){\r
2225 getFpdHdr().setDescription(desc);\r
2226 }\r
2227 \r
2228 public void setFpdHdrCopyright(String cr) {\r
2229 getFpdHdr().setCopyright(cr);\r
2230 }\r
2231 \r
2232 public void setFpdHdrLicense(String license){\r
2233 LicenseDocument.License l = getFpdHdr().getLicense();\r
2234 if (l == null) {\r
2235 getFpdHdr().addNewLicense().setStringValue(license);\r
2236 }\r
2237 else {\r
2238 l.setStringValue(license);\r
2239 }\r
2240 }\r
2241\r
2242 public void setFpdHdrUrl(String url){\r
2243 LicenseDocument.License l = getFpdHdr().getLicense();\r
2244 \r
2245 l.setURL(url);\r
2246 \r
2247 }\r
2248 \r
2249 public void setFpdHdrSpec(String s){\r
c06e8657 2250 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 2251 getFpdHdr().setSpecification(s);\r
2252 }\r
2253 /**\r
2254 Save the processed xml contents to file\r
2255 \r
2256 @param fpdFile The file to save xml contents\r
2257 @throws IOException Exceptions during file operation\r
2258 **/\r
2259 public void saveAs(File fpdFile) throws IOException {\r
2260\r
2261 XmlOptions options = new XmlOptions();\r
2262\r
2263 options.setCharacterEncoding("UTF-8");\r
2264 options.setSavePrettyPrint();\r
2265 options.setSavePrettyPrintIndent(2);\r
2266 try {\r
2267 fpdd.save(fpdFile, options);\r
2268 } catch (IOException e) {\r
2269 e.printStackTrace();\r
2270 }\r
2271\r
2272 }\r
2273 \r
1800d80f 2274 private String listToString(List l) {\r
a13899c5 2275 if (l == null) {\r
2276 return null;\r
2277 }\r
2278 String s = " ";\r
2279 ListIterator li = l.listIterator();\r
2280 while(li.hasNext()) {\r
2281 s += li.next();\r
2282 s += " ";\r
2283 }\r
2284 return s.trim();\r
2285 }\r
2286}\r
82961247 2287\r
2288class PcdItemTypeConflictException extends Exception {\r
2289\r
2290 /**\r
2291 * \r
2292 */\r
2293 private static final long serialVersionUID = 1L;\r
2294 private String details = null;\r
2295 \r
2296 PcdItemTypeConflictException(String info){\r
2297 details = info;\r
2298 }\r
2299 \r
2300 public String getMessage() {\r
2301 return details;\r
2302 }\r
2303}\r
2304\r
2305class PcdDeclNotFound extends Exception {\r
2306\r
2307 /**\r
2308 * \r
2309 */\r
2310 private static final long serialVersionUID = 1L;\r
2311 private String details = null;\r
2312 \r
2313 PcdDeclNotFound(String info) {\r
2314 details = info;\r
2315 }\r
2316 \r
2317 public String getMessage() {\r
2318 return details;\r
2319 }\r
2320}\r
2321\r
2322class PcdValueMalFormed extends Exception {\r
2323\r
2324 /**\r
2325 * \r
2326 */\r
2327 private static final long serialVersionUID = 1L;\r
2328 private String details = null;\r
2329 \r
2330 PcdValueMalFormed(String info) {\r
2331 details = info;\r
2332 }\r
2333 \r
2334 public String getMessage() {\r
2335 return details;\r
2336 }\r
2337}\r