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