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