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