]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - 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
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
26import java.util.Vector;\r
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
36import org.tianocore.EfiSectionType;\r
37import org.tianocore.FlashDefinitionFileDocument;\r
38import org.tianocore.FlashDocument;\r
39import org.tianocore.FrameworkModulesDocument;\r
40import org.tianocore.IntermediateOutputType;\r
41import org.tianocore.LibrariesDocument;\r
42import org.tianocore.ModuleSADocument;\r
43import org.tianocore.ModuleSaBuildOptionsDocument;\r
44import org.tianocore.ModuleSurfaceAreaDocument;\r
45import org.tianocore.OptionDocument;\r
46import org.tianocore.OptionsDocument;\r
47import org.tianocore.PcdBuildDefinitionDocument;\r
48import org.tianocore.PcdCodedDocument;\r
49import org.tianocore.PcdDataTypes;\r
50import org.tianocore.PcdDeclarationsDocument;\r
51import org.tianocore.PcdItemTypes;\r
52import org.tianocore.PlatformDefinitionsDocument;\r
53import org.tianocore.PlatformSurfaceAreaDocument;\r
54import org.tianocore.FvImageTypes;\r
55import org.tianocore.FvImagesDocument;\r
56import org.tianocore.LicenseDocument;\r
57import org.tianocore.PlatformHeaderDocument;\r
58import org.tianocore.SkuInfoDocument;\r
59import org.tianocore.UserDefinedAntTasksDocument;\r
60import org.tianocore.UserExtensionsDocument;\r
61import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
62import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
63import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
64import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
65\r
66/**\r
67 This class processes fpd file contents such as add remove xml elements. \r
68 @since PackageEditor 1.0\r
69**/\r
70public class FpdFileContents {\r
71\r
72 static final String xmlNs = "http://www.TianoCore.org/2006/Edk2.0";\r
73 \r
74 private PlatformSurfaceAreaDocument fpdd = null;\r
75 \r
76 private PlatformSurfaceAreaDocument.PlatformSurfaceArea fpdRoot = null;\r
77 \r
78 private PlatformHeaderDocument.PlatformHeader fpdHdr = null;\r
79 \r
80 private PlatformDefinitionsDocument.PlatformDefinitions fpdPlatformDefs = null;\r
81 \r
82 private FlashDocument.Flash fpdFlash = null;\r
83 \r
84 private BuildOptionsDocument.BuildOptions fpdBuildOpts = null;\r
85 \r
86 private FrameworkModulesDocument.FrameworkModules fpdFrameworkModules = null;\r
87 \r
88 private DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions fpdDynPcdBuildDefs = null;\r
89 \r
90 private HashMap<String, ArrayList<String>> dynPcdMap = null;\r
91 \r
92 private HashMap<String, String> defaultPcdValue = new HashMap<String, String>();\r
93 \r
94 private String itemType (String pcdInfo) {\r
95 \r
96 return pcdInfo.substring(pcdInfo.lastIndexOf(" ") + 1);\r
97 }\r
98 \r
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
107 removeElement(getfpdFrameworkModules());\r
108 fpdFrameworkModules = null;\r
109 return;\r
110 }\r
111 ListIterator<ModuleSADocument.ModuleSA> li = l.listIterator();\r
112 while (li.hasNext()) {\r
113 ModuleSADocument.ModuleSA moduleSa = li.next();\r
114 if (moduleSa.getPcdBuildDefinition() == null || moduleSa.getPcdBuildDefinition().getPcdDataList() == null) {\r
115 continue;\r
116 }\r
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
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
136 \r
137 public ArrayList<String> getDynPcdMapValue(String key) {\r
138 return dynPcdMap.get(key);\r
139 }\r
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
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
218 public int getFrameworkModulesCount() {\r
219 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0){\r
220 removeElement(getfpdFrameworkModules());\r
221 fpdFrameworkModules = null;\r
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
235 ModuleSADocument.ModuleSA moduleSa = (ModuleSADocument.ModuleSA)li.next();\r
236 saa[i][0] = moduleSa.getModuleGuid();\r
237 saa[i][1] = moduleSa.getModuleVersion();\r
238 \r
239 saa[i][2] = moduleSa.getPackageGuid();\r
240 saa[i][3] = moduleSa.getPackageVersion();\r
241 saa[i][4] = listToString(moduleSa.getSupArchList());\r
242 ++i;\r
243 }\r
244 }\r
245 \r
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
258 public ModuleSADocument.ModuleSA getModuleSA(String key) {\r
259 \r
260 if (getfpdFrameworkModules().getModuleSAList() == null || getfpdFrameworkModules().getModuleSAList().size() == 0) {\r
261 removeElement(getfpdFrameworkModules());\r
262 fpdFrameworkModules = null;\r
263 return null;\r
264 }\r
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
275 ListIterator li = getfpdFrameworkModules().getModuleSAList().listIterator();\r
276 while(li.hasNext()) {\r
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
281 continue;\r
282 }\r
283 }\r
284 if (moduleSa.getPackageVersion() != null) {\r
285 if (!moduleSa.getPackageVersion().equals(s[3])) {\r
286 continue;\r
287 }\r
288 }\r
289 //ToDo add arch check .\r
290 if (moduleSa.getSupArchList() != null) {\r
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
298 }\r
299 }\r
300 }\r
301 }\r
302 return null;\r
303 }\r
304 \r
305 private ModuleSADocument.ModuleSA getModuleSA(int i) {\r
306 ModuleSADocument.ModuleSA moduleSa = null;\r
307 if (fpdRoot.getFrameworkModules() == null) {\r
308 return null;\r
309 }\r
310 XmlCursor cursor = fpdRoot.getFrameworkModules().newCursor();\r
311 if (cursor.toFirstChild()) {\r
312 for (int j = 0; j < i; ++j) {\r
313 cursor.toNextSibling();\r
314 }\r
315 moduleSa = (ModuleSADocument.ModuleSA)cursor.getObject();\r
316 }\r
317 cursor.dispose();\r
318 return moduleSa;\r
319 }\r
320 \r
321 public void removeModuleSA(int i) {\r
322 XmlObject o = fpdRoot.getFrameworkModules();\r
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
337 moduleSa.getPackageGuid()+ " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList());\r
338 PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef = moduleSa.getPcdBuildDefinition();\r
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
345 }\r
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
353 cursor.removeXml();\r
354 if (getFrameworkModulesCount() == 0) {\r
355 cursor.toParent();\r
356 cursor.removeXml();\r
357 }\r
358 }\r
359 cursor.dispose();\r
360 }\r
361 \r
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
380 ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
381 Vector<ModuleIdentification> vMi = new Vector<ModuleIdentification>();\r
382 //\r
383 // create vector for module & library instance MIs.\r
384 //\r
385 vMi.add(mi);\r
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
392 try {\r
393 nextPcd:for (int i = 0; i < saaModuleSaPcd.length; ++i) {\r
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
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
406 throw e;\r
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
414 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea) WorkspaceProfile\r
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
432 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, vMi.get(i));\r
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
461 private void maintainDynPcdMap(String pcdKey, String moduleInfo) {\r
462 \r
463 ArrayList<String> al = dynPcdMap.get(pcdKey);\r
464 if (al == null) {\r
465 return;\r
466 }\r
467 String[] s = moduleInfo.split(" ");\r
468 for(int i = 0; i < al.size(); ++i){\r
469 String consumer = al.get(i);\r
470 if (consumer.contains(s[0]) && consumer.contains(s[2])){\r
471 String[] consumerPart = consumer.split(" ");\r
472 if (!consumerPart[4].equals(s[4])) {\r
473 continue;\r
474 }\r
475 al.remove(consumer);\r
476 break;\r
477 }\r
478 }\r
479\r
480 if (al.size() == 0) {\r
481 defaultPcdValue.remove(pcdKey);\r
482 dynPcdMap.remove(pcdKey);\r
483 String[] s1 = pcdKey.split(" ");\r
484 removeDynamicPcdBuildData(s1[0], s1[1]);\r
485 }\r
486 \r
487 }\r
488 //\r
489 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"\r
490 //\r
491 public int getPcdDataCount (int i){\r
492 ModuleSADocument.ModuleSA msa = getModuleSA(i);\r
493 \r
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
498 \r
499 }\r
500 \r
501 public void getPcdData (int i, String[][] saa) {\r
502 ModuleSADocument.ModuleSA msa = getModuleSA(i);\r
503 \r
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
508 for (int k = 0; k < saa.length; ++k) {\r
509 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = li.next();\r
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
517 \r
518 }\r
519 }\r
520 \r
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
524 return;\r
525 }\r
526 \r
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
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
565 //\r
566 // change item type while not updating dynPcdData????\r
567 //\r
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
573 defaultPcdValue.put(cName + " " + tsGuid, value);\r
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
588 public boolean getPcdBuildDataInfo(ModuleIdentification mi, String cName, String tsGuid, String[] sa) throws Exception{\r
589 try {\r
590 \r
591 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(mi);\r
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
599 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
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
610 if (!msaPcd.getTokenSpaceGuidCName().equals(tsGuid)) {\r
611 continue;\r
612 }\r
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
631 e.printStackTrace();\r
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
644 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(consumer);\r
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
655 if (moduleSA.getPcdBuildDefinition() != null) {\r
656 XmlCursor cursor = moduleSA.getPcdBuildDefinition().newCursor();\r
657 if (cursor.toFirstChild()) {\r
658 do {\r
659 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData) cursor\r
660 .getObject();\r
661 if (msaPcd.getCName().equals(pcdData.getCName())\r
662 && msaPcd.getTokenSpaceGuidCName().equals(pcdData.getTokenSpaceGuidCName())) {\r
663\r
664 maintainDynPcdMap(pcdData.getCName() + " " + pcdData.getTokenSpaceGuidCName(),\r
665 moduleKey);\r
666 cursor.removeXml();\r
667 break;\r
668 }\r
669 } while (cursor.toNextSibling());\r
670 }\r
671 cursor.dispose();\r
672 }\r
673 }\r
674 \r
675 }\r
676 catch (Exception e){\r
677 e.printStackTrace();\r
678 \r
679 }\r
680 }\r
681 //\r
682 // key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"\r
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
708 public void removeLibraryInstance(String key, int i) {\r
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
715 if (cursor.toFirstChild()) {\r
716 for (int j = 0; j < i; ++j) {\r
717 cursor.toNextSibling();\r
718 }\r
719 cursor.push();\r
720 cursor.toPrevToken();\r
721 if (cursor.isComment()) {\r
722 cursor.removeXml();\r
723 }\r
724 cursor.pop();\r
725 cursor.removeXml();\r
726 if (getLibraryInstancesCount(key) == 0) {\r
727 cursor.toParent();\r
728 cursor.removeXml();\r
729 }\r
730 }\r
731 \r
732 cursor.dispose();\r
733 }\r
734 \r
735 public void genLibraryInstance(ModuleIdentification libMi, String key) {\r
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
745 String mn = libMi.getName();\r
746 String mg = libMi.getGuid();\r
747 String mv = libMi.getVersion();\r
748 String pn = libMi.getPackageId().getName();\r
749 String pg = libMi.getPackageId().getGuid();\r
750 String pv = libMi.getPackageId().getVersion();\r
751 LibrariesDocument.Libraries.Instance instance = libs.addNewInstance();\r
752 XmlCursor cursor = instance.newCursor();\r
753 try{\r
754 String comment = "Pkg: " + pn + " Mod: " + mn \r
755 + " Path: " + libMi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
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
765 instance.setModuleGuid(mg);\r
766 instance.setModuleVersion(mv);\r
767 instance.setPackageGuid(pg);\r
768 instance.setPackageVersion(pv);\r
769 \r
770 }\r
771 \r
772 public String getFvBinding(String moduleKey){\r
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
779 return null;\r
780 }\r
781 return moduleSa.getModuleSaBuildOptions().getFvBinding();\r
782 }\r
783 \r
784 public void setFvBinding(ModuleSADocument.ModuleSA moduleSa, String fvBinding) {\r
785 if (moduleSa == null ) {\r
786 return;\r
787 }\r
788 if (fvBinding == null || fvBinding.length() == 0) {\r
789 if(moduleSa.getModuleSaBuildOptions() != null){\r
790 moduleSa.getModuleSaBuildOptions().unsetFvBinding();\r
791 }\r
792 }\r
793 else {\r
794 if(moduleSa.getModuleSaBuildOptions() == null){\r
795 moduleSa.addNewModuleSaBuildOptions().setFvBinding(fvBinding);\r
796 return;\r
797 }\r
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
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
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
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
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
927 }\r
928 }\r
929 \r
930 public String getFfsFileNameGuid(String moduleKey){\r
931 ModuleSADocument.ModuleSA moduleSa = getModuleSA(moduleKey);\r
932 if (moduleSa == null || moduleSa.getModuleSaBuildOptions() == null) {\r
933 return null;\r
934 }\r
935 return moduleSa.getModuleSaBuildOptions().getFfsFileNameGuid();\r
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
944 msa.addNewModuleSaBuildOptions();\r
945 \r
946 }\r
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
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
978 msa.getModuleSaBuildOptions().setFfsFormatKey(ffsKey);\r
979 }\r
980 \r
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
994 public void getModuleSAOptions(String moduleKey, String[][] saa) {\r
995 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
996 if (msa == null || msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null\r
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
1010 saa[i][2] = opt.getTagName();\r
1011 saa[i][3] = opt.getToolCode();\r
1012 \r
1013 if (opt.getSupArchList() != null){\r
1014 saa[i][4] = listToString(opt.getSupArchList());\r
1015 }\r
1016 else {\r
1017 saa[i][4] = "";\r
1018 }\r
1019 \r
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
1028 if (msa == null || msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null\r
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
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
1084 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi, String arch, ModuleSADocument.ModuleSA moduleSa) throws Exception {\r
1085 //ToDo add Arch filter\r
1086 \r
1087 try {\r
1088 if (moduleSa == null) {\r
1089 moduleSa = genModuleSA(mi, arch);\r
1090 }\r
1091 \r
1092 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(mi);\r
1093 if (msa.getPcdCoded() == null) {\r
1094 return;\r
1095 }\r
1096 \r
1097 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
1098 m.put("ModuleSurfaceArea", msa);\r
1099 SurfaceAreaQuery.setDoc(m);\r
1100 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
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
1113 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module " + mi.getName());\r
1114 }\r
1115 //\r
1116 // AddItem to ModuleSA PcdBuildDefinitions\r
1117 //\r
1118 String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
1119 \r
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
1125 \r
1126 throw e; \r
1127 }\r
1128 \r
1129 }\r
1130 \r
1131 private PcdDeclarationsDocument.PcdDeclarations.PcdEntry LookupPcdDeclaration (PcdCodedDocument.PcdCoded.PcdEntry msaPcd, PackageIdentification[] depPkgs) {\r
1132 \r
1133 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = null;\r
1134 for (int i = 0; i < depPkgs.length; ++i) {\r
1135\r
1136 XmlObject[] xo = SurfaceAreaQuery.getSpdPcdDeclarations(depPkgs[i]);\r
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
1159 private ModuleSADocument.ModuleSA genModuleSA (ModuleIdentification mi, String arch) {\r
1160 PackageIdentification pi = WorkspaceProfile.getPackageForModule(mi);\r
1161 ModuleSADocument.ModuleSA msa = getfpdFrameworkModules().addNewModuleSA();\r
1162 XmlCursor cursor = msa.newCursor();\r
1163 try{\r
1164 String comment = "Mod: " + mi.getName() + " Type: " + SurfaceAreaQuery.getModuleType(mi) + " Path: "\r
1165 + mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
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
1174 msa.setModuleGuid(mi.getGuid());\r
1175 msa.setModuleVersion(mi.getVersion());\r
1176 msa.setPackageGuid(pi.getGuid());\r
1177 msa.setPackageVersion(pi.getVersion());\r
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
1183 \r
1184 return msa;\r
1185 }\r
1186 \r
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
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
1200 //\r
1201 // Using existing Pcd type, if this pcd already exists in other ModuleSA\r
1202 //\r
1203 if (pcdConsumer.size() > 0) {\r
1204 \r
1205 itemType = itemType (pcdConsumer.get(0));\r
1206 }\r
1207 String listValue = moduleSa.getModuleGuid() + " " + moduleSa.getModuleVersion() \r
1208 + " " + moduleSa.getPackageGuid() + " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList())\r
1209 + " " + itemType;\r
1210 pcdConsumer.add(listValue);\r
1211 dynPcdMap.put(cName + " " + tsGuid, pcdConsumer);\r
1212 \r
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
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
1228 fpdPcd.setValue("FALSE");\r
1229 }\r
1230 if (dataType.equals("VOID*")) {\r
1231 fpdPcd.setValue("");\r
1232 }\r
1233 }\r
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
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
1263 \r
1264 \r
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
1275 \r
1276 }\r
1277 \r
1278 public int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{\r
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
1298 throw new PcdValueMalFormed (datum);\r
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
1309 throw new PcdValueMalFormed (datum);\r
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
1329// "it must be a byte array. But the element of %s exceed the byte range",\r
1330 throw new PcdValueMalFormed (datum); \r
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
1342 throw new PcdValueMalFormed (datum);\r
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
1355 return dynPcdMap.get(pcdKey);\r
1356 }\r
1357 \r
1358 public int getDynamicPcdBuildDataCount() {\r
1359 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1360 removeElement(getfpdDynPcdBuildDefs());\r
1361 fpdDynPcdBuildDefs = null;\r
1362 return 0;\r
1363 }\r
1364 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();\r
1365 }\r
1366 \r
1367 public void getDynamicPcdBuildData(String[][] saa) {\r
1368 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1369 removeElement(getfpdDynPcdBuildDefs());\r
1370 fpdDynPcdBuildDefs = null;\r
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
1388 public void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) \r
1389 throws PcdValueMalFormed{\r
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
1444 public void removeDynamicPcdBuildData(String cName, String tsGuid) {\r
1445 XmlObject o = fpdRoot.getDynamicPcdBuildDefinitions();\r
1446 if (o == null) {\r
1447 return;\r
1448 }\r
1449 \r
1450 XmlCursor cursor = o.newCursor();\r
1451 if (cursor.toFirstChild()) {\r
1452 do {\r
1453 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = \r
1454 (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1455 if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
1456 \r
1457 if (getDynamicPcdBuildDataCount() == 1) {\r
1458 cursor.toParent();\r
1459 }\r
1460 cursor.removeXml();\r
1461 cursor.dispose();\r
1462 return;\r
1463 }\r
1464 }\r
1465 while (cursor.toNextSibling());\r
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
1473 if (fpdRoot.getDynamicPcdBuildDefinitions() == null || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null \r
1474 || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {\r
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
1498 removeElement(getfpdDynPcdBuildDefs());\r
1499 fpdDynPcdBuildDefs = null;\r
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
1537 removeElement(getfpdDynPcdBuildDefs());\r
1538 fpdDynPcdBuildDefs = null;\r
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
1562 removeElement(getfpdDynPcdBuildDefs());\r
1563 fpdDynPcdBuildDefs = null;\r
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
1586 removeElement(getfpdDynPcdBuildDefs());\r
1587 fpdDynPcdBuildDefs = null;\r
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
1614// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1615// return;\r
1616// }\r
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
1643// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1644// return;\r
1645// }\r
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
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
1682 public void genBuildOptionsUserExtensions(String fvName, String outputFileName, Vector<String[]> includeModules) {\r
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
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
1694 cursor.beginElement(elementFvName);\r
1695 cursor.insertChars(fvName);\r
1696 cursor.toNextToken();\r
1697 \r
1698 cursor.beginElement(elementInfFileName);\r
1699 cursor.insertChars(fvName + ".inf");\r
1700 cursor.toNextToken();\r
1701 \r
1702 cursor.beginElement(elementIncludeModules);\r
1703 for (int i = 0; i < includeModules.size(); ++i) {\r
1704 cursor.beginElement(elementModule);\r
1705 cursor.insertAttributeWithValue("ModuleGuid", includeModules.get(i)[0]);\r
1706 cursor.insertAttributeWithValue("BaseName", includeModules.get(i)[1]);\r
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
1718 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
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
1728 cursor.toNextSibling(elementIncludeModules);\r
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
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
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
1795 if (elementName.equals(oldFvName)) {\r
1796 cursor.setTextValue(newFvName);\r
1797 }\r
1798 cursor.dispose();\r
1799 }\r
1800 \r
1801 }\r
1802 \r
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
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
1841 XmlCursor cursor = at.newCursor();\r
1842 if (fileName != null){\r
1843 at.setFilename(fileName);\r
1844 }\r
1845 else if (cursor.toChild(xmlNs, "Filename")) {\r
1846 cursor.removeXml();\r
1847 }\r
1848 if (execOrder != null) {\r
1849 at.setAntCmdOptions(execOrder);\r
1850 }\r
1851 else if (cursor.toChild(xmlNs, "AntCmdOptions")) {\r
1852 cursor.removeXml();\r
1853 }\r
1854 cursor.dispose();\r
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
1868 if (getBuildOptionsUserDefAntTaskCount() == 0) {\r
1869 cursor.toParent();\r
1870 cursor.removeXml();\r
1871 }\r
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
1923 public void genBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
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
1932 private void setBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents, OptionDocument.Option opt){\r
1933 opt.setStringValue(contents);\r
1934 \r
1935 opt.setBuildTargets(buildTargets);\r
1936 opt.setToolChainFamily(toolChain);\r
1937 opt.setTagName(tagName);\r
1938 opt.setToolCode(toolCmd);\r
1939 \r
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
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
1963 if (getBuildOptionsOptCount() == 0) {\r
1964 cursor.toParent();\r
1965 cursor.removeXml();\r
1966 }\r
1967 }\r
1968 cursor.dispose();\r
1969 }\r
1970 \r
1971 public void updateBuildOptionsOpt(int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
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
2005 if (opt.getBuildTargets() != null) {\r
2006 saa[i][0] = listToString(opt.getBuildTargets());\r
2007 }\r
2008 saa[i][1] = opt.getToolChainFamily();\r
2009 if (opt.getSupArchList() != null){\r
2010 saa[i][2] = listToString(opt.getSupArchList());\r
2011\r
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
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
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
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
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
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
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
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
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
2202 int m = 0;\r
2203 for (; m < k; ++m) {\r
2204 cursor.toNextSibling();\r
2205 }\r
2206 cursor.removeXml();\r
2207 if (m == 0) {\r
2208 cursor.toParent();\r
2209 cursor.removeXml();\r
2210 }\r
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
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
2259 if (section.isSetSectionType()) {\r
2260 al.add(section.getSectionType().toString());\r
2261 }\r
2262 \r
2263 }\r
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
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
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
2360 \r
2361 \r
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
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
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
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
2434 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
2435 removeElement(getfpdDynPcdBuildDefs());\r
2436 fpdDynPcdBuildDefs = null;\r
2437 }\r
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
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
2512 }\r
2513 \r
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
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
2617 public void getFvImagesFvImageFvImageNames (Vector<String> vImageNames) {\r
2618 FvImagesDocument.FvImages fis = getfpdFlash().getFvImages();\r
2619 if (fis == null || fis.getFvImageList() == null) {\r
2620 return;\r
2621 }\r
2622 \r
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
2631 }\r
2632 \r
2633 public void addFvImageFvImageNames (String[] fvNames) {\r
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
2644 addFvImageNamesInFvImage (fi, fvNames);\r
2645 return;\r
2646 }\r
2647 }\r
2648 genFvImagesFvImage (fvNames, "ImageName", null); \r
2649 }\r
2650 \r
2651 public void addFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String[] fvNames) {\r
2652 \r
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
2673 }\r
2674 \r
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
2704 \r
2705 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
2706 String k = (String)i.next();\r
2707 \r
2708 nv.setName(k);\r
2709 nv.setValue((String)options.get(k));\r
2710 \r
2711 }\r
2712 \r
2713 }\r
2714 \r
2715 \r
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
2734 /**\r
2735 * @param oldFvName\r
2736 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.\r
2737 */\r
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
2746 if (fi.getFvImageNamesList().size() == 0) {\r
2747 li.remove();\r
2748 }\r
2749 }\r
2750 }\r
2751 \r
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
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
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
2779 String xmlValue = cursor.getTextValue();\r
2780 if (xmlValue.equals(oldFvName)){\r
2781 if (newFvName != null) {\r
2782 cursor.setTextValue(newFvName);\r
2783 }\r
2784 else {\r
2785 cursor.removeXml();\r
2786 }\r
2787 }\r
2788 }while (cursor.toNextSibling(qFvImageNames));\r
2789 }\r
2790 \r
2791 cursor.dispose();\r
2792 }\r
2793 \r
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
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
2855 public int getFvImagesFvImageCount(String type) {\r
2856 \r
2857 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
2858 return 0;\r
2859 }\r
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
2873 }\r
2874 \r
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
2895 * @param saa\r
2896 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.\r
2897 */\r
2898 public void getFvImagesFvImages(String[][] saa, String type) {\r
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
2911 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
2912 continue;\r
2913 }\r
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
2928 ++i;\r
2929 }\r
2930 }\r
2931 \r
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
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
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
2968 removeFvImageNameValue (fi, optName);\r
2969 }\r
2970 }\r
2971 \r
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
2979 boolean fvImageExists = false;\r
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
2996 fvImageExists = true;\r
2997 setFvImagesFvImageNameValue (fi, name, value, null);\r
2998 }\r
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
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
3028 \r
3029 }\r
3030 \r
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
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
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
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
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
3114 String[] fvNameArray = fvNameList.trim().split(" ");\r
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
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
3163 }\r
3164 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3165 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){\r
3166 cursor.dispose();\r
3167 return;\r
3168 }\r
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
3172 m.put(nv.getName(), nv.getValue());\r
3173 }\r
3174 }\r
3175 cursor.dispose();\r
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
3186 \r
3187 return fpdHdr;\r
3188 }\r
3189 \r
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
3232 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
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
3278 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
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
3302 private String listToString(List l) {\r
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
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
3320}\r
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
3330 PcdItemTypeConflictException(String pcdName, String info){\r
3331 ModuleIdentification mi = WorkspaceProfile.getModuleId(info);\r
3332 details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName();\r
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
3349 details = "PcdDeclNotFound: " + info;\r
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
3366 details = "PcdValueMalFormed: " + info;\r
3367 }\r
3368 \r
3369 public String getMessage() {\r
3370 return details;\r
3371 }\r
3372}\r