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