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