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