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