]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
set MaxDatumSize for PcdData.
[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
34c614e1 779 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module " + mi.getName());\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
34c614e1 791 \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
1faac7b6 876 /* Comment out Item type checking temporarily.\r
a13899c5 877 if (itemType.equals("DYNAMIC")) {\r
878 \r
879 ListIterator li = pcdConsumer.listIterator();\r
880 while(li.hasNext()) {\r
881 String value = li.next().toString();\r
882 String[] valuePart= value.split(" ");\r
34c614e1 883 if (!valuePart[5].equals("DYNAMIC")) {\r
a13899c5 884 //ToDo error for same pcd, other type than dynamic\r
885 pcdConsumer.remove(listValue);\r
34c614e1 886 throw new PcdItemTypeConflictException(cName, value);\r
a13899c5 887 }\r
888 }\r
889 }\r
890 else {\r
891 ListIterator li = pcdConsumer.listIterator();\r
892 while(li.hasNext()) {\r
893 String value = li.next().toString();\r
894 String[] valuePart= value.split(" ");\r
34c614e1 895 if (valuePart[5].equals("DYNAMIC")) {\r
a13899c5 896 //ToDo error for same pcd, other type than non-dynamic\r
897 pcdConsumer.remove(listValue);\r
34c614e1 898 throw new PcdItemTypeConflictException(cName, value);\r
a13899c5 899 }\r
900 }\r
901 }\r
1faac7b6 902 */\r
a13899c5 903 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData fpdPcd = moduleSa.getPcdBuildDefinition().addNewPcdData();\r
904 fpdPcd.setCName(cName);\r
905 fpdPcd.setToken(token);\r
906 fpdPcd.setTokenSpaceGuidCName(tsGuid);\r
907 fpdPcd.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
908 fpdPcd.setItemType(PcdItemTypes.Enum.forString(itemType));\r
802e0055 909 if (dataType.equals("UINT8")){\r
910 fpdPcd.setMaxDatumSize(1);\r
911 }\r
912 if (dataType.equals("UINT16")) {\r
913 fpdPcd.setMaxDatumSize(2);\r
914 }\r
915 if (dataType.equals("UINT32")) {\r
916 fpdPcd.setMaxDatumSize(4);\r
917 }\r
918 if (dataType.equals("UINT64")){\r
919 fpdPcd.setMaxDatumSize(8);\r
920 }\r
921 if (dataType.equals("BOOLEAN")){\r
922 fpdPcd.setMaxDatumSize(1);\r
923 }\r
924 if (dataType.equals("VOID*")) {\r
925 int maxSize = setMaxSizeForPointer(fpdPcd.getValue());\r
926 fpdPcd.setMaxDatumSize(maxSize);\r
927 }\r
a13899c5 928 \r
929 if (itemType.equals("DYNAMIC") || itemType.equals("DYNAMIC_EX")) {\r
930 ArrayList<String> al = LookupDynamicPcdBuildDefinition(cName + " " + tsGuid);\r
931 //\r
932 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.\r
933 // so need to add one dyn pcd.\r
934 //\r
935 if (al.size() == 1) {\r
936 addDynamicPcdBuildData(cName, token, tsGuid, itemType, dataType, defaultVal);\r
937 }\r
938 }\r
939 else {\r
940 if (defaultVal != null){\r
941 fpdPcd.setValue(defaultVal);\r
942 }\r
943 else {\r
944 if (dataType.equals("UINT8") || dataType.equals("UINT16") || dataType.equals("UINT32") || dataType.equals("UINT64")) {\r
945 fpdPcd.setValue("0");\r
946 }\r
947 if (dataType.equals("BOOLEAN")){\r
948 fpdPcd.setValue("false");\r
949 }\r
950 if (dataType.equals("VOID*")) {\r
951 fpdPcd.setValue("");\r
952 }\r
953 }\r
802e0055 954 /*\r
a13899c5 955 if (dataType.equals("UINT8")){\r
956 fpdPcd.setMaxDatumSize(1);\r
957 }\r
958 if (dataType.equals("UINT16")) {\r
959 fpdPcd.setMaxDatumSize(2);\r
960 }\r
961 if (dataType.equals("UINT32")) {\r
962 fpdPcd.setMaxDatumSize(4);\r
963 }\r
964 if (dataType.equals("UINT64")){\r
965 fpdPcd.setMaxDatumSize(8);\r
966 }\r
967 if (dataType.equals("BOOLEAN")){\r
968 fpdPcd.setMaxDatumSize(1);\r
969 }\r
970 if (dataType.equals("VOID*")) {\r
971 int maxSize = setMaxSizeForPointer(fpdPcd.getValue());\r
972 fpdPcd.setMaxDatumSize(maxSize);\r
973 }\r
802e0055 974 */\r
a13899c5 975 }\r
976 }\r
977 \r
908b1c05 978 public int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{\r
a13899c5 979 if (datum == null) {\r
980 return 0;\r
981 }\r
982 char ch = datum.charAt(0);\r
983 int start, end;\r
984 String strValue;\r
985 //\r
986 // For void* type PCD, only three datum is support:\r
987 // 1) Unicode: string with start char is "L"\r
988 // 2) Ansci: String is ""\r
989 // 3) byte array: String start char "{"\r
990 // \r
991 if (ch == 'L') {\r
992 start = datum.indexOf('\"');\r
993 end = datum.lastIndexOf('\"');\r
994 if ((start > end) || \r
995 (end > datum.length())||\r
996 ((start == end) && (datum.length() > 0))) {\r
997 //ToDo Error handling here\r
82961247 998 throw new PcdValueMalFormed (datum);\r
a13899c5 999 }\r
1000\r
1001 strValue = datum.substring(start + 1, end);\r
1002 return strValue.length() * 2;\r
1003 } else if (ch == '\"'){\r
1004 start = datum.indexOf('\"');\r
1005 end = datum.lastIndexOf('\"');\r
1006 if ((start > end) || \r
1007 (end > datum.length())||\r
1008 ((start == end) && (datum.length() > 0))) {\r
82961247 1009 throw new PcdValueMalFormed (datum);\r
a13899c5 1010 }\r
1011 strValue = datum.substring(start + 1, end);\r
1012 return strValue.length();\r
1013 } else if (ch =='{') {\r
1014 String[] strValueArray;\r
1015\r
1016 start = datum.indexOf('{');\r
1017 end = datum.lastIndexOf('}');\r
1018 strValue = datum.substring(start + 1, end);\r
1019 strValue = strValue.trim();\r
1020 if (strValue.length() == 0) {\r
1021 return 0;\r
1022 }\r
1023 strValueArray = strValue.split(",");\r
1024 for (int index = 0; index < strValueArray.length; index ++) {\r
1025 Integer value = Integer.decode(strValueArray[index].trim());\r
1026 \r
1027 if (value > 0xFF) {\r
1028// "[FPD file error] The datum type of PCD %s in %s is VOID*, "+\r
1029// "it is byte array in fact. But the element of %s exceed the byte range",\r
82961247 1030 throw new PcdValueMalFormed (datum); \r
a13899c5 1031 }\r
1032 }\r
1033 return strValueArray.length;\r
1034\r
1035\r
1036 } else {\r
1037// "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+\r
1038// "1) UNICODE string: like L\"xxxx\";\r\n"+\r
1039// "2) ANSIC string: like \"xxx\";\r\n"+\r
1040// "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+\r
1041// "but the datum in seems does not following above format!",\r
82961247 1042 throw new PcdValueMalFormed (datum);\r
a13899c5 1043 \r
1044 }\r
1045 }\r
1046 \r
1047 private ArrayList<String> LookupDynamicPcdBuildDefinition(String dynPcdKey) {\r
1048 ArrayList<String> al = dynPcdMap.get(dynPcdKey);\r
1049 \r
1050 return al;\r
1051 }\r
1052 \r
1053 private ArrayList<String> LookupPlatformPcdData(String pcdKey) {\r
1054 \r
34c614e1 1055 return dynPcdMap.get(pcdKey);\r
a13899c5 1056 }\r
1057 \r
1058 public int getDynamicPcdBuildDataCount() {\r
5af6b67f 1059 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1060 removeElement(getfpdDynPcdBuildDefs());\r
1061 fpdDynPcdBuildDefs = null;\r
a13899c5 1062 return 0;\r
1063 }\r
1064 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();\r
1065 }\r
1066 \r
1067 public void getDynamicPcdBuildData(String[][] saa) {\r
5af6b67f 1068 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1069 removeElement(getfpdDynPcdBuildDefs());\r
1070 fpdDynPcdBuildDefs = null;\r
a13899c5 1071 return ;\r
1072 }\r
1073 List<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> l = getfpdDynPcdBuildDefs().getPcdBuildDataList();\r
1074 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> li = l.listIterator();\r
1075 int i = 0;\r
1076 while(li.hasNext()) {\r
1077 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcd = li.next();\r
1078 saa[i][0] = dynPcd.getCName();\r
1079 saa[i][1] = dynPcd.getToken().toString();\r
1080 saa[i][2] = dynPcd.getTokenSpaceGuidCName();\r
1081 saa[i][3] = dynPcd.getMaxDatumSize()+"";\r
1082 saa[i][4] = dynPcd.getDatumType().toString();\r
1083 \r
1084 ++i;\r
1085 }\r
1086 }\r
1087 \r
908b1c05 1088 public void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) \r
82961247 1089 throws PcdValueMalFormed{\r
a13899c5 1090 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcdData = getfpdDynPcdBuildDefs().addNewPcdBuildData();\r
1091 dynPcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
1092 dynPcdData.setCName(cName);\r
1093 dynPcdData.setToken(token);\r
1094 dynPcdData.setTokenSpaceGuidCName(tsGuid);\r
1095 dynPcdData.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
1096 \r
1097 BigInteger bigInt = new BigInteger("0");\r
1098 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = dynPcdData.addNewSkuInfo();\r
1099 skuInfo.setSkuId(bigInt);\r
1100 if (defaultVal != null){\r
1101 skuInfo.setValue(defaultVal);\r
1102 }\r
1103 else {\r
1104 if (dataType.equals("UINT8")){\r
1105 skuInfo.setValue("0");\r
1106 }\r
1107 if (dataType.equals("UINT16")) {\r
1108 skuInfo.setValue("0");\r
1109 }\r
1110 if (dataType.equals("UINT32")) {\r
1111 skuInfo.setValue("0");\r
1112 }\r
1113 if (dataType.equals("UINT64")){\r
1114 skuInfo.setValue("0");\r
1115 }\r
1116 if (dataType.equals("BOOLEAN")){\r
1117 skuInfo.setValue("false");\r
1118 }\r
1119 if (dataType.equals("VOID*")) {\r
1120 skuInfo.setValue("");\r
1121 }\r
1122 }\r
1123 if (dataType.equals("UINT8")){\r
1124 dynPcdData.setMaxDatumSize(1);\r
1125 }\r
1126 if (dataType.equals("UINT16")) {\r
1127 dynPcdData.setMaxDatumSize(2);\r
1128 }\r
1129 if (dataType.equals("UINT32")) {\r
1130 dynPcdData.setMaxDatumSize(4);\r
1131 }\r
1132 if (dataType.equals("UINT64")){\r
1133 dynPcdData.setMaxDatumSize(8);\r
1134 }\r
1135 if (dataType.equals("BOOLEAN")){\r
1136 dynPcdData.setMaxDatumSize(1);\r
1137 }\r
1138 if (dataType.equals("VOID*")) {\r
1139 int maxSize = setMaxSizeForPointer(defaultVal);\r
1140 dynPcdData.setMaxDatumSize(maxSize);\r
1141 }\r
1142 }\r
1143 \r
908b1c05 1144 public void removeDynamicPcdBuildData(String cName, String tsGuid) {\r
e232295e 1145 XmlObject o = fpdRoot.getDynamicPcdBuildDefinitions();\r
1146 if (o == null) {\r
1147 return;\r
1148 }\r
a13899c5 1149 \r
1150 XmlCursor cursor = o.newCursor();\r
1151 if (cursor.toFirstChild()) {\r
af25df16 1152 do {\r
1153 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = \r
1154 (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
908b1c05 1155 if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
1156 cursor.removeXml();\r
af25df16 1157 if (getDynamicPcdBuildDataCount() == 0) {\r
1158 cursor.toParent();\r
1159 cursor.removeXml();\r
1160 }\r
908b1c05 1161 cursor.dispose();\r
1162 return;\r
1163 }\r
a13899c5 1164 }\r
af25df16 1165 while (cursor.toNextSibling());\r
a13899c5 1166 }\r
1167 cursor.dispose();\r
1168 }\r
1169 //\r
1170 // Get the Sku Info count of ith dyn pcd element.\r
1171 //\r
1172 public int getDynamicPcdSkuInfoCount(int i){\r
e232295e 1173 if (fpdRoot.getDynamicPcdBuildDefinitions() == null || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null \r
1174 || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {\r
a13899c5 1175 return 0;\r
1176 }\r
1177 \r
1178 int skuInfoCount = 0;\r
1179 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1180 if (cursor.toFirstChild()) {\r
1181 for (int j = 0; j < i; ++j) {\r
1182 cursor.toNextSibling();\r
1183 }\r
1184 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1185 if (pcdData.getSkuInfoList() == null) {\r
1186 skuInfoCount = 0;\r
1187 }\r
1188 else {\r
1189 skuInfoCount = pcdData.getSkuInfoList().size();\r
1190 }\r
1191 }\r
1192 cursor.dispose();\r
1193 return skuInfoCount;\r
1194 }\r
1195 \r
1196 public void getDynamicPcdSkuInfos(int i, String[][] saa){\r
1197 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1198 removeElement(getfpdDynPcdBuildDefs());\r
1199 fpdDynPcdBuildDefs = null;\r
a13899c5 1200 return;\r
1201 }\r
1202 \r
1203 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1204 if (cursor.toFirstChild()) {\r
1205 for (int j = 0; j < i; ++j) {\r
1206 cursor.toNextSibling();\r
1207 }\r
1208 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1209 if (pcdData.getSkuInfoList() == null) {\r
1210 cursor.dispose();\r
1211 return;\r
1212 }\r
1213 else {\r
1214 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1215 int k = 0;\r
1216 while (li.hasNext()) {\r
1217 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1218 saa[k][0] = skuInfo.getSkuId()+"";\r
1219 saa[k][1] = skuInfo.getVariableName();\r
1220 saa[k][2] = skuInfo.getVariableGuid();\r
1221 saa[k][3] = skuInfo.getVariableOffset();\r
1222 saa[k][4] = skuInfo.getHiiDefaultValue();\r
1223 saa[k][5] = skuInfo.getVpdOffset();\r
1224 saa[k][6] = skuInfo.getValue();\r
1225 ++k;\r
1226 }\r
1227 \r
1228 }\r
1229 }\r
1230 cursor.dispose();\r
1231 \r
1232 }\r
1233 \r
1234 public String getDynamicPcdBuildDataValue(int i){\r
1235 String value = null;\r
1236 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1237 removeElement(getfpdDynPcdBuildDefs());\r
1238 fpdDynPcdBuildDefs = null;\r
a13899c5 1239 return value;\r
1240 }\r
1241 \r
1242 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1243 if (cursor.toFirstChild()) {\r
1244 for (int j = 0; j < i; ++j) {\r
1245 cursor.toNextSibling();\r
1246 }\r
1247 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1248 if (pcdData.getSkuInfoList() == null) {\r
1249 value = null;\r
1250 }\r
1251 else {\r
1252 value = pcdData.getSkuInfoArray(0).getValue();\r
1253 }\r
1254 }\r
1255 cursor.dispose();\r
1256 return value;\r
1257 }\r
1258 \r
1259 public String getDynamicPcdBuildDataVpdOffset(int i){\r
1260 String vpdOffset = null;\r
1261 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1262 removeElement(getfpdDynPcdBuildDefs());\r
1263 fpdDynPcdBuildDefs = null;\r
a13899c5 1264 return vpdOffset;\r
1265 }\r
1266 \r
1267 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1268 if (cursor.toFirstChild()) {\r
1269 for (int j = 0; j < i; ++j) {\r
1270 cursor.toNextSibling();\r
1271 }\r
1272 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1273 if (pcdData.getSkuInfoList() == null) {\r
1274 vpdOffset = null;\r
1275 }\r
1276 else {\r
1277 vpdOffset = pcdData.getSkuInfoArray(0).getVpdOffset();\r
1278 }\r
1279 }\r
1280 cursor.dispose();\r
1281 return vpdOffset;\r
1282 }\r
1283 \r
1284 public void removeDynamicPcdBuildDataSkuInfo(int i) {\r
1285 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1286 removeElement(getfpdDynPcdBuildDefs());\r
1287 fpdDynPcdBuildDefs = null;\r
a13899c5 1288 return;\r
1289 }\r
1290 \r
1291 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1292 if (cursor.toFirstChild()) {\r
1293 for (int j = 0; j < i; ++j) {\r
1294 cursor.toNextSibling();\r
1295 }\r
1296 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1297 if (pcdData.getSkuInfoList() == null) {\r
1298 cursor.dispose();\r
1299 return;\r
1300 }\r
1301 else {\r
1302 QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
1303 cursor.toChild(qSkuInfo);\r
1304 cursor.removeXml();\r
1305 }\r
1306 }\r
1307 cursor.dispose();\r
1308 }\r
1309 //\r
1310 // generate sku info for ith dyn pcd build data.\r
1311 //\r
1312 public void genDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1313 String hiiDefault, String vpdOffset, String value, int i) {\r
e232295e 1314// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1315// return;\r
1316// }\r
a13899c5 1317 \r
1318 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1319 if (cursor.toFirstChild()) {\r
1320 for (int j = 0; j < i; ++j) {\r
1321 cursor.toNextSibling();\r
1322 }\r
1323 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1324 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = pcdData.addNewSkuInfo();\r
1325 skuInfo.setSkuId(new BigInteger(id));\r
1326 if (varName != null){\r
1327 skuInfo.setVariableName(varName);\r
1328 skuInfo.setVariableGuid(varGuid);\r
1329 skuInfo.setVariableOffset(varOffset);\r
1330 skuInfo.setHiiDefaultValue(hiiDefault);\r
1331 }\r
1332 else if (vpdOffset != null){\r
1333 skuInfo.setVpdOffset(vpdOffset);\r
1334 }\r
1335 else{\r
1336 skuInfo.setValue(value);\r
1337 }\r
1338 }\r
1339 }\r
1340 \r
1341 public void updateDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1342 String hiiDefault, String vpdOffset, String value, int i){\r
e232295e 1343// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1344// return;\r
1345// }\r
a13899c5 1346 \r
1347 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1348 if (cursor.toFirstChild()) {\r
1349 for (int j = 0; j < i; ++j) {\r
1350 cursor.toNextSibling();\r
1351 }\r
1352 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1353 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1354 while (li.hasNext()) {\r
1355 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1356 if (skuInfo.getSkuId().toString().equals(id)){\r
1357 if (varName != null){\r
1358 skuInfo.setVariableName(varName);\r
1359 skuInfo.setVariableGuid(varGuid);\r
1360 skuInfo.setVariableOffset(varOffset);\r
1361 skuInfo.setHiiDefaultValue(hiiDefault);\r
1362 }\r
1363 else if (vpdOffset != null){\r
1364 skuInfo.setVpdOffset(vpdOffset);\r
1365 }\r
1366 else{\r
1367 skuInfo.setValue(value);\r
1368 }\r
1369 break;\r
1370 }\r
1371 }\r
1372 }\r
1373 }\r
1374 \r
a13899c5 1375 public BuildOptionsDocument.BuildOptions getfpdBuildOpts() {\r
1376 if (fpdBuildOpts == null) {\r
1377 fpdBuildOpts = fpdRoot.addNewBuildOptions();\r
1378 }\r
1379 return fpdBuildOpts;\r
1380 }\r
1381 \r
1382 public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
1383 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1384 if (udats == null) {\r
1385 udats = getfpdBuildOpts().addNewUserDefinedAntTasks();\r
1386 }\r
1387 \r
1388 AntTaskDocument.AntTask at = udats.addNewAntTask();\r
1389 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
1390 }\r
1391 \r
1392 private void setBuildOptionsUserDefAntTask(String id, String fileName, String execOrder, AntTaskDocument.AntTask at) {\r
1393 at.setId(new Integer(id));\r
bf5abaff 1394 XmlCursor cursor = at.newCursor();\r
a13899c5 1395 if (fileName != null){\r
1396 at.setFilename(fileName);\r
1397 }\r
bf5abaff 1398 else if (cursor.toChild(xmlNs, "Filename")) {\r
1399 cursor.removeXml();\r
1400 }\r
202c4f38 1401 if (execOrder != null) {\r
a13899c5 1402 at.setAntCmdOptions(execOrder);\r
1403 }\r
bf5abaff 1404 else if (cursor.toChild(xmlNs, "AntCmdOptions")) {\r
1405 cursor.removeXml();\r
1406 }\r
1407 cursor.dispose();\r
a13899c5 1408 }\r
1409 \r
1410 public void removeBuildOptionsUserDefAntTask(int i) {\r
1411 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1412 if (o == null) {\r
1413 return;\r
1414 }\r
1415 XmlCursor cursor = o.newCursor();\r
1416 if (cursor.toFirstChild()) {\r
1417 for (int j = 0; j < i; ++j) {\r
1418 cursor.toNextSibling();\r
1419 }\r
1420 cursor.removeXml();\r
af25df16 1421 if (getBuildOptionsUserDefAntTaskCount() == 0) {\r
1422 cursor.toParent();\r
1423 cursor.removeXml();\r
1424 }\r
a13899c5 1425 }\r
1426 cursor.dispose();\r
1427 }\r
1428 \r
1429 public void updateBuildOptionsUserDefAntTask(int i, String id, String fileName, String execOrder){\r
1430 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
1431 if (o == null) {\r
1432 return;\r
1433 }\r
1434 XmlCursor cursor = o.newCursor();\r
1435 if (cursor.toFirstChild()) {\r
1436 for (int j = 0; j < i; ++j) {\r
1437 cursor.toNextSibling();\r
1438 }\r
1439 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)cursor.getObject();\r
1440 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
1441 }\r
1442 cursor.dispose();\r
1443 }\r
1444 \r
1445 public int getBuildOptionsUserDefAntTaskCount() {\r
1446 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1447 if (udats == null || udats.getAntTaskList() == null) {\r
1448 return 0;\r
1449 }\r
1450 \r
1451 return udats.getAntTaskList().size();\r
1452 }\r
1453 \r
1454 public void getBuildOptionsUserDefAntTasks(String[][] saa) {\r
1455 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
1456 if (udats == null || udats.getAntTaskList() == null) {\r
1457 return ;\r
1458 }\r
1459 \r
1460 List<AntTaskDocument.AntTask> l = udats.getAntTaskList();\r
1461 ListIterator li = l.listIterator();\r
1462 int i = 0;\r
1463 while (li.hasNext()) {\r
1464 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)li.next();\r
1465 saa[i][0] = at.getId() + "";\r
1466 saa[i][1] = saa[i][2] = "";\r
1467 if (at.getFilename() != null){\r
1468 saa[i][1] = at.getFilename();\r
1469 }\r
1470 if (at.getAntCmdOptions() != null) {\r
1471 saa[i][2] = at.getAntCmdOptions();\r
1472 }\r
1473 ++i;\r
1474 }\r
1475 }\r
1800d80f 1476 public void genBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 1477 OptionsDocument.Options opts = getfpdBuildOpts().getOptions();\r
1478 if (opts == null) {\r
1479 opts = getfpdBuildOpts().addNewOptions();\r
1480 }\r
1481 OptionDocument.Option opt = opts.addNewOption();\r
1482 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1483 }\r
1484 \r
1800d80f 1485 private void setBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents, OptionDocument.Option opt){\r
a13899c5 1486 opt.setStringValue(contents);\r
1800d80f 1487 \r
1488 opt.setBuildTargets(buildTargets);\r
a13899c5 1489 opt.setToolChainFamily(toolChain);\r
1490 opt.setTagName(tagName);\r
1491 opt.setToolCode(toolCmd);\r
1800d80f 1492 \r
bf5abaff 1493 if (archList != null) {\r
1494 opt.setSupArchList(archList);\r
1495 }\r
1496 else {\r
1497 if (opt.isSetSupArchList()) {\r
1498 opt.unsetSupArchList();\r
1499 }\r
1500 }\r
a13899c5 1501 }\r
1502 \r
1503 public void removeBuildOptionsOpt(int i){\r
1504 \r
1505 XmlObject o = getfpdBuildOpts().getOptions();\r
1506 if (o == null) {\r
1507 return;\r
1508 }\r
1509 \r
1510 XmlCursor cursor = o.newCursor();\r
1511 if (cursor.toFirstChild()) {\r
1512 for (int j = 0; j < i; ++j) {\r
1513 cursor.toNextSibling();\r
1514 }\r
1515 cursor.removeXml();\r
af25df16 1516 if (getBuildOptionsOptCount() == 0) {\r
1517 cursor.toParent();\r
1518 cursor.removeXml();\r
1519 }\r
a13899c5 1520 }\r
1521 cursor.dispose();\r
1522 }\r
1523 \r
1800d80f 1524 public void updateBuildOptionsOpt(int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 1525 XmlObject o = getfpdBuildOpts().getOptions();\r
1526 if (o == null) {\r
1527 return;\r
1528 }\r
1529 \r
1530 XmlCursor cursor = o.newCursor();\r
1531 if (cursor.toFirstChild()) {\r
1532 for (int j = 0; j < i; ++j) {\r
1533 cursor.toNextSibling();\r
1534 }\r
1535 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
1536 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1537 }\r
1538 cursor.dispose();\r
1539 }\r
1540 \r
1541 public int getBuildOptionsOptCount(){\r
1542 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1543 return 0;\r
1544 }\r
1545 return getfpdBuildOpts().getOptions().getOptionList().size();\r
1546 }\r
1547 \r
1548 public void getBuildOptionsOpts(String[][] saa) {\r
1549 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
1550 return ;\r
1551 }\r
1552 \r
1553 List<OptionDocument.Option> lOpt = getfpdBuildOpts().getOptions().getOptionList();\r
1554 ListIterator li = lOpt.listIterator();\r
1555 int i = 0;\r
1556 while(li.hasNext()) {\r
1557 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
6cba26e8 1558 if (opt.getBuildTargets() != null) {\r
1559 saa[i][0] = listToString(opt.getBuildTargets());\r
1560 }\r
a13899c5 1561 saa[i][1] = opt.getToolChainFamily();\r
1562 if (opt.getSupArchList() != null){\r
6cba26e8 1563 saa[i][2] = listToString(opt.getSupArchList());\r
1564\r
a13899c5 1565 }\r
1566 saa[i][3] = opt.getToolCode();\r
1567 saa[i][4] = opt.getTagName();\r
1568 saa[i][5] = opt.getStringValue();\r
1569 \r
1570 ++i;\r
1571 }\r
1572 }\r
1573 \r
6cba26e8 1574 public void genBuildOptionsFfs(String ffsKey, String type) {\r
1575 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
1576 ffs.setFfsKey(ffsKey);\r
1577 if (type != null) {\r
1578 ffs.addNewSections().setEncapsulationType(type);\r
1579 }\r
1580 }\r
1581 \r
3b405e9b 1582 public void updateBuildOptionsFfsSectionsType(int i, String type) {\r
1583 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
1584 if (type != null) {\r
1585 ffs.addNewSections().setEncapsulationType(type);\r
1586 }\r
1587 }\r
1588 \r
6cba26e8 1589 public void genBuildOptionsFfsAttribute(int i, String name, String value) {\r
1590 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1591 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = ffs.addNewAttribute();\r
1592 attrib.setName(name);\r
1593 attrib.setValue(value);\r
1594 }\r
1595 \r
1596 /**update jth attribute of ith ffs.\r
1597 * @param i\r
1598 * @param j\r
1599 */\r
1600 public void updateBuildOptionsFfsAttribute(int i, int j, String name, String value){\r
1601 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1602 XmlCursor cursor = ffs.newCursor();\r
1603 QName qAttrib = new QName(xmlNs, "Attribute");\r
1604 if (cursor.toChild(qAttrib)) {\r
1605 for (int k = 0; k < j; ++k) {\r
1606 cursor.toNextSibling(qAttrib);\r
1607 }\r
1608 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = (BuildOptionsDocument.BuildOptions.Ffs.Attribute)cursor.getObject();\r
1609 attrib.setName(name);\r
1610 attrib.setValue(value);\r
1611 }\r
1612 cursor.dispose();\r
1613 }\r
1614 \r
1615 public void removeBuildOptionsFfsAttribute(int i, int j){\r
1616 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1617 XmlCursor cursor = ffs.newCursor();\r
1618 QName qAttrib = new QName(xmlNs, "Attribute");\r
1619 if (cursor.toChild(qAttrib)) {\r
1620 for (int k = 0; k < j; ++k) {\r
1621 cursor.toNextSibling(qAttrib);\r
1622 }\r
1623 cursor.removeXml();\r
1624 }\r
1625 cursor.dispose();\r
1626 }\r
1627 \r
1628 public void genBuildOptionsFfsSectionsSection(int i, String sectionType) {\r
1629 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1630 if (ffs == null) {\r
1631 return;\r
1632 }\r
1633 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1634 \r
1635 if (sections == null){\r
1636 sections = ffs.addNewSections();\r
1637 }\r
1638 sections.addNewSection().setSectionType(EfiSectionType.Enum.forString(sectionType));\r
1639 }\r
1640 \r
3b405e9b 1641 public void removeBuildOptionsFfsSectionsSection(int i, int j) {\r
1642 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1643 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1644 if (sections == null) {\r
1645 return;\r
1646 }\r
1647 XmlCursor cursor = sections.newCursor();\r
1648 QName qSection = new QName(xmlNs, "Section");\r
1649 if (cursor.toChild(qSection)) {\r
1650 for (int k = 0; k < j; ++k) {\r
1651 cursor.toNextSibling(qSection);\r
1652 }\r
1653 cursor.removeXml();\r
1654 }\r
1655 cursor.dispose();\r
1656 }\r
1657 \r
1658 public void updateBuildOptionsFfsSectionsSection(int i, int j, String type){\r
1659 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1660 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1661 if (sections == null) {\r
1662 return;\r
1663 }\r
1664 XmlCursor cursor = sections.newCursor();\r
1665 QName qSection = new QName(xmlNs, "Section");\r
1666 if (cursor.toChild(qSection)) {\r
1667 for (int k = 0; k < j; ++k) {\r
1668 cursor.toNextSibling(qSection);\r
1669 }\r
1670 BuildOptionsDocument.BuildOptions.Ffs.Sections.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Section)cursor.getObject();\r
1671 section.setSectionType(EfiSectionType.Enum.forString(type));\r
1672 }\r
1673 cursor.dispose();\r
1674 } \r
1675 \r
6cba26e8 1676 public void genBuildOptionsFfsSectionsSections(int i, String encapType) {\r
1677 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1678 if (ffs == null) {\r
1679 return;\r
1680 }\r
1681 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1682 \r
1683 if (sections == null){\r
1684 sections = ffs.addNewSections();\r
1685 }\r
1686 sections.addNewSections().setEncapsulationType(encapType);\r
1687 }\r
1688 \r
3b405e9b 1689 public void removeBuildOptionsFfsSectionsSections(int i, int j) {\r
1690 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1691 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1692 if (sections == null) {\r
1693 return;\r
1694 }\r
1695 XmlCursor cursor = sections.newCursor();\r
1696 QName qSections = new QName(xmlNs, "Sections");\r
1697 if (cursor.toChild(qSections)) {\r
1698 for (int k = 0; k < j; ++k) {\r
1699 cursor.toNextSibling(qSections);\r
1700 }\r
1701 cursor.removeXml();\r
1702 }\r
1703 cursor.dispose();\r
1704 }\r
1705 \r
1706 public void updateBuildOptionsFfsSectionsSections(int i, int j, String type) {\r
1707 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1708 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1709 if (sections == null) {\r
1710 return;\r
1711 }\r
1712 XmlCursor cursor = sections.newCursor();\r
1713 QName qSections = new QName(xmlNs, "Sections");\r
1714 if (cursor.toChild(qSections)) {\r
1715 for (int k = 0; k < j; ++k) {\r
1716 cursor.toNextSibling(qSections);\r
1717 }\r
1718 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1719 sections2.setEncapsulationType(type);\r
1720 }\r
1721 cursor.dispose();\r
1722 }\r
1723 \r
6cba26e8 1724 public void genBuildOptionsFfsSectionsSectionsSection(int i, int j, String type) {\r
1725 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1726 if (ffs == null) {\r
1727 return;\r
1728 }\r
1729 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1730 XmlCursor cursor = sections.newCursor();\r
1731 QName qSections = new QName(xmlNs, "Sections");\r
1732 if (cursor.toChild(qSections)){\r
1733 for (int k = 0; k < j; ++k) {\r
1734 cursor.toNextSibling(qSections);\r
1735 }\r
1736 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1737 sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString(type));\r
1738 }\r
1739 cursor.dispose();\r
1740 }\r
1741 \r
3b405e9b 1742 public void removeBuildOptionsFfsSectionsSectionsSection(int i, int j, int k) {\r
1743 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1744 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1745 if (sections == null) {\r
1746 return;\r
1747 }\r
1748 XmlCursor cursor = sections.newCursor();\r
1749 QName qSections = new QName(xmlNs, "Sections");\r
1750 if (cursor.toChild(qSections)) {\r
1751 for (int l = 0; l < j; ++l) {\r
1752 cursor.toNextSibling(qSections);\r
1753 }\r
1754 if (cursor.toFirstChild()) {\r
af25df16 1755 int m = 0;\r
1756 for (; m < k; ++m) {\r
3b405e9b 1757 cursor.toNextSibling();\r
1758 }\r
1759 cursor.removeXml();\r
af25df16 1760 if (m == 0) {\r
1761 cursor.toParent();\r
1762 cursor.removeXml();\r
1763 }\r
3b405e9b 1764 }\r
1765 }\r
1766 cursor.dispose();\r
1767 }\r
1768 \r
1769 public void updateBuildOptionsFfsSectionsSectionsSection(int i, int j, int k, String type) {\r
1770 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1771 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1772 if (sections == null) {\r
1773 return;\r
1774 }\r
1775 XmlCursor cursor = sections.newCursor();\r
1776 QName qSections = new QName(xmlNs, "Sections");\r
1777 if (cursor.toChild(qSections)) {\r
1778 for (int l = 0; l < j; ++l) {\r
1779 cursor.toNextSibling(qSections);\r
1780 }\r
1781 if (cursor.toFirstChild()) {\r
1782 for (int m = 0; m < k; ++m) {\r
1783 cursor.toNextSibling();\r
1784 }\r
1785 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section)cursor.getObject();\r
1786 section.setSectionType(EfiSectionType.Enum.forString(type));\r
1787 }\r
1788 }\r
1789 cursor.dispose();\r
1790 }\r
1791 \r
6cba26e8 1792 public void getBuildOptionsFfsSectionsSectionsSection(int i, int j, ArrayList<String> al) {\r
1793 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1794 if (ffs == null) {\r
1795 return;\r
1796 }\r
1797 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
1798 XmlCursor cursor = sections.newCursor();\r
1799 QName qSections = new QName(xmlNs, "Sections");\r
1800 if (cursor.toChild(qSections)){\r
1801 for (int k = 0; k < j; ++k) {\r
1802 cursor.toNextSibling(qSections);\r
1803 }\r
1804 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
1805 if (sections2.getSectionList() == null){\r
1806 cursor.dispose();\r
1807 return;\r
1808 }\r
1809 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section> li = sections2.getSectionList().listIterator();\r
1810 while(li.hasNext()) {\r
1811 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = li.next();\r
3b405e9b 1812 if (section.isSetSectionType()) {\r
1800d80f 1813 al.add(section.getSectionType().toString());\r
1814 }\r
3b405e9b 1815 \r
1816 }\r
6cba26e8 1817 }\r
1818 cursor.dispose();\r
1819 \r
1820 }\r
1821 \r
1822 public int getBuildOptionsFfsCount(){\r
1823 if (getfpdBuildOpts().getFfsList() == null) {\r
1824 return 0;\r
1825 }\r
1826 return getfpdBuildOpts().getFfsList().size();\r
1827 }\r
1828 \r
1829 public void getBuildOptionsFfsKey(String[][] saa) {\r
1830 if (getfpdBuildOpts().getFfsList() == null) {\r
1831 return;\r
1832 }\r
1833 ListIterator<BuildOptionsDocument.BuildOptions.Ffs> li = getfpdBuildOpts().getFfsList().listIterator();\r
1834 int i = 0;\r
1835 while(li.hasNext()){\r
1836 BuildOptionsDocument.BuildOptions.Ffs ffs = li.next();\r
1837 saa[i][0] = ffs.getFfsKey();\r
1838 ++i;\r
1839 }\r
1840 }\r
1841 \r
3b405e9b 1842 public void updateBuildOptionsFfsKey(int i, String key) {\r
1843 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1844 ffs.setFfsKey(key);\r
1845 }\r
1846 \r
6cba26e8 1847 /**Get ith FFS key and contents.\r
1848 * @param saa\r
1849 */\r
1850 public void getBuildOptionsFfs(int i, String[] sa, LinkedHashMap<String, String> ffsAttribMap, ArrayList<String> firstLevelSections, ArrayList<String> firstLevelSection) {\r
1851 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1852 \r
1853 if (ffs != null) {\r
1854 \r
1855 sa[0] = ffs.getFfsKey();\r
1856 if (ffs.getSections() != null) {\r
1857 if(ffs.getSections().getEncapsulationType() != null){\r
1858 sa[1] = ffs.getSections().getEncapsulationType();\r
1859 }\r
1860 if (ffs.getSections().getSectionList() != null){\r
1861 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Section> li = ffs.getSections().getSectionList().listIterator();\r
1862 while (li.hasNext()) {\r
1863 firstLevelSection.add(li.next().getSectionType().toString());\r
1864 }\r
1865 }\r
1866 if (ffs.getSections().getSectionsList() != null) {\r
1867 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2> li = ffs.getSections().getSectionsList().listIterator();\r
1868 while(li.hasNext()) {\r
1869 firstLevelSections.add(li.next().getEncapsulationType());\r
1870 }\r
1871 }\r
1872 }\r
1873 if (ffs.getAttributeList() != null) {\r
1874 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Attribute> li = ffs.getAttributeList().listIterator();\r
1875 while(li.hasNext()) {\r
1876 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = li.next();\r
1877 ffsAttribMap.put(attrib.getName(), attrib.getValue());\r
1878 }\r
1879 \r
1880 }\r
1881 }\r
1882\r
1883 \r
1884 }\r
1885 \r
1886 private BuildOptionsDocument.BuildOptions.Ffs getFfs(int i) {\r
1887 XmlObject o = getfpdBuildOpts();\r
1888 BuildOptionsDocument.BuildOptions.Ffs ffs = null;\r
1889 \r
1890 XmlCursor cursor = o.newCursor();\r
1891 QName qFfs = new QName(xmlNs, "Ffs");\r
1892 if (cursor.toChild(qFfs)) {\r
1893 for (int j = 0; j < i; ++j) {\r
1894 cursor.toNextSibling(qFfs);\r
1895 }\r
1896 ffs = (BuildOptionsDocument.BuildOptions.Ffs)cursor.getObject();\r
1897 }\r
1898 cursor.dispose();\r
1899 return ffs;\r
1900 }\r
1901 \r
1902 public void removeBuildOptionsFfs(int i) {\r
1903 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
1904 if (ffs == null){\r
1905 return;\r
1906 }\r
1907 \r
1908 XmlCursor cursor = ffs.newCursor();\r
1909 cursor.removeXml();\r
1910 cursor.dispose();\r
1911 }\r
1912 \r
3b405e9b 1913 \r
1914 \r
a13899c5 1915 public PlatformDefinitionsDocument.PlatformDefinitions getfpdPlatformDefs(){\r
1916 if (fpdPlatformDefs == null){\r
1917 fpdPlatformDefs = fpdRoot.addNewPlatformDefinitions();\r
1918 }\r
1919 return fpdPlatformDefs;\r
1920 }\r
1921 \r
6a09eb19 1922 public void getPlatformDefsSupportedArchs(Vector<Object> archs){\r
1923 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {\r
1924 return;\r
1925 }\r
1926 ListIterator li = getfpdPlatformDefs().getSupportedArchitectures().listIterator();\r
1927 while(li.hasNext()) {\r
1928 archs.add(li.next());\r
1929 }\r
1930 }\r
1931 \r
1932 public void setPlatformDefsSupportedArchs(Vector<Object> archs) {\r
bf5abaff 1933 if (archs != null) {\r
1934 getfpdPlatformDefs().setSupportedArchitectures(archs);\r
1935 }\r
1936// else {\r
1937// XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
1938// if (cursor.toChild(xmlNs, "SupportedArchitectures")) {\r
1939// cursor.removeXml();\r
1940// }\r
1941// cursor.dispose();\r
1942// }\r
6a09eb19 1943 }\r
1944 \r
1945 public void getPlatformDefsBuildTargets(Vector<Object> targets) {\r
1946 if (getfpdPlatformDefs().getBuildTargets() == null) {\r
1947 return;\r
1948 }\r
1949 ListIterator li = getfpdPlatformDefs().getBuildTargets().listIterator();\r
1950 while(li.hasNext()) {\r
1951 targets.add(li.next());\r
1952 }\r
1953 }\r
1954 \r
1955 public void setPlatformDefsBuildTargets(Vector<Object> targets) {\r
1956 getfpdPlatformDefs().setBuildTargets(targets);\r
1957 }\r
1958 \r
1959 public void genPlatformDefsSkuInfo(String id, String name) {\r
1960 SkuInfoDocument.SkuInfo skuInfo = null;\r
1961 if (getfpdPlatformDefs().getSkuInfo() == null) {\r
1962 skuInfo = getfpdPlatformDefs().addNewSkuInfo();\r
1963 }\r
1964 skuInfo = getfpdPlatformDefs().getSkuInfo();\r
1965 if (skuInfo.getUiSkuNameList() == null || skuInfo.getUiSkuNameList().size() == 0) {\r
1966 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1967 skuName.setSkuID(new BigInteger("0"));\r
1968 skuName.setStringValue("DEFAULT");\r
1969 }\r
1970 if (id.equals("0")) {\r
1971 return;\r
1972 }\r
1973 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
1974 skuName.setSkuID(new BigInteger(id));\r
1975 skuName.setStringValue(name);\r
1976 }\r
1977 \r
1978 public int getPlatformDefsSkuInfoCount(){\r
1979 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
1980 return 0;\r
1981 }\r
1982 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();\r
1983 }\r
1984 \r
1985 public void getPlatformDefsSkuInfos(String[][] saa){\r
1986 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
5af6b67f 1987 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
1988 removeElement(getfpdDynPcdBuildDefs());\r
1989 fpdDynPcdBuildDefs = null;\r
1990 }\r
6a09eb19 1991 return ;\r
1992 }\r
1993 \r
1994 List<SkuInfoDocument.SkuInfo.UiSkuName> l = getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();\r
1995 ListIterator<SkuInfoDocument.SkuInfo.UiSkuName> li = l.listIterator();\r
1996 int i = 0;\r
1997 while(li.hasNext()) {\r
1998 SkuInfoDocument.SkuInfo.UiSkuName sku = li.next();\r
1999 saa[i][0] = sku.getSkuID()+"";\r
2000 saa[i][1] = sku.getStringValue();\r
2001 ++i;\r
2002 }\r
2003 }\r
2004 \r
2005 public void removePlatformDefsSkuInfo(int i) {\r
2006 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2007 if (skuInfo == null || i == 0) {\r
2008 return ;\r
2009 }\r
2010 \r
2011 XmlCursor cursor = skuInfo.newCursor();\r
2012 if (cursor.toFirstChild()) {\r
2013 for (int j = 0; j < i; ++j) {\r
2014 cursor.toNextSibling();\r
2015 }\r
2016 cursor.removeXml();\r
2017 }\r
2018 cursor.dispose();\r
2019 }\r
2020 \r
2021 public void updatePlatformDefsSkuInfo(int i, String id, String name) {\r
2022 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2023 if (skuInfo == null || i == 0) {\r
2024 return ;\r
2025 }\r
2026 \r
2027 XmlCursor cursor = skuInfo.newCursor();\r
2028 if (cursor.toFirstChild()) {\r
2029 for (int j = 0; j < i; ++j) {\r
2030 cursor.toNextSibling();\r
2031 }\r
2032 SkuInfoDocument.SkuInfo.UiSkuName sku = (SkuInfoDocument.SkuInfo.UiSkuName)cursor.getObject();\r
2033 sku.setSkuID(new BigInteger(id));\r
2034 sku.setStringValue(name);\r
2035 }\r
2036 cursor.dispose();\r
2037 }\r
2038 \r
2039 public String getPlatformDefsInterDir(){\r
2040 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {\r
2041 return null;\r
2042 }\r
2043 return getfpdPlatformDefs().getIntermediateDirectories().toString();\r
2044 }\r
2045 \r
2046 public void setPlatformDefsInterDir(String interDir){\r
2047 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType.Enum.forString(interDir));\r
2048 }\r
2049 \r
2050 public String getPlatformDefsOutputDir() {\r
2051 return getfpdPlatformDefs().getOutputDirectory();\r
2052 }\r
2053 \r
2054 public void setPlatformDefsOutputDir(String outputDir) {\r
af25df16 2055 if (outputDir != null && outputDir.length() > 0) {\r
2056 getfpdPlatformDefs().setOutputDirectory(outputDir);\r
2057 }\r
2058 else{\r
2059 XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
2060 if (cursor.toChild(new QName(xmlNs, "OutputDirectory"))) {\r
2061 cursor.removeXml();\r
2062 }\r
2063 cursor.dispose();\r
2064 }\r
6a09eb19 2065 }\r
2066 \r
a13899c5 2067 public FlashDocument.Flash getfpdFlash() {\r
2068 if (fpdFlash == null) {\r
2069 fpdFlash = fpdRoot.addNewFlash();\r
2070 }\r
2071 return fpdFlash;\r
2072 }\r
2073 \r
2074 public void genFlashDefinitionFile(String file) {\r
2075 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2076 if (fdf == null) {\r
2077 fdf = getfpdFlash().addNewFlashDefinitionFile();\r
2078 }\r
2079 \r
2080 fdf.setStringValue(file);\r
2081 }\r
2082 \r
2083 public String getFlashDefinitionFile() {\r
2084 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2085 if (fdf == null) {\r
2086 return "";\r
2087 }\r
2088 \r
2089 return fdf.getStringValue();\r
2090 }\r
2091 \r
a13899c5 2092 public void genFvImagesNameValue(String name, String value) {\r
2093 \r
2094 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2095 if (fi == null) {\r
2096 fi = getfpdFlash().addNewFvImages();\r
2097 }\r
2098 \r
2099 FvImagesDocument.FvImages.NameValue nv = fi.addNewNameValue();\r
2100 nv.setName(name);\r
2101 nv.setValue(value);\r
2102 }\r
2103 \r
2104 public void removeFvImagesNameValue(int i){\r
2105 \r
2106 XmlObject o = getfpdFlash().getFvImages();\r
2107 if (o == null) {\r
2108 return;\r
2109 }\r
2110 \r
2111 QName qNameValue = new QName(xmlNs, "NameValue");\r
2112 XmlCursor cursor = o.newCursor();\r
2113 if (cursor.toChild(qNameValue)) {\r
2114 for (int j = 0; j < i; ++j) {\r
2115 cursor.toNextSibling(qNameValue);\r
2116 }\r
2117 cursor.removeXml();\r
2118 }\r
2119 cursor.dispose();\r
2120 }\r
2121 \r
2122 public void updateFvImagesNameValue(int i, String name, String value){\r
2123 \r
2124 XmlObject o = getfpdFlash().getFvImages();\r
2125 if (o == null) {\r
2126 return;\r
2127 }\r
2128 \r
2129 QName qNameValue = new QName(xmlNs, "NameValue");\r
2130 XmlCursor cursor = o.newCursor();\r
2131 if (cursor.toChild(qNameValue)) {\r
2132 for (int j = 0; j < i; ++j) {\r
2133 cursor.toNextSibling(qNameValue);\r
2134 }\r
2135 FvImagesDocument.FvImages.NameValue nv = (FvImagesDocument.FvImages.NameValue)cursor.getObject();\r
2136 nv.setName(name);\r
2137 nv.setValue(value);\r
2138 }\r
2139 cursor.dispose();\r
2140 }\r
2141 \r
2142 public int getFvImagesNameValueCount() {\r
2143 \r
2144 FvImagesDocument.FvImages fi = null;\r
2145 if ((fi = getfpdFlash().getFvImages()) == null || fi.getNameValueList() == null) {\r
2146 return 0;\r
2147 }\r
2148 return fi.getNameValueList().size();\r
2149 }\r
2150 \r
2151 public void getFvImagesNameValues(String[][] nv) {\r
2152 \r
2153 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2154 if (fi == null){\r
2155 return;\r
2156 }\r
2157 List<FvImagesDocument.FvImages.NameValue> l = fi.getNameValueList();\r
2158 int i = 0;\r
2159 ListIterator li = l.listIterator();\r
2160 while (li.hasNext()) {\r
2161 FvImagesDocument.FvImages.NameValue e = (FvImagesDocument.FvImages.NameValue) li\r
2162 .next();\r
2163 nv[i][0] = e.getName();\r
2164 nv[i][1] = e.getValue();\r
2165 \r
2166 i++;\r
2167 }\r
2168 }\r
2169 \r
2170 public void genFvImagesFvImage(String[] names, String types, Map<String, String> options) {\r
2171 \r
2172 FvImagesDocument.FvImages fis = null;\r
2173 if ((fis = getfpdFlash().getFvImages()) == null) {\r
2174 fis = getfpdFlash().addNewFvImages();\r
2175 }\r
2176 \r
2177 //\r
2178 //gen FvImage with FvImageNames array\r
2179 //\r
2180 FvImagesDocument.FvImages.FvImage fi = fis.addNewFvImage();\r
2181 for (int i = 0; i < names.length; ++i) {\r
2182 fi.addFvImageNames(names[i]);\r
2183 }\r
2184 fi.setType(FvImageTypes.Enum.forString(types));\r
2185 if (options != null){\r
2186 setFvImagesFvImageFvImageOptions(options, fi);\r
2187 }\r
2188 }\r
2189 \r
2190 private void setFvImagesFvImageFvImageOptions(Map<String, String> options, FvImagesDocument.FvImages.FvImage fi){\r
2191 FvImagesDocument.FvImages.FvImage.FvImageOptions fio = fi.getFvImageOptions();\r
2192 if (fio == null){\r
2193 fio = fi.addNewFvImageOptions();\r
2194 }\r
2195 \r
2196 Set<String> key = options.keySet();\r
2197 Iterator<String> i = key.iterator();\r
2198 while (i.hasNext()) {\r
44053733 2199 \r
a13899c5 2200 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
2201 String k = (String)i.next();\r
ae0d4fd2 2202 \r
a13899c5 2203 nv.setName(k);\r
2204 nv.setValue((String)options.get(k));\r
2205 \r
2206 }\r
2207 \r
2208 }\r
2209 \r
44053733 2210 \r
a13899c5 2211 public void removeFvImagesFvImage(int i) {\r
2212 \r
2213 XmlObject o = getfpdFlash().getFvImages();\r
2214 if (o == null) {\r
2215 return;\r
2216 }\r
2217 \r
2218 QName qFvImage = new QName(xmlNs, "FvImage");\r
2219 XmlCursor cursor = o.newCursor();\r
2220 if (cursor.toChild(qFvImage)) {\r
2221 for (int j = 0; j < i; ++j) {\r
2222 cursor.toNextSibling(qFvImage);\r
2223 }\r
2224 cursor.removeXml();\r
2225 }\r
2226 cursor.dispose();\r
2227 }\r
2228 \r
2229 public void updateFvImagesFvImage(int i, String[] names, String types, Map<String, String> options){\r
2230 \r
2231 XmlObject o = getfpdFlash().getFvImages();\r
2232 if (o == null) {\r
2233 return;\r
2234 }\r
2235 XmlCursor cursor = o.newCursor();\r
2236 QName qFvImage = new QName(xmlNs, "FvImage");\r
2237 if (cursor.toChild(qFvImage)) {\r
2238 for (int j = 0; j < i; ++j) {\r
2239 cursor.toNextSibling(qFvImage);\r
2240 }\r
2241 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
2242 fi.setType(FvImageTypes.Enum.forString(types));\r
2243 \r
2244 //\r
2245 // remove old FvImageNames before adding new ones\r
2246 //\r
2247 QName qFvImageNames = new QName(xmlNs, "FvImageNames"); \r
2248 cursor.toChild(qFvImageNames);\r
2249 cursor.removeXml();\r
2250 while (cursor.toNextSibling(qFvImageNames)) {\r
2251 cursor.removeXml();\r
2252 }\r
2253 \r
2254 for (int k = 0; k < names.length; ++k) {\r
2255 fi.addFvImageNames(names[k]);\r
2256 }\r
2257 //\r
2258 // remove old FvImageOptions before adding new options\r
2259 //\r
2260 QName qFvImageOptions = new QName(xmlNs, "FvImageOptions");\r
2261 cursor.toNextSibling(qFvImageOptions);\r
2262 cursor.removeXml();\r
2263 \r
2264 setFvImagesFvImageFvImageOptions(options, fi);\r
2265 }\r
2266 cursor.dispose();\r
2267 }\r
2268 \r
2269 public int getFvImagesFvImageCount() {\r
2270 \r
2271 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
2272 return 0;\r
2273 }\r
2274 return getfpdFlash().getFvImages().getFvImageList().size();\r
2275 }\r
2276 \r
ae0d4fd2 2277 /**Only Get Fv image setting - name and type.\r
2278 * @param saa\r
2279 */\r
2280 public void getFvImagesFvImages(String[][] saa) {\r
a13899c5 2281 \r
2282 if (getfpdFlash().getFvImages() == null) {\r
2283 return;\r
2284 }\r
2285 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
2286 if (l == null) {\r
2287 return;\r
2288 }\r
2289 ListIterator li = l.listIterator();\r
2290 int i = 0;\r
2291 while(li.hasNext()) {\r
2292 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
2293 //\r
2294 // get FvImageNames array, space separated\r
2295 //\r
2296 List<String> lfn = fi.getFvImageNamesList();\r
2297 ListIterator lfni = lfn.listIterator();\r
2298 saa[i][0] = " ";\r
2299 while (lfni.hasNext()) {\r
2300 saa[i][0] += (String)lfni.next();\r
2301 saa[i][0] += " ";\r
2302 }\r
2303 saa[i][0] = saa[i][0].trim();\r
2304 \r
2305 saa[i][1] = fi.getType()+"";\r
2306 \r
ae0d4fd2 2307 ++i;\r
2308 }\r
2309 }\r
2310 \r
2311 /**Get FvImage Options for FvImage i\r
2312 * @param i the ith FvImage\r
2313 */\r
2314 public void getFvImagesFvImageOptions(int i, Map<String, String> m) {\r
2315 XmlObject o = getfpdFlash().getFvImages();\r
2316 if (o == null) {\r
2317 return;\r
2318 }\r
2319 XmlCursor cursor = o.newCursor();\r
2320 QName qFvImage = new QName(xmlNs, "FvImage");\r
2321 if (cursor.toChild(qFvImage)) {\r
2322 for (int j = 0; j < i; ++j) {\r
2323 cursor.toNextSibling(qFvImage);\r
a13899c5 2324 }\r
ae0d4fd2 2325 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
2326 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){\r
2327 return;\r
a13899c5 2328 }\r
ae0d4fd2 2329 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
2330 while(li.hasNext()){\r
2331 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
a13899c5 2332 m.put(nv.getName(), nv.getValue());\r
2333 }\r
a13899c5 2334 }\r
2335 }\r
2336 \r
2337 /**\r
2338 Get platform header element\r
2339 @return PlatformHeaderDocument.PlatformHeader\r
2340 **/\r
2341 public PlatformHeaderDocument.PlatformHeader getFpdHdr() {\r
2342 if (fpdHdr == null) {\r
2343 fpdHdr = fpdRoot.addNewPlatformHeader();\r
2344 }\r
1faac7b6 2345 \r
a13899c5 2346 return fpdHdr;\r
2347 }\r
2348 \r
a13899c5 2349 public String getFpdHdrPlatformName() {\r
2350 return getFpdHdr().getPlatformName();\r
2351 }\r
2352 \r
2353 public String getFpdHdrGuidValue() {\r
2354 return getFpdHdr().getGuidValue();\r
2355 }\r
2356 \r
2357 public String getFpdHdrVer() {\r
2358 return getFpdHdr().getVersion();\r
2359 }\r
2360 \r
2361 public String getFpdHdrAbs() {\r
2362 return getFpdHdr().getAbstract();\r
2363 }\r
2364 \r
2365 public String getFpdHdrDescription() {\r
2366 return getFpdHdr().getDescription();\r
2367 }\r
2368 \r
2369 public String getFpdHdrCopyright() {\r
2370 return getFpdHdr().getCopyright();\r
2371 }\r
2372 \r
2373 public String getFpdHdrLicense() {\r
2374 LicenseDocument.License l = getFpdHdr().getLicense();\r
2375 if (l == null) {\r
2376 return null;\r
2377 }\r
2378 return l.getStringValue();\r
2379 }\r
2380 \r
2381 public String getFpdHdrUrl() {\r
2382 LicenseDocument.License l = getFpdHdr().getLicense();\r
2383 if (l == null) {\r
2384 return null;\r
2385 }\r
2386 return l.getURL();\r
2387 }\r
2388 \r
2389 public String getFpdHdrSpec() {\r
2390\r
c06e8657 2391 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 2392// return getFpdHdr().getSpecification();\r
2393 }\r
2394 \r
2395 public void setFpdHdrPlatformName(String name){\r
2396 getFpdHdr().setPlatformName(name);\r
2397 }\r
2398 \r
2399 public void setFpdHdrGuidValue(String guid){\r
2400 getFpdHdr().setGuidValue(guid);\r
2401 }\r
2402 \r
2403 public void setFpdHdrVer(String v){\r
2404 getFpdHdr().setVersion(v);\r
2405 }\r
2406 \r
2407 public void setFpdHdrAbs(String abs) {\r
2408 getFpdHdr().setAbstract(abs);\r
2409 }\r
2410 \r
2411 public void setFpdHdrDescription(String desc){\r
2412 getFpdHdr().setDescription(desc);\r
2413 }\r
2414 \r
2415 public void setFpdHdrCopyright(String cr) {\r
2416 getFpdHdr().setCopyright(cr);\r
2417 }\r
2418 \r
2419 public void setFpdHdrLicense(String license){\r
2420 LicenseDocument.License l = getFpdHdr().getLicense();\r
2421 if (l == null) {\r
2422 getFpdHdr().addNewLicense().setStringValue(license);\r
2423 }\r
2424 else {\r
2425 l.setStringValue(license);\r
2426 }\r
2427 }\r
2428\r
2429 public void setFpdHdrUrl(String url){\r
2430 LicenseDocument.License l = getFpdHdr().getLicense();\r
2431 \r
2432 l.setURL(url);\r
2433 \r
2434 }\r
2435 \r
2436 public void setFpdHdrSpec(String s){\r
c06e8657 2437 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 2438 getFpdHdr().setSpecification(s);\r
2439 }\r
2440 /**\r
2441 Save the processed xml contents to file\r
2442 \r
2443 @param fpdFile The file to save xml contents\r
2444 @throws IOException Exceptions during file operation\r
2445 **/\r
2446 public void saveAs(File fpdFile) throws IOException {\r
2447\r
2448 XmlOptions options = new XmlOptions();\r
2449\r
2450 options.setCharacterEncoding("UTF-8");\r
2451 options.setSavePrettyPrint();\r
2452 options.setSavePrettyPrintIndent(2);\r
2453 try {\r
2454 fpdd.save(fpdFile, options);\r
2455 } catch (IOException e) {\r
2456 e.printStackTrace();\r
2457 }\r
2458\r
2459 }\r
2460 \r
1800d80f 2461 private String listToString(List l) {\r
a13899c5 2462 if (l == null) {\r
2463 return null;\r
2464 }\r
2465 String s = " ";\r
2466 ListIterator li = l.listIterator();\r
2467 while(li.hasNext()) {\r
2468 s += li.next();\r
2469 s += " ";\r
2470 }\r
2471 return s.trim();\r
2472 }\r
e232295e 2473 \r
2474 private void removeElement(XmlObject o) {\r
2475 XmlCursor cursor = o.newCursor();\r
2476 cursor.removeXml();\r
2477 cursor.dispose();\r
2478 }\r
a13899c5 2479}\r
82961247 2480\r
2481class PcdItemTypeConflictException extends Exception {\r
2482\r
2483 /**\r
2484 * \r
2485 */\r
2486 private static final long serialVersionUID = 1L;\r
2487 private String details = null;\r
2488 \r
34c614e1 2489 PcdItemTypeConflictException(String pcdName, String info){\r
2490 ModuleIdentification mi = GlobalData.getModuleId(info);\r
2491 details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackage().getName();\r
82961247 2492 }\r
2493 \r
2494 public String getMessage() {\r
2495 return details;\r
2496 }\r
2497}\r
2498\r
2499class PcdDeclNotFound extends Exception {\r
2500\r
2501 /**\r
2502 * \r
2503 */\r
2504 private static final long serialVersionUID = 1L;\r
2505 private String details = null;\r
2506 \r
2507 PcdDeclNotFound(String info) {\r
4da2e625 2508 details = "PcdDeclNotFound: " + info;\r
82961247 2509 }\r
2510 \r
2511 public String getMessage() {\r
2512 return details;\r
2513 }\r
2514}\r
2515\r
2516class PcdValueMalFormed extends Exception {\r
2517\r
2518 /**\r
2519 * \r
2520 */\r
2521 private static final long serialVersionUID = 1L;\r
2522 private String details = null;\r
2523 \r
2524 PcdValueMalFormed(String info) {\r
4da2e625 2525 details = "PcdValueMalFormed: " + info;\r
82961247 2526 }\r
2527 \r
2528 public String getMessage() {\r
2529 return details;\r
2530 }\r
2531}\r