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