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