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