]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@710 6f19259b...
[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
26\r
27import javax.xml.namespace.QName;\r
28\r
29import org.apache.xmlbeans.XmlCursor;\r
30import org.apache.xmlbeans.XmlObject;\r
31import org.apache.xmlbeans.XmlOptions;\r
32import org.tianocore.AntTaskDocument;\r
33import org.tianocore.BuildOptionsDocument;\r
34import org.tianocore.DynamicPcdBuildDefinitionsDocument;\r
35import org.tianocore.FlashDefinitionFileDocument;\r
a13899c5 36import org.tianocore.FlashDocument;\r
37import org.tianocore.FrameworkModulesDocument;\r
a13899c5 38import org.tianocore.LibrariesDocument;\r
39import org.tianocore.ModuleSADocument;\r
40import org.tianocore.ModuleSurfaceAreaDocument;\r
41import org.tianocore.OptionDocument;\r
42import org.tianocore.OptionsDocument;\r
43import org.tianocore.PcdBuildDefinitionDocument;\r
44import org.tianocore.PcdCodedDocument;\r
45import org.tianocore.PcdDataTypes;\r
46import org.tianocore.PcdDeclarationsDocument;\r
47import org.tianocore.PcdItemTypes;\r
48import org.tianocore.PlatformDefinitionsDocument;\r
49import org.tianocore.PlatformSurfaceAreaDocument;\r
50import org.tianocore.FvImageTypes;\r
51import org.tianocore.FvImagesDocument;\r
52import org.tianocore.LicenseDocument;\r
53import org.tianocore.PlatformHeaderDocument;\r
54import org.tianocore.SkuInfoDocument;\r
55import org.tianocore.UserDefinedAntTasksDocument;\r
56import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
57import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
58import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
59import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
60\r
61/**\r
62 This class processes fpd file contents such as add remove xml elements. \r
63 @since PackageEditor 1.0\r
64**/\r
65public class FpdFileContents {\r
66\r
67 static final String xmlNs = "http://www.TianoCore.org/2006/Edk2.0";\r
68 \r
69 private PlatformSurfaceAreaDocument fpdd = null;\r
70 \r
71 private PlatformSurfaceAreaDocument.PlatformSurfaceArea fpdRoot = null;\r
72 \r
73 private PlatformHeaderDocument.PlatformHeader fpdHdr = null;\r
74 \r
75 private PlatformDefinitionsDocument.PlatformDefinitions fpdPlatformDefs = null;\r
76 \r
77 private FlashDocument.Flash fpdFlash = null;\r
78 \r
79 private BuildOptionsDocument.BuildOptions fpdBuildOpts = null;\r
80 \r
81 private FrameworkModulesDocument.FrameworkModules fpdFrameworkModules = null;\r
82 \r
83 private DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs = null;\r
84 \r
85 public static HashMap<String, ArrayList<String>> dynPcdMap = null;\r
86 \r
87 /**\r
88 * look through all pcd data in all ModuleSA, create pcd -> ModuleSA mappings.\r
89 */\r
90 public void initDynPcdMap() {\r
91 if (dynPcdMap == null) {\r
92 dynPcdMap = new HashMap<String, ArrayList<String>>();\r
93 List<ModuleSADocument.ModuleSA> l = getfpdFrameworkModules().getModuleSAList();\r
94 if (l == null) {\r
95 return;\r
96 }\r
97 ListIterator<ModuleSADocument.ModuleSA> li = l.listIterator();\r
98 while (li.hasNext()) {\r
99 ModuleSADocument.ModuleSA msa = li.next();\r
100 if (msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null) {\r
101 continue;\r
102 }\r
103 String ModuleInfo = msa.getModuleGuid() + " " + msa.getModuleVersion() +\r
104 " " + msa.getPackageGuid() + " " + msa.getPackageVersion();\r
105 List<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lp = msa.getPcdBuildDefinition().getPcdDataList();\r
106 ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData> lpi = lp.listIterator();\r
107 while (lpi.hasNext()) {\r
108 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = lpi.next();\r
109 String pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName();\r
110 if (dynPcdMap.get(pcdKey) == null) {\r
111 ArrayList<String> al = new ArrayList<String>();\r
112 al.add(ModuleInfo + " " + pcdData.getItemType().toString());\r
113 dynPcdMap.put(pcdKey, al);\r
114 }\r
115 else{\r
116 dynPcdMap.get(pcdKey).add(ModuleInfo + " " + pcdData.getItemType().toString());\r
117 }\r
118 }\r
119 }\r
120 }\r
121 }\r
122 /**\r
123 Constructor to create a new spd file\r
124 **/\r
125 public FpdFileContents() {\r
126\r
127 fpdd = PlatformSurfaceAreaDocument.Factory.newInstance();\r
128 fpdRoot = fpdd.addNewPlatformSurfaceArea();\r
129\r
130 }\r
131\r
132 /**\r
133 Constructor for existing document object\r
134 @param psa\r
135 **/\r
136 public FpdFileContents(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
137 fpdRoot = fpd;\r
138 fpdHdr = fpdRoot.getPlatformHeader();\r
139 fpdPlatformDefs = fpdRoot.getPlatformDefinitions();\r
140 fpdBuildOpts = fpdRoot.getBuildOptions();\r
141 fpdFrameworkModules = fpdRoot.getFrameworkModules();\r
142 fpdDynPcdBuildDefs = fpdRoot.getDynamicPcdBuildDefinitions();\r
143 fpdFlash = fpdRoot.getFlash();\r
144 }\r
145\r
146 /**\r
147 Constructor based on an existing spd file\r
148 \r
149 @param f Existing spd file\r
150 **/\r
151 public FpdFileContents(File f) {\r
152 try {\r
153 fpdd = PlatformSurfaceAreaDocument.Factory.parse(f);\r
154 fpdRoot = fpdd.getPlatformSurfaceArea();\r
155 } catch (Exception e) {\r
156 System.out.println(e.toString());\r
157 }\r
158 }\r
159 \r
160 public DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions getfpdDynPcdBuildDefs() {\r
161 if (fpdDynPcdBuildDefs == null){\r
162 fpdDynPcdBuildDefs = fpdRoot.addNewDynamicPcdBuildDefinitions();\r
163 }\r
164 return fpdDynPcdBuildDefs;\r
165 }\r
166 \r
167 public FrameworkModulesDocument.FrameworkModules getfpdFrameworkModules() {\r
168 if (fpdFrameworkModules == null){\r
169 fpdFrameworkModules = fpdRoot.addNewFrameworkModules();\r
170 }\r
171 return fpdFrameworkModules;\r
172 }\r
173 \r
174 public int getPlatformDefsSkuInfoCount(){\r
175 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
176 return 0;\r
177 }\r
178 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();\r
179 }\r
180 \r
181 public void getPlatformDefsSkuInfos(String[][] saa){\r
182 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
183 return ;\r
184 }\r
185 \r
186 List<SkuInfoDocument.SkuInfo.UiSkuName> l = getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();\r
187 ListIterator<SkuInfoDocument.SkuInfo.UiSkuName> li = l.listIterator();\r
188 int i = 0;\r
189 while(li.hasNext()) {\r
190 SkuInfoDocument.SkuInfo.UiSkuName sku = li.next();\r
191 saa[i][0] = sku.getSkuID()+"";\r
192 saa[i][1] = sku.getStringValue();\r
193 ++i;\r
194 }\r
195 }\r
196 \r
197 public int getFrameworkModulesCount() {\r
198 if (getfpdFrameworkModules().getModuleSAList() == null){\r
199 return 0;\r
200 }\r
201 return getfpdFrameworkModules().getModuleSAList().size();\r
202 }\r
203 \r
204 public void getFrameworkModulesInfo(String[][] saa) {\r
205 if (getFrameworkModulesCount() == 0){\r
206 return;\r
207 }\r
208 \r
209 ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator();\r
210 int i = 0;\r
211 while(li.hasNext()) {\r
212 ModuleSADocument.ModuleSA msa = (ModuleSADocument.ModuleSA)li.next();\r
213 saa[i][1] = msa.getModuleGuid();\r
214 saa[i][2] = msa.getModuleVersion();\r
215 \r
216 saa[i][3] = msa.getPackageGuid();\r
217 saa[i][4] = msa.getPackageVersion();\r
218// saa[i][4] = listToString(msa.getSupArchList());\r
219 ++i;\r
220 }\r
221 }\r
222 \r
223 public ModuleSADocument.ModuleSA getModuleSA(String key) {\r
224 String[] s = key.split(" ");\r
225 if (getfpdFrameworkModules().getModuleSAList() == null) {\r
226 return null;\r
227 }\r
228 ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator();\r
229 while(li.hasNext()) {\r
230 ModuleSADocument.ModuleSA msa = (ModuleSADocument.ModuleSA)li.next();\r
231 if (msa.getModuleGuid().equals(s[0]) && msa.getModuleVersion().equals(s[1])\r
232 && msa.getPackageGuid().equals(s[2]) && msa.getPackageVersion().equals(s[3])) {\r
233 \r
234 return msa;\r
235 }\r
236 }\r
237 return null;\r
238 }\r
239 public void removeModuleSA(int i) {\r
240 XmlObject o = getfpdFrameworkModules();\r
241 if (o == null) {\r
242 return;\r
243 }\r
244 \r
245 XmlCursor cursor = o.newCursor();\r
246 if (cursor.toFirstChild()) {\r
247 for (int j = 0; j < i; ++j) {\r
248 cursor.toNextSibling();\r
249 }\r
250 //\r
251 // remove pcd from dynPcdMap, if DynamicPcdBuildData exists, remove them too.\r
252 //\r
253 ModuleSADocument.ModuleSA moduleSa = (ModuleSADocument.ModuleSA)cursor.getObject();\r
254 String moduleInfo = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() + " " +\r
255 moduleSa.getPackageGuid()+ " " + moduleSa.getPackageVersion();\r
256 PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef = moduleSa.getPcdBuildDefinition();\r
257 if (pcdBuildDef != null) {\r
258 maintainDynPcdMap(pcdBuildDef, moduleInfo);\r
259 }\r
260 cursor.removeXml();\r
261 }\r
262 cursor.dispose();\r
263 }\r
264 \r
265 private void maintainDynPcdMap(PcdBuildDefinitionDocument.PcdBuildDefinition o, String moduleInfo) {\r
266 XmlCursor cursor = o.newCursor();\r
267 boolean fromLibInstance = false;\r
268 if (!cursor.toFirstChild()){\r
269 return;\r
270 }\r
271 //\r
272 // deal with first child, same process in the while loop below for siblings.\r
273 //\r
274 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
275 String pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName();\r
276 ArrayList<String> al = dynPcdMap.get(pcdKey);\r
277 for(int i = 0; i < al.size(); ++i){\r
278 if (al.get(i).startsWith(moduleInfo)){\r
279 fromLibInstance = true;\r
280 break;\r
281 }\r
282 }\r
283 al.remove(moduleInfo + " " + pcdData.getItemType().toString());\r
284 if (al.size() == 0) {\r
285 dynPcdMap.remove(pcdKey);\r
286 }\r
287 \r
288 if (pcdData.getItemType().toString().equals("DYNAMIC")) {\r
289 if (dynPcdMap.get(pcdKey) == null) {\r
290 removeDynamicPcdBuildData(pcdData.getCName(), pcdData.getTokenSpaceGuidCName());\r
291 }\r
292 }\r
293 if (fromLibInstance){\r
294 cursor.removeXml();\r
295 }\r
296 while(cursor.toNextSibling()) {\r
297 fromLibInstance = false;\r
298 pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
299 //\r
300 // remove each pcd record from dynPcdMap\r
301 //\r
302 pcdKey = pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName();\r
303 al = dynPcdMap.get(pcdKey);\r
304 for(int i = 0; i < al.size(); ++i){\r
305 if (al.get(i).startsWith(moduleInfo)){\r
306 fromLibInstance = true;\r
307 break;\r
308 }\r
309 }\r
310 al.remove(moduleInfo + " " + pcdData.getItemType().toString());\r
311 if (al.size() == 0) {\r
312 dynPcdMap.remove(pcdKey);\r
313 }\r
314 \r
315 if (pcdData.getItemType().toString().equals("DYNAMIC")) {\r
316 //\r
317 // First check whether this is the only consumer of this dyn pcd.\r
318 //\r
319 if (dynPcdMap.get(pcdKey) == null) {\r
320 //\r
321 // delete corresponding entry in DynamicPcdBuildData\r
322 //\r
323 removeDynamicPcdBuildData(pcdData.getCName(), pcdData.getTokenSpaceGuidCName());\r
324 }\r
325 }\r
326 if (fromLibInstance){\r
327 cursor.removeXml();\r
328 }\r
329 }\r
330 }\r
331 //\r
332 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer"\r
333 //\r
334 public int getPcdDataCount(String key){\r
335 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
336 if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
337 return 0;\r
338 }\r
339 return msa.getPcdBuildDefinition().getPcdDataList().size();\r
340 }\r
341 \r
342 public void getPcdData(String key, String[][] saa) {\r
343 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
344 if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
345 return;\r
346 }\r
347 ListIterator<PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData>li = msa.getPcdBuildDefinition().getPcdDataList().listIterator();\r
348 for (int i = 0; i < saa.length; ++i) {\r
349 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = li.next();\r
350 saa[i][0] = pcdData.getCName();\r
351 saa[i][1] = pcdData.getTokenSpaceGuidCName();\r
352 saa[i][2] = pcdData.getItemType().toString();\r
353 saa[i][3] = pcdData.getToken().toString();\r
354 saa[i][4] = pcdData.getDatumType().toString();\r
355 saa[i][5] = pcdData.getValue();\r
356 \r
357 }\r
358 }\r
359 //\r
360 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer"\r
361 //\r
362 public int getLibraryInstancesCount(String key) {\r
363 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
364 if (msa == null || msa.getLibraries() == null || msa.getLibraries().getInstanceList() == null){\r
365 return 0;\r
366 }\r
367 return msa.getLibraries().getInstanceList().size();\r
368 }\r
369 \r
370 public void getLibraryInstances(String key, String[][] saa){\r
371 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
372 if (msa == null || msa.getLibraries() == null || msa.getLibraries().getInstanceList() == null){\r
373 return ;\r
374 }\r
375 \r
376 ListIterator<LibrariesDocument.Libraries.Instance> li = msa.getLibraries().getInstanceList().listIterator();\r
377 for (int i = 0; i < saa.length; ++i) {\r
378 LibrariesDocument.Libraries.Instance instance = li.next();\r
379 saa[i][1] = instance.getModuleGuid();\r
380 saa[i][2] = instance.getModuleVersion();\r
381 saa[i][3] = instance.getPackageGuid();\r
382 saa[i][4] = instance.getPackageVersion();\r
383 }\r
384 }\r
385 \r
386 public void removeLibraryInstances(String key) {\r
387 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
388 if (msa == null || msa.getLibraries() == null){\r
389 return ;\r
390 }\r
391 \r
392 XmlCursor cursor = msa.getLibraries().newCursor();\r
393 cursor.removeXml();\r
394 cursor.dispose();\r
395 }\r
396 \r
397 public void genLibraryInstance(String mg, String mv, String pg, String pv, String key) {\r
398 ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
399 if (msa == null){\r
400 msa = getfpdFrameworkModules().addNewModuleSA();\r
401 }\r
402 LibrariesDocument.Libraries libs = msa.getLibraries();\r
403 if(libs == null){\r
404 libs = msa.addNewLibraries();\r
405 }\r
406 \r
407 LibrariesDocument.Libraries.Instance instance = libs.addNewInstance();\r
408 instance.setModuleGuid(mg);\r
409 instance.setModuleVersion(mv);\r
410 instance.setPackageGuid(pg);\r
411 instance.setPackageVersion(pv);\r
412 \r
413 }\r
414 /**add pcd information of module mi to a ModuleSA. \r
415 * @param mi\r
416 * @param moduleSa if null, generate a new ModuleSA.\r
417 */\r
418 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi, ModuleSADocument.ModuleSA moduleSa){\r
419 //ToDo add Arch filter\r
420 \r
421 try {\r
422 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)GlobalData.getModuleXmlObject(mi);\r
423 if (msa.getPcdCoded() == null) {\r
424 return;\r
425 }\r
426 if (moduleSa == null) {\r
427 moduleSa = genModuleSA(mi);\r
428 }\r
429 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
430 m.put("ModuleSurfaceArea", msa);\r
431 SurfaceAreaQuery.setDoc(m);\r
432 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null);\r
433 //\r
434 // Implementing InitializePlatformPcdBuildDefinitions\r
435 //\r
436 List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
437 ListIterator li = l.listIterator();\r
438 while(li.hasNext()) {\r
439 PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
440 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
441 if (spdPcd == null) {\r
442 //\r
443 // ToDo Error \r
444 //\r
445 break;\r
446 }\r
447 //\r
448 // AddItem to ModuleSA PcdBuildDefinitions\r
449 //\r
450 String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
451 genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType().toString(), spdPcd.getDatumType()+"", defaultVal, moduleSa);\r
452 }\r
453 \r
454 }\r
455 catch (Exception e){\r
456 e.printStackTrace();\r
457 }\r
458 \r
459 }\r
460 \r
461 private PcdDeclarationsDocument.PcdDeclarations.PcdEntry LookupPcdDeclaration (PcdCodedDocument.PcdCoded.PcdEntry msaPcd, PackageIdentification[] depPkgs) {\r
462 \r
463 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
464 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = null;\r
465 for (int i = 0; i < depPkgs.length; ++i) {\r
466 m.put("PackageSurfaceArea", GlobalData.getPackageXmlObject(depPkgs[i]));\r
467 SurfaceAreaQuery.setDoc(m);\r
468 XmlObject[] xo = SurfaceAreaQuery.getSpdPcdDeclarations();\r
469 if (xo == null) {\r
470 continue;\r
471 }\r
472 for (int j = 0; j < xo.length; ++j) {\r
473 spdPcd = (PcdDeclarationsDocument.PcdDeclarations.PcdEntry)xo[j];\r
474 if (msaPcd.getTokenSpaceGuidCName() == null) {\r
475 if (spdPcd.getCName().equals(msaPcd.getCName())) {\r
476 return spdPcd;\r
477 }\r
478 }\r
479 else{\r
480 if (spdPcd.getCName().equals(msaPcd.getCName()) && spdPcd.getTokenSpaceGuidCName().equals(msaPcd.getTokenSpaceGuidCName())) {\r
481 return spdPcd;\r
482 }\r
483 }\r
484 \r
485 }\r
486 \r
487 }\r
488 return null;\r
489 }\r
490 \r
491 private ModuleSADocument.ModuleSA genModuleSA (ModuleIdentification mi) {\r
492 PackageIdentification pi = GlobalData.getPackageForModule(mi);\r
493 ModuleSADocument.ModuleSA msa = getfpdFrameworkModules().addNewModuleSA();\r
494 msa.setModuleGuid(mi.getGuid());\r
495 msa.setModuleVersion(mi.getVersion());\r
496 msa.setPackageGuid(pi.getGuid());\r
497 msa.setPackageVersion(pi.getVersion());\r
498 \r
499 return msa;\r
500 }\r
501 \r
502 private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, ModuleSADocument.ModuleSA moduleSa) {\r
503 if (moduleSa.getPcdBuildDefinition() == null){\r
504 moduleSa.addNewPcdBuildDefinition();\r
505 }\r
506 //\r
507 // constructe pcd to modulesa mapping first.\r
508 // Attention : for any error condition, remove from map this pcd.\r
509 //\r
510 ArrayList<String> pcdConsumer = LookupPlatformPcdData(cName + " " + tsGuid);\r
511 if (pcdConsumer == null) {\r
512 pcdConsumer = new ArrayList<String>();\r
513 }\r
514 String listValue = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() \r
515 + " " + moduleSa.getPackageGuid() + " " + moduleSa.getPackageVersion() \r
516 + " " + itemType;\r
517 pcdConsumer.add(listValue);\r
518 dynPcdMap.put(cName + " " + tsGuid, pcdConsumer);\r
519 //\r
520 // Special dynamic type, if this pcd already exists in other ModuleSA\r
521 //\r
522 if (itemType.equals("DYNAMIC")) {\r
523 \r
524 ListIterator li = pcdConsumer.listIterator();\r
525 while(li.hasNext()) {\r
526 String value = li.next().toString();\r
527 String[] valuePart= value.split(" ");\r
528 if (!valuePart[4].equals("DYNAMIC")) {\r
529 //ToDo error for same pcd, other type than dynamic\r
530 pcdConsumer.remove(listValue);\r
531 return;\r
532 }\r
533 }\r
534 }\r
535 else {\r
536 ListIterator li = pcdConsumer.listIterator();\r
537 while(li.hasNext()) {\r
538 String value = li.next().toString();\r
539 String[] valuePart= value.split(" ");\r
540 if (valuePart[4].equals("DYNAMIC")) {\r
541 //ToDo error for same pcd, other type than non-dynamic\r
542 pcdConsumer.remove(listValue);\r
543 return;\r
544 }\r
545 }\r
546 }\r
547 \r
548 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData fpdPcd = moduleSa.getPcdBuildDefinition().addNewPcdData();\r
549 fpdPcd.setCName(cName);\r
550 fpdPcd.setToken(token);\r
551 fpdPcd.setTokenSpaceGuidCName(tsGuid);\r
552 fpdPcd.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
553 fpdPcd.setItemType(PcdItemTypes.Enum.forString(itemType));\r
554 \r
555 if (itemType.equals("DYNAMIC") || itemType.equals("DYNAMIC_EX")) {\r
556 ArrayList<String> al = LookupDynamicPcdBuildDefinition(cName + " " + tsGuid);\r
557 //\r
558 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.\r
559 // so need to add one dyn pcd.\r
560 //\r
561 if (al.size() == 1) {\r
562 addDynamicPcdBuildData(cName, token, tsGuid, itemType, dataType, defaultVal);\r
563 }\r
564 }\r
565 else {\r
566 if (defaultVal != null){\r
567 fpdPcd.setValue(defaultVal);\r
568 }\r
569 else {\r
570 if (dataType.equals("UINT8") || dataType.equals("UINT16") || dataType.equals("UINT32") || dataType.equals("UINT64")) {\r
571 fpdPcd.setValue("0");\r
572 }\r
573 if (dataType.equals("BOOLEAN")){\r
574 fpdPcd.setValue("false");\r
575 }\r
576 if (dataType.equals("VOID*")) {\r
577 fpdPcd.setValue("");\r
578 }\r
579 }\r
580 if (dataType.equals("UINT8")){\r
581 fpdPcd.setMaxDatumSize(1);\r
582 }\r
583 if (dataType.equals("UINT16")) {\r
584 fpdPcd.setMaxDatumSize(2);\r
585 }\r
586 if (dataType.equals("UINT32")) {\r
587 fpdPcd.setMaxDatumSize(4);\r
588 }\r
589 if (dataType.equals("UINT64")){\r
590 fpdPcd.setMaxDatumSize(8);\r
591 }\r
592 if (dataType.equals("BOOLEAN")){\r
593 fpdPcd.setMaxDatumSize(1);\r
594 }\r
595 if (dataType.equals("VOID*")) {\r
596 int maxSize = setMaxSizeForPointer(fpdPcd.getValue());\r
597 fpdPcd.setMaxDatumSize(maxSize);\r
598 }\r
599 }\r
600 }\r
601 \r
602 private int setMaxSizeForPointer(String datum) {\r
603 if (datum == null) {\r
604 return 0;\r
605 }\r
606 char ch = datum.charAt(0);\r
607 int start, end;\r
608 String strValue;\r
609 //\r
610 // For void* type PCD, only three datum is support:\r
611 // 1) Unicode: string with start char is "L"\r
612 // 2) Ansci: String is ""\r
613 // 3) byte array: String start char "{"\r
614 // \r
615 if (ch == 'L') {\r
616 start = datum.indexOf('\"');\r
617 end = datum.lastIndexOf('\"');\r
618 if ((start > end) || \r
619 (end > datum.length())||\r
620 ((start == end) && (datum.length() > 0))) {\r
621 //ToDo Error handling here\r
622 }\r
623\r
624 strValue = datum.substring(start + 1, end);\r
625 return strValue.length() * 2;\r
626 } else if (ch == '\"'){\r
627 start = datum.indexOf('\"');\r
628 end = datum.lastIndexOf('\"');\r
629 if ((start > end) || \r
630 (end > datum.length())||\r
631 ((start == end) && (datum.length() > 0))) {\r
632 \r
633 }\r
634 strValue = datum.substring(start + 1, end);\r
635 return strValue.length();\r
636 } else if (ch =='{') {\r
637 String[] strValueArray;\r
638\r
639 start = datum.indexOf('{');\r
640 end = datum.lastIndexOf('}');\r
641 strValue = datum.substring(start + 1, end);\r
642 strValue = strValue.trim();\r
643 if (strValue.length() == 0) {\r
644 return 0;\r
645 }\r
646 strValueArray = strValue.split(",");\r
647 for (int index = 0; index < strValueArray.length; index ++) {\r
648 Integer value = Integer.decode(strValueArray[index].trim());\r
649 \r
650 if (value > 0xFF) {\r
651// "[FPD file error] The datum type of PCD %s in %s is VOID*, "+\r
652// "it is byte array in fact. But the element of %s exceed the byte range",\r
653 \r
654 }\r
655 }\r
656 return strValueArray.length;\r
657\r
658\r
659 } else {\r
660// "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+\r
661// "1) UNICODE string: like L\"xxxx\";\r\n"+\r
662// "2) ANSIC string: like \"xxx\";\r\n"+\r
663// "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+\r
664// "but the datum in seems does not following above format!",\r
665 return -1; \r
666 \r
667 }\r
668 }\r
669 \r
670 private ArrayList<String> LookupDynamicPcdBuildDefinition(String dynPcdKey) {\r
671 ArrayList<String> al = dynPcdMap.get(dynPcdKey);\r
672 \r
673 return al;\r
674 }\r
675 \r
676 private ArrayList<String> LookupPlatformPcdData(String pcdKey) {\r
677 \r
678 return dynPcdMap.get("pcdKey");\r
679 }\r
680 \r
681 public int getDynamicPcdBuildDataCount() {\r
682 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
683 return 0;\r
684 }\r
685 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();\r
686 }\r
687 \r
688 public void getDynamicPcdBuildData(String[][] saa) {\r
689 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
690 return ;\r
691 }\r
692 List<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> l = getfpdDynPcdBuildDefs().getPcdBuildDataList();\r
693 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> li = l.listIterator();\r
694 int i = 0;\r
695 while(li.hasNext()) {\r
696 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcd = li.next();\r
697 saa[i][0] = dynPcd.getCName();\r
698 saa[i][1] = dynPcd.getToken().toString();\r
699 saa[i][2] = dynPcd.getTokenSpaceGuidCName();\r
700 saa[i][3] = dynPcd.getMaxDatumSize()+"";\r
701 saa[i][4] = dynPcd.getDatumType().toString();\r
702 \r
703 ++i;\r
704 }\r
705 }\r
706 \r
707 private void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) {\r
708 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcdData = getfpdDynPcdBuildDefs().addNewPcdBuildData();\r
709 dynPcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
710 dynPcdData.setCName(cName);\r
711 dynPcdData.setToken(token);\r
712 dynPcdData.setTokenSpaceGuidCName(tsGuid);\r
713 dynPcdData.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
714 \r
715 BigInteger bigInt = new BigInteger("0");\r
716 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = dynPcdData.addNewSkuInfo();\r
717 skuInfo.setSkuId(bigInt);\r
718 if (defaultVal != null){\r
719 skuInfo.setValue(defaultVal);\r
720 }\r
721 else {\r
722 if (dataType.equals("UINT8")){\r
723 skuInfo.setValue("0");\r
724 }\r
725 if (dataType.equals("UINT16")) {\r
726 skuInfo.setValue("0");\r
727 }\r
728 if (dataType.equals("UINT32")) {\r
729 skuInfo.setValue("0");\r
730 }\r
731 if (dataType.equals("UINT64")){\r
732 skuInfo.setValue("0");\r
733 }\r
734 if (dataType.equals("BOOLEAN")){\r
735 skuInfo.setValue("false");\r
736 }\r
737 if (dataType.equals("VOID*")) {\r
738 skuInfo.setValue("");\r
739 }\r
740 }\r
741 if (dataType.equals("UINT8")){\r
742 dynPcdData.setMaxDatumSize(1);\r
743 }\r
744 if (dataType.equals("UINT16")) {\r
745 dynPcdData.setMaxDatumSize(2);\r
746 }\r
747 if (dataType.equals("UINT32")) {\r
748 dynPcdData.setMaxDatumSize(4);\r
749 }\r
750 if (dataType.equals("UINT64")){\r
751 dynPcdData.setMaxDatumSize(8);\r
752 }\r
753 if (dataType.equals("BOOLEAN")){\r
754 dynPcdData.setMaxDatumSize(1);\r
755 }\r
756 if (dataType.equals("VOID*")) {\r
757 int maxSize = setMaxSizeForPointer(defaultVal);\r
758 dynPcdData.setMaxDatumSize(maxSize);\r
759 }\r
760 }\r
761 \r
762 private void removeDynamicPcdBuildData(String cName, String tsGuid) {\r
763 XmlObject o = getfpdDynPcdBuildDefs();\r
764 \r
765 XmlCursor cursor = o.newCursor();\r
766 if (cursor.toFirstChild()) {\r
767 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = \r
768 (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
769 while (!(pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid))) {\r
770 cursor.toNextSibling();\r
771 pcdBuildData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
772 }\r
773 \r
774 cursor.removeXml();\r
775 }\r
776 cursor.dispose();\r
777 }\r
778 //\r
779 // Get the Sku Info count of ith dyn pcd element.\r
780 //\r
781 public int getDynamicPcdSkuInfoCount(int i){\r
782 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
783 return 0;\r
784 }\r
785 \r
786 int skuInfoCount = 0;\r
787 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
788 if (cursor.toFirstChild()) {\r
789 for (int j = 0; j < i; ++j) {\r
790 cursor.toNextSibling();\r
791 }\r
792 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
793 if (pcdData.getSkuInfoList() == null) {\r
794 skuInfoCount = 0;\r
795 }\r
796 else {\r
797 skuInfoCount = pcdData.getSkuInfoList().size();\r
798 }\r
799 }\r
800 cursor.dispose();\r
801 return skuInfoCount;\r
802 }\r
803 \r
804 public void getDynamicPcdSkuInfos(int i, String[][] saa){\r
805 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
806 return;\r
807 }\r
808 \r
809 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
810 if (cursor.toFirstChild()) {\r
811 for (int j = 0; j < i; ++j) {\r
812 cursor.toNextSibling();\r
813 }\r
814 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
815 if (pcdData.getSkuInfoList() == null) {\r
816 cursor.dispose();\r
817 return;\r
818 }\r
819 else {\r
820 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
821 int k = 0;\r
822 while (li.hasNext()) {\r
823 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
824 saa[k][0] = skuInfo.getSkuId()+"";\r
825 saa[k][1] = skuInfo.getVariableName();\r
826 saa[k][2] = skuInfo.getVariableGuid();\r
827 saa[k][3] = skuInfo.getVariableOffset();\r
828 saa[k][4] = skuInfo.getHiiDefaultValue();\r
829 saa[k][5] = skuInfo.getVpdOffset();\r
830 saa[k][6] = skuInfo.getValue();\r
831 ++k;\r
832 }\r
833 \r
834 }\r
835 }\r
836 cursor.dispose();\r
837 \r
838 }\r
839 \r
840 public String getDynamicPcdBuildDataValue(int i){\r
841 String value = null;\r
842 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
843 return value;\r
844 }\r
845 \r
846 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
847 if (cursor.toFirstChild()) {\r
848 for (int j = 0; j < i; ++j) {\r
849 cursor.toNextSibling();\r
850 }\r
851 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
852 if (pcdData.getSkuInfoList() == null) {\r
853 value = null;\r
854 }\r
855 else {\r
856 value = pcdData.getSkuInfoArray(0).getValue();\r
857 }\r
858 }\r
859 cursor.dispose();\r
860 return value;\r
861 }\r
862 \r
863 public String getDynamicPcdBuildDataVpdOffset(int i){\r
864 String vpdOffset = null;\r
865 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
866 return vpdOffset;\r
867 }\r
868 \r
869 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
870 if (cursor.toFirstChild()) {\r
871 for (int j = 0; j < i; ++j) {\r
872 cursor.toNextSibling();\r
873 }\r
874 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
875 if (pcdData.getSkuInfoList() == null) {\r
876 vpdOffset = null;\r
877 }\r
878 else {\r
879 vpdOffset = pcdData.getSkuInfoArray(0).getVpdOffset();\r
880 }\r
881 }\r
882 cursor.dispose();\r
883 return vpdOffset;\r
884 }\r
885 \r
886 public void removeDynamicPcdBuildDataSkuInfo(int i) {\r
887 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
888 return;\r
889 }\r
890 \r
891 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
892 if (cursor.toFirstChild()) {\r
893 for (int j = 0; j < i; ++j) {\r
894 cursor.toNextSibling();\r
895 }\r
896 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
897 if (pcdData.getSkuInfoList() == null) {\r
898 cursor.dispose();\r
899 return;\r
900 }\r
901 else {\r
902 QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
903 cursor.toChild(qSkuInfo);\r
904 cursor.removeXml();\r
905 }\r
906 }\r
907 cursor.dispose();\r
908 }\r
909 //\r
910 // generate sku info for ith dyn pcd build data.\r
911 //\r
912 public void genDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
913 String hiiDefault, String vpdOffset, String value, int i) {\r
914 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
915 return;\r
916 }\r
917 \r
918 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
919 if (cursor.toFirstChild()) {\r
920 for (int j = 0; j < i; ++j) {\r
921 cursor.toNextSibling();\r
922 }\r
923 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
924 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = pcdData.addNewSkuInfo();\r
925 skuInfo.setSkuId(new BigInteger(id));\r
926 if (varName != null){\r
927 skuInfo.setVariableName(varName);\r
928 skuInfo.setVariableGuid(varGuid);\r
929 skuInfo.setVariableOffset(varOffset);\r
930 skuInfo.setHiiDefaultValue(hiiDefault);\r
931 }\r
932 else if (vpdOffset != null){\r
933 skuInfo.setVpdOffset(vpdOffset);\r
934 }\r
935 else{\r
936 skuInfo.setValue(value);\r
937 }\r
938 }\r
939 }\r
940 \r
941 public void updateDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
942 String hiiDefault, String vpdOffset, String value, int i){\r
943 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
944 return;\r
945 }\r
946 \r
947 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
948 if (cursor.toFirstChild()) {\r
949 for (int j = 0; j < i; ++j) {\r
950 cursor.toNextSibling();\r
951 }\r
952 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
953 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
954 while (li.hasNext()) {\r
955 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
956 if (skuInfo.getSkuId().toString().equals(id)){\r
957 if (varName != null){\r
958 skuInfo.setVariableName(varName);\r
959 skuInfo.setVariableGuid(varGuid);\r
960 skuInfo.setVariableOffset(varOffset);\r
961 skuInfo.setHiiDefaultValue(hiiDefault);\r
962 }\r
963 else if (vpdOffset != null){\r
964 skuInfo.setVpdOffset(vpdOffset);\r
965 }\r
966 else{\r
967 skuInfo.setValue(value);\r
968 }\r
969 break;\r
970 }\r
971 }\r
972 }\r
973 }\r
974 \r
975 public void removePcdDataFromLibraryInstance(String moduleKey, String libInstanceKey){\r
976 ModuleSADocument.ModuleSA moduleSa = getModuleSA(moduleKey);\r
977 //\r
978 // should better maintain pcd from lib instance only, but maintain all is acceptable now. \r
979 //\r
980 maintainDynPcdMap(moduleSa.getPcdBuildDefinition(), libInstanceKey);\r
981 \r
982 }\r
983 \r
984 public BuildOptionsDocument.BuildOptions getfpdBuildOpts() {\r
985 if (fpdBuildOpts == null) {\r
986 fpdBuildOpts = fpdRoot.addNewBuildOptions();\r
987 }\r
988 return fpdBuildOpts;\r
989 }\r
990 \r
991 public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
992 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
993 if (udats == null) {\r
994 udats = getfpdBuildOpts().addNewUserDefinedAntTasks();\r
995 }\r
996 \r
997 AntTaskDocument.AntTask at = udats.addNewAntTask();\r
998 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
999 }\r
1000 \r
1001 private void setBuildOptionsUserDefAntTask(String id, String fileName, String execOrder, AntTaskDocument.AntTask at) {\r
1002 at.setId(new Integer(id));\r
1003 if (fileName != null){\r
1004 at.setFilename(fileName);\r
1005 }\r
202c4f38 1006 if (execOrder != null) {\r
a13899c5 1007 at.setAntCmdOptions(execOrder);\r
1008 }\r
1009 }\r
1010 \r
1011 public void removeBuildOptionsUserDefAntTask(int i) {\r
1012 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1013 if (o == null) {\r
1014 return;\r
1015 }\r
1016 XmlCursor cursor = o.newCursor();\r
1017 if (cursor.toFirstChild()) {\r
1018 for (int j = 0; j < i; ++j) {\r
1019 cursor.toNextSibling();\r
1020 }\r
1021 cursor.removeXml();\r
1022 }\r
1023 cursor.dispose();\r
1024 }\r
1025 \r
1026 public void updateBuildOptionsUserDefAntTask(int i, String id, String fileName, String execOrder){\r
1027 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1028 if (o == null) {\r
1029 return;\r
1030 }\r
1031 XmlCursor cursor = o.newCursor();\r
1032 if (cursor.toFirstChild()) {\r
1033 for (int j = 0; j < i; ++j) {\r
1034 cursor.toNextSibling();\r
1035 }\r
1036 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)cursor.getObject();\r
1037 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
1038 }\r
1039 cursor.dispose();\r
1040 }\r
1041 \r
1042 public int getBuildOptionsUserDefAntTaskCount() {\r
1043 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1044 if (udats == null || udats.getAntTaskList() == null) {\r
1045 return 0;\r
1046 }\r
1047 \r
1048 return udats.getAntTaskList().size();\r
1049 }\r
1050 \r
1051 public void getBuildOptionsUserDefAntTasks(String[][] saa) {\r
1052 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1053 if (udats == null || udats.getAntTaskList() == null) {\r
1054 return ;\r
1055 }\r
1056 \r
1057 List<AntTaskDocument.AntTask> l = udats.getAntTaskList();\r
1058 ListIterator li = l.listIterator();\r
1059 int i = 0;\r
1060 while (li.hasNext()) {\r
1061 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)li.next();\r
1062 saa[i][0] = at.getId() + "";\r
1063 saa[i][1] = saa[i][2] = "";\r
1064 if (at.getFilename() != null){\r
1065 saa[i][1] = at.getFilename();\r
1066 }\r
1067 if (at.getAntCmdOptions() != null) {\r
1068 saa[i][2] = at.getAntCmdOptions();\r
1069 }\r
1070 ++i;\r
1071 }\r
1072 }\r
1073 public void genBuildOptionsOpt(String buildTargets, String toolChain, String tagName, String toolCmd, String archList, String contents) {\r
1074 OptionsDocument.Options opts = getfpdBuildOpts().getOptions();\r
1075 if (opts == null) {\r
1076 opts = getfpdBuildOpts().addNewOptions();\r
1077 }\r
1078 OptionDocument.Option opt = opts.addNewOption();\r
1079 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1080 }\r
1081 \r
1082 private void setBuildOptionsOpt(String buildTargets, String toolChain, String tagName, String toolCmd, String archList, String contents, OptionDocument.Option opt){\r
1083 opt.setStringValue(contents);\r
1084// opt.setBuildTargets(buildTargets);\r
1085 opt.setToolChainFamily(toolChain);\r
1086 opt.setTagName(tagName);\r
1087 opt.setToolCode(toolCmd);\r
1088 String[] s = archList.split(" ");\r
1089 ArrayList<String> al = new ArrayList<String>();\r
1090 for (int i = 0; i < s.length; ++i) {\r
1091 al.add(s[i]);\r
1092 }\r
1093 opt.setSupArchList(al);\r
1094 }\r
1095 \r
1096 public void removeBuildOptionsOpt(int i){\r
1097 \r
1098 XmlObject o = getfpdBuildOpts().getOptions();\r
1099 if (o == null) {\r
1100 return;\r
1101 }\r
1102 \r
1103 XmlCursor cursor = o.newCursor();\r
1104 if (cursor.toFirstChild()) {\r
1105 for (int j = 0; j < i; ++j) {\r
1106 cursor.toNextSibling();\r
1107 }\r
1108 cursor.removeXml();\r
1109 }\r
1110 cursor.dispose();\r
1111 }\r
1112 \r
1113 public void updateBuildOptionsOpt(int i, String buildTargets, String toolChain, String tagName, String toolCmd, String archList, String contents) {\r
1114 XmlObject o = getfpdBuildOpts().getOptions();\r
1115 if (o == null) {\r
1116 return;\r
1117 }\r
1118 \r
1119 XmlCursor cursor = o.newCursor();\r
1120 if (cursor.toFirstChild()) {\r
1121 for (int j = 0; j < i; ++j) {\r
1122 cursor.toNextSibling();\r
1123 }\r
1124 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
1125 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1126 }\r
1127 cursor.dispose();\r
1128 }\r
1129 \r
1130 public int getBuildOptionsOptCount(){\r
1131 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1132 return 0;\r
1133 }\r
1134 return getfpdBuildOpts().getOptions().getOptionList().size();\r
1135 }\r
1136 \r
1137 public void getBuildOptionsOpts(String[][] saa) {\r
1138 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1139 return ;\r
1140 }\r
1141 \r
1142 List<OptionDocument.Option> lOpt = getfpdBuildOpts().getOptions().getOptionList();\r
1143 ListIterator li = lOpt.listIterator();\r
1144 int i = 0;\r
1145 while(li.hasNext()) {\r
1146 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
1147// saa[i][0] = opt.getBuildTargets();\r
1148 saa[i][1] = opt.getToolChainFamily();\r
1149 if (opt.getSupArchList() != null){\r
1150 Object[] archs = opt.getSupArchList().toArray();\r
1151 saa[i][2] = " ";\r
1152 for (int j = 0; j < archs.length; ++j){\r
1153 saa[i][2] += archs[j];\r
1154 saa[i][2] += " ";\r
1155 }\r
1156 saa[i][2] = saa[i][2].trim();\r
1157 }\r
1158 saa[i][3] = opt.getToolCode();\r
1159 saa[i][4] = opt.getTagName();\r
1160 saa[i][5] = opt.getStringValue();\r
1161 \r
1162 ++i;\r
1163 }\r
1164 }\r
1165 \r
1166 public PlatformDefinitionsDocument.PlatformDefinitions getfpdPlatformDefs(){\r
1167 if (fpdPlatformDefs == null){\r
1168 fpdPlatformDefs = fpdRoot.addNewPlatformDefinitions();\r
1169 }\r
1170 return fpdPlatformDefs;\r
1171 }\r
1172 \r
1173 public FlashDocument.Flash getfpdFlash() {\r
1174 if (fpdFlash == null) {\r
1175 fpdFlash = fpdRoot.addNewFlash();\r
1176 }\r
1177 return fpdFlash;\r
1178 }\r
1179 \r
1180 public void genFlashDefinitionFile(String file) {\r
1181 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
1182 if (fdf == null) {\r
1183 fdf = getfpdFlash().addNewFlashDefinitionFile();\r
1184 }\r
1185 \r
1186 fdf.setStringValue(file);\r
1187 }\r
1188 \r
1189 public String getFlashDefinitionFile() {\r
1190 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
1191 if (fdf == null) {\r
1192 return "";\r
1193 }\r
1194 \r
1195 return fdf.getStringValue();\r
1196 }\r
1197 \r
1198 \r
1199 \r
1200 public void genFvImagesNameValue(String name, String value) {\r
1201 \r
1202 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
1203 if (fi == null) {\r
1204 fi = getfpdFlash().addNewFvImages();\r
1205 }\r
1206 \r
1207 FvImagesDocument.FvImages.NameValue nv = fi.addNewNameValue();\r
1208 nv.setName(name);\r
1209 nv.setValue(value);\r
1210 }\r
1211 \r
1212 public void removeFvImagesNameValue(int i){\r
1213 \r
1214 XmlObject o = getfpdFlash().getFvImages();\r
1215 if (o == null) {\r
1216 return;\r
1217 }\r
1218 \r
1219 QName qNameValue = new QName(xmlNs, "NameValue");\r
1220 XmlCursor cursor = o.newCursor();\r
1221 if (cursor.toChild(qNameValue)) {\r
1222 for (int j = 0; j < i; ++j) {\r
1223 cursor.toNextSibling(qNameValue);\r
1224 }\r
1225 cursor.removeXml();\r
1226 }\r
1227 cursor.dispose();\r
1228 }\r
1229 \r
1230 public void updateFvImagesNameValue(int i, String name, String value){\r
1231 \r
1232 XmlObject o = getfpdFlash().getFvImages();\r
1233 if (o == null) {\r
1234 return;\r
1235 }\r
1236 \r
1237 QName qNameValue = new QName(xmlNs, "NameValue");\r
1238 XmlCursor cursor = o.newCursor();\r
1239 if (cursor.toChild(qNameValue)) {\r
1240 for (int j = 0; j < i; ++j) {\r
1241 cursor.toNextSibling(qNameValue);\r
1242 }\r
1243 FvImagesDocument.FvImages.NameValue nv = (FvImagesDocument.FvImages.NameValue)cursor.getObject();\r
1244 nv.setName(name);\r
1245 nv.setValue(value);\r
1246 }\r
1247 cursor.dispose();\r
1248 }\r
1249 \r
1250 public int getFvImagesNameValueCount() {\r
1251 \r
1252 FvImagesDocument.FvImages fi = null;\r
1253 if ((fi = getfpdFlash().getFvImages()) == null || fi.getNameValueList() == null) {\r
1254 return 0;\r
1255 }\r
1256 return fi.getNameValueList().size();\r
1257 }\r
1258 \r
1259 public void getFvImagesNameValues(String[][] nv) {\r
1260 \r
1261 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
1262 if (fi == null){\r
1263 return;\r
1264 }\r
1265 List<FvImagesDocument.FvImages.NameValue> l = fi.getNameValueList();\r
1266 int i = 0;\r
1267 ListIterator li = l.listIterator();\r
1268 while (li.hasNext()) {\r
1269 FvImagesDocument.FvImages.NameValue e = (FvImagesDocument.FvImages.NameValue) li\r
1270 .next();\r
1271 nv[i][0] = e.getName();\r
1272 nv[i][1] = e.getValue();\r
1273 \r
1274 i++;\r
1275 }\r
1276 }\r
1277 \r
1278 public void genFvImagesFvImage(String[] names, String types, Map<String, String> options) {\r
1279 \r
1280 FvImagesDocument.FvImages fis = null;\r
1281 if ((fis = getfpdFlash().getFvImages()) == null) {\r
1282 fis = getfpdFlash().addNewFvImages();\r
1283 }\r
1284 \r
1285 //\r
1286 //gen FvImage with FvImageNames array\r
1287 //\r
1288 FvImagesDocument.FvImages.FvImage fi = fis.addNewFvImage();\r
1289 for (int i = 0; i < names.length; ++i) {\r
1290 fi.addFvImageNames(names[i]);\r
1291 }\r
1292 fi.setType(FvImageTypes.Enum.forString(types));\r
1293 if (options != null){\r
1294 setFvImagesFvImageFvImageOptions(options, fi);\r
1295 }\r
1296 }\r
1297 \r
1298 private void setFvImagesFvImageFvImageOptions(Map<String, String> options, FvImagesDocument.FvImages.FvImage fi){\r
1299 FvImagesDocument.FvImages.FvImage.FvImageOptions fio = fi.getFvImageOptions();\r
1300 if (fio == null){\r
1301 fio = fi.addNewFvImageOptions();\r
1302 }\r
1303 \r
1304 Set<String> key = options.keySet();\r
1305 Iterator<String> i = key.iterator();\r
1306 while (i.hasNext()) {\r
44053733 1307 \r
a13899c5 1308 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
1309 String k = (String)i.next();\r
44053733 1310 if (k.equals("EFI_ALIGNMENT_CAP")) {\r
1311 nv.setName(k);\r
1312 nv.setValue("TRUE");\r
1313 setFvImageOptionsAlign((String)options.get(k), fio);\r
1314 continue;\r
1315 }\r
a13899c5 1316 nv.setName(k);\r
1317 nv.setValue((String)options.get(k));\r
1318 \r
1319 }\r
1320 \r
1321 }\r
1322 \r
44053733 1323 private void setFvImageOptionsAlign(String alignValue, FvImagesDocument.FvImages.FvImage.FvImageOptions fio) {\r
1324 int numForm = -1;\r
1325 if (alignValue.endsWith("K")) {\r
1326 alignValue = alignValue.substring(0, alignValue.length()-1);\r
1327 numForm = new Integer(alignValue).intValue() * 1024;\r
1328 }\r
1329 else {\r
1330 numForm = new Integer(alignValue).intValue();\r
1331 }\r
1332 \r
1333 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = null;\r
1334 if (numForm / (64*1024) >= 1) {\r
1335 nv = fio.addNewNameValue();\r
1336 nv.setName("EFI_ALIGNMENT_64K");\r
1337 nv.setValue("TRUE");\r
1338 }\r
1339 else {\r
1340 nv = fio.addNewNameValue();\r
1341 nv.setName("EFI_ALIGNMENT_64K");\r
1342 nv.setValue("FALSE");\r
1343 }\r
1344 \r
1345 if (numForm / (32*1024) >= 1) {\r
1346 nv = fio.addNewNameValue();\r
1347 nv.setName("EFI_ALIGNMENT_32K");\r
1348 nv.setValue("TRUE");\r
1349 }\r
1350 else {\r
1351 nv = fio.addNewNameValue();\r
1352 nv.setName("EFI_ALIGNMENT_32K");\r
1353 nv.setValue("FALSE");\r
1354 }\r
1355 \r
1356 if (numForm / (16*1024) >= 1) {\r
1357 nv = fio.addNewNameValue();\r
1358 nv.setName("EFI_ALIGNMENT_16K");\r
1359 nv.setValue("TRUE");\r
1360 }\r
1361 else {\r
1362 nv = fio.addNewNameValue();\r
1363 nv.setName("EFI_ALIGNMENT_16K");\r
1364 nv.setValue("FALSE");\r
1365 }\r
1366 \r
1367 if (numForm / (8*1024) >= 1) {\r
1368 nv = fio.addNewNameValue();\r
1369 nv.setName("EFI_ALIGNMENT_8K");\r
1370 nv.setValue("TRUE");\r
1371 }\r
1372 else {\r
1373 nv = fio.addNewNameValue();\r
1374 nv.setName("EFI_ALIGNMENT_8K");\r
1375 nv.setValue("FALSE");\r
1376 }\r
1377 \r
1378 if (numForm / (4*1024) >= 1) {\r
1379 nv = fio.addNewNameValue();\r
1380 nv.setName("EFI_ALIGNMENT_4K");\r
1381 nv.setValue("TRUE");\r
1382 }\r
1383 else {\r
1384 nv = fio.addNewNameValue();\r
1385 nv.setName("EFI_ALIGNMENT_4K");\r
1386 nv.setValue("FALSE");\r
1387 }\r
1388 \r
1389 if (numForm / (2*1024) >= 1) {\r
1390 nv = fio.addNewNameValue();\r
1391 nv.setName("EFI_ALIGNMENT_2K");\r
1392 nv.setValue("TRUE");\r
1393 }\r
1394 else {\r
1395 nv = fio.addNewNameValue();\r
1396 nv.setName("EFI_ALIGNMENT_2K");\r
1397 nv.setValue("FALSE");\r
1398 }\r
1399 \r
1400 if (numForm / (1*1024) >= 1) {\r
1401 nv = fio.addNewNameValue();\r
1402 nv.setName("EFI_ALIGNMENT_1K");\r
1403 nv.setValue("TRUE");\r
1404 }\r
1405 else {\r
1406 nv = fio.addNewNameValue();\r
1407 nv.setName("EFI_ALIGNMENT_1K");\r
1408 nv.setValue("FALSE");\r
1409 }\r
1410 \r
1411 if (numForm / (512) >= 1) {\r
1412 nv = fio.addNewNameValue();\r
1413 nv.setName("EFI_ALIGNMENT_512");\r
1414 nv.setValue("TRUE");\r
1415 }\r
1416 else {\r
1417 nv = fio.addNewNameValue();\r
1418 nv.setName("EFI_ALIGNMENT_512");\r
1419 nv.setValue("FALSE");\r
1420 }\r
1421 \r
1422 if (numForm / (256) >= 1) {\r
1423 nv = fio.addNewNameValue();\r
1424 nv.setName("EFI_ALIGNMENT_256");\r
1425 nv.setValue("TRUE");\r
1426 }\r
1427 else {\r
1428 nv = fio.addNewNameValue();\r
1429 nv.setName("EFI_ALIGNMENT_256");\r
1430 nv.setValue("FALSE");\r
1431 }\r
1432 \r
1433 if (numForm / (128) >= 1) {\r
1434 nv = fio.addNewNameValue();\r
1435 nv.setName("EFI_ALIGNMENT_128");\r
1436 nv.setValue("TRUE");\r
1437 }\r
1438 else {\r
1439 nv = fio.addNewNameValue();\r
1440 nv.setName("EFI_ALIGNMENT_128");\r
1441 nv.setValue("FALSE");\r
1442 }\r
1443 \r
1444 if (numForm / (64) >= 1) {\r
1445 nv = fio.addNewNameValue();\r
1446 nv.setName("EFI_ALIGNMENT_64");\r
1447 nv.setValue("TRUE");\r
1448 }\r
1449 else {\r
1450 nv = fio.addNewNameValue();\r
1451 nv.setName("EFI_ALIGNMENT_64");\r
1452 nv.setValue("FALSE");\r
1453 }\r
1454 \r
1455 if (numForm / (32) >= 1) {\r
1456 nv = fio.addNewNameValue();\r
1457 nv.setName("EFI_ALIGNMENT_32");\r
1458 nv.setValue("TRUE");\r
1459 }\r
1460 else {\r
1461 nv = fio.addNewNameValue();\r
1462 nv.setName("EFI_ALIGNMENT_32");\r
1463 nv.setValue("FALSE");\r
1464 }\r
1465 \r
1466 if (numForm / (16) >= 1) {\r
1467 nv = fio.addNewNameValue();\r
1468 nv.setName("EFI_ALIGNMENT_16");\r
1469 nv.setValue("TRUE");\r
1470 }\r
1471 else {\r
1472 nv = fio.addNewNameValue();\r
1473 nv.setName("EFI_ALIGNMENT_16");\r
1474 nv.setValue("FALSE");\r
1475 }\r
1476 \r
1477 if (numForm / (8) >= 1) {\r
1478 nv = fio.addNewNameValue();\r
1479 nv.setName("EFI_ALIGNMENT_8");\r
1480 nv.setValue("TRUE");\r
1481 }\r
1482 else {\r
1483 nv = fio.addNewNameValue();\r
1484 nv.setName("EFI_ALIGNMENT_8");\r
1485 nv.setValue("FALSE");\r
1486 }\r
1487 \r
1488 if (numForm / (4) >= 1) {\r
1489 nv = fio.addNewNameValue();\r
1490 nv.setName("EFI_ALIGNMENT_4");\r
1491 nv.setValue("TRUE");\r
1492 }\r
1493 else {\r
1494 nv = fio.addNewNameValue();\r
1495 nv.setName("EFI_ALIGNMENT_4");\r
1496 nv.setValue("FALSE");\r
1497 }\r
1498 \r
1499 if (numForm / (2) >= 1) {\r
1500 nv = fio.addNewNameValue();\r
1501 nv.setName("EFI_ALIGNMENT_2");\r
1502 nv.setValue("TRUE");\r
1503 }\r
1504 else {\r
1505 nv = fio.addNewNameValue();\r
1506 nv.setName("EFI_ALIGNMENT_2");\r
1507 nv.setValue("FALSE");\r
1508 }\r
1509 \r
1510 }\r
1511 \r
a13899c5 1512 public void removeFvImagesFvImage(int i) {\r
1513 \r
1514 XmlObject o = getfpdFlash().getFvImages();\r
1515 if (o == null) {\r
1516 return;\r
1517 }\r
1518 \r
1519 QName qFvImage = new QName(xmlNs, "FvImage");\r
1520 XmlCursor cursor = o.newCursor();\r
1521 if (cursor.toChild(qFvImage)) {\r
1522 for (int j = 0; j < i; ++j) {\r
1523 cursor.toNextSibling(qFvImage);\r
1524 }\r
1525 cursor.removeXml();\r
1526 }\r
1527 cursor.dispose();\r
1528 }\r
1529 \r
1530 public void updateFvImagesFvImage(int i, String[] names, String types, Map<String, String> options){\r
1531 \r
1532 XmlObject o = getfpdFlash().getFvImages();\r
1533 if (o == null) {\r
1534 return;\r
1535 }\r
1536 XmlCursor cursor = o.newCursor();\r
1537 QName qFvImage = new QName(xmlNs, "FvImage");\r
1538 if (cursor.toChild(qFvImage)) {\r
1539 for (int j = 0; j < i; ++j) {\r
1540 cursor.toNextSibling(qFvImage);\r
1541 }\r
1542 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
1543 fi.setType(FvImageTypes.Enum.forString(types));\r
1544 \r
1545 //\r
1546 // remove old FvImageNames before adding new ones\r
1547 //\r
1548 QName qFvImageNames = new QName(xmlNs, "FvImageNames"); \r
1549 cursor.toChild(qFvImageNames);\r
1550 cursor.removeXml();\r
1551 while (cursor.toNextSibling(qFvImageNames)) {\r
1552 cursor.removeXml();\r
1553 }\r
1554 \r
1555 for (int k = 0; k < names.length; ++k) {\r
1556 fi.addFvImageNames(names[k]);\r
1557 }\r
1558 //\r
1559 // remove old FvImageOptions before adding new options\r
1560 //\r
1561 QName qFvImageOptions = new QName(xmlNs, "FvImageOptions");\r
1562 cursor.toNextSibling(qFvImageOptions);\r
1563 cursor.removeXml();\r
1564 \r
1565 setFvImagesFvImageFvImageOptions(options, fi);\r
1566 }\r
1567 cursor.dispose();\r
1568 }\r
1569 \r
1570 public int getFvImagesFvImageCount() {\r
1571 \r
1572 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
1573 return 0;\r
1574 }\r
1575 return getfpdFlash().getFvImages().getFvImageList().size();\r
1576 }\r
1577 \r
1578 public void getFvImagesFvImages(String[][] saa, ArrayList<LinkedHashMap<String, String>> options) {\r
1579 \r
1580 if (getfpdFlash().getFvImages() == null) {\r
1581 return;\r
1582 }\r
1583 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
1584 if (l == null) {\r
1585 return;\r
1586 }\r
1587 ListIterator li = l.listIterator();\r
1588 int i = 0;\r
1589 while(li.hasNext()) {\r
1590 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
1591 //\r
1592 // get FvImageNames array, space separated\r
1593 //\r
1594 List<String> lfn = fi.getFvImageNamesList();\r
1595 ListIterator lfni = lfn.listIterator();\r
1596 saa[i][0] = " ";\r
1597 while (lfni.hasNext()) {\r
1598 saa[i][0] += (String)lfni.next();\r
1599 saa[i][0] += " ";\r
1600 }\r
1601 saa[i][0] = saa[i][0].trim();\r
1602 \r
1603 saa[i][1] = fi.getType()+"";\r
1604 \r
1605 //\r
1606 // get FvImageOptions into Map[i]\r
1607 //\r
1608 FvImagesDocument.FvImages.FvImage.FvImageOptions fo = fi.getFvImageOptions();\r
1609 if (fo == null) {\r
1610 ++i;\r
1611 continue;\r
1612 }\r
1613 List<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> lnv = fo.getNameValueList();\r
1614 if (lnv == null || lnv.isEmpty()) {\r
1615 ++i;\r
1616 continue;\r
1617 }\r
1618 ListIterator lnvi = lnv.listIterator();\r
1619 while (lnvi.hasNext()) {\r
1620 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = (FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue)lnvi.next();\r
1621 Map<String, String> m = options.get(i);\r
1622 m.put(nv.getName(), nv.getValue());\r
1623 }\r
1624 \r
1625 ++i;\r
1626 }\r
1627 }\r
1628 \r
1629 /**\r
1630 Get platform header element\r
1631 @return PlatformHeaderDocument.PlatformHeader\r
1632 **/\r
1633 public PlatformHeaderDocument.PlatformHeader getFpdHdr() {\r
1634 if (fpdHdr == null) {\r
1635 fpdHdr = fpdRoot.addNewPlatformHeader();\r
1636 }\r
1637 genPlatformDefsSkuInfo("0", "DEFAULT");\r
1638 return fpdHdr;\r
1639 }\r
1640 \r
1641 public void genPlatformDefsSkuInfo(String id, String name) {\r
1642 SkuInfoDocument.SkuInfo skuInfo = null;\r
1643 if (getfpdPlatformDefs().getSkuInfo() == null) {\r
1644 skuInfo = getfpdPlatformDefs().addNewSkuInfo();\r
1645 }\r
1646 skuInfo = getfpdPlatformDefs().getSkuInfo();\r
1647 if (skuInfo.getUiSkuNameList() == null || skuInfo.getUiSkuNameList().size() == 0) {\r
1648 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1649 skuName.setSkuID(new BigInteger("0"));\r
1650 skuName.setStringValue("DEFAULT");\r
1651 }\r
1652 if (id.equals("0")) {\r
1653 return;\r
1654 }\r
1655 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1656 skuName.setSkuID(new BigInteger(id));\r
1657 skuName.setStringValue(name);\r
1658 \r
1659 \r
1660 }\r
1661 public String getFpdHdrPlatformName() {\r
1662 return getFpdHdr().getPlatformName();\r
1663 }\r
1664 \r
1665 public String getFpdHdrGuidValue() {\r
1666 return getFpdHdr().getGuidValue();\r
1667 }\r
1668 \r
1669 public String getFpdHdrVer() {\r
1670 return getFpdHdr().getVersion();\r
1671 }\r
1672 \r
1673 public String getFpdHdrAbs() {\r
1674 return getFpdHdr().getAbstract();\r
1675 }\r
1676 \r
1677 public String getFpdHdrDescription() {\r
1678 return getFpdHdr().getDescription();\r
1679 }\r
1680 \r
1681 public String getFpdHdrCopyright() {\r
1682 return getFpdHdr().getCopyright();\r
1683 }\r
1684 \r
1685 public String getFpdHdrLicense() {\r
1686 LicenseDocument.License l = getFpdHdr().getLicense();\r
1687 if (l == null) {\r
1688 return null;\r
1689 }\r
1690 return l.getStringValue();\r
1691 }\r
1692 \r
1693 public String getFpdHdrUrl() {\r
1694 LicenseDocument.License l = getFpdHdr().getLicense();\r
1695 if (l == null) {\r
1696 return null;\r
1697 }\r
1698 return l.getURL();\r
1699 }\r
1700 \r
1701 public String getFpdHdrSpec() {\r
1702\r
1703 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
1704// return getFpdHdr().getSpecification();\r
1705 }\r
1706 \r
1707 public void setFpdHdrPlatformName(String name){\r
1708 getFpdHdr().setPlatformName(name);\r
1709 }\r
1710 \r
1711 public void setFpdHdrGuidValue(String guid){\r
1712 getFpdHdr().setGuidValue(guid);\r
1713 }\r
1714 \r
1715 public void setFpdHdrVer(String v){\r
1716 getFpdHdr().setVersion(v);\r
1717 }\r
1718 \r
1719 public void setFpdHdrAbs(String abs) {\r
1720 getFpdHdr().setAbstract(abs);\r
1721 }\r
1722 \r
1723 public void setFpdHdrDescription(String desc){\r
1724 getFpdHdr().setDescription(desc);\r
1725 }\r
1726 \r
1727 public void setFpdHdrCopyright(String cr) {\r
1728 getFpdHdr().setCopyright(cr);\r
1729 }\r
1730 \r
1731 public void setFpdHdrLicense(String license){\r
1732 LicenseDocument.License l = getFpdHdr().getLicense();\r
1733 if (l == null) {\r
1734 getFpdHdr().addNewLicense().setStringValue(license);\r
1735 }\r
1736 else {\r
1737 l.setStringValue(license);\r
1738 }\r
1739 }\r
1740\r
1741 public void setFpdHdrUrl(String url){\r
1742 LicenseDocument.License l = getFpdHdr().getLicense();\r
1743 \r
1744 l.setURL(url);\r
1745 \r
1746 }\r
1747 \r
1748 public void setFpdHdrSpec(String s){\r
1749 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
1750 getFpdHdr().setSpecification(s);\r
1751 }\r
1752 /**\r
1753 Save the processed xml contents to file\r
1754 \r
1755 @param fpdFile The file to save xml contents\r
1756 @throws IOException Exceptions during file operation\r
1757 **/\r
1758 public void saveAs(File fpdFile) throws IOException {\r
1759\r
1760 XmlOptions options = new XmlOptions();\r
1761\r
1762 options.setCharacterEncoding("UTF-8");\r
1763 options.setSavePrettyPrint();\r
1764 options.setSavePrettyPrintIndent(2);\r
1765 try {\r
1766 fpdd.save(fpdFile, options);\r
1767 } catch (IOException e) {\r
1768 e.printStackTrace();\r
1769 }\r
1770\r
1771 }\r
1772 \r
1773 private String listToString(List<String> l) {\r
1774 if (l == null) {\r
1775 return null;\r
1776 }\r
1777 String s = " ";\r
1778 ListIterator li = l.listIterator();\r
1779 while(li.hasNext()) {\r
1780 s += li.next();\r
1781 s += " ";\r
1782 }\r
1783 return s.trim();\r
1784 }\r
1785}\r