]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
Fix the problem of deleting ModuleSA custom tool chain option leads to FPD verificait...
[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
5d7a9b83 1108 if (getModuleSAOptionsCount(moduleKey) == 0) {\r
1109 cursor.toParent();\r
1110 cursor.removeXml();\r
1111 }\r
1800d80f 1112 }\r
1113 cursor.dispose();\r
1114 }\r
1115 \r
1116 public void updateModuleSAOptionsOpt(String moduleKey, int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
1117 ModuleSADocument.ModuleSA msa = getModuleSA(moduleKey);\r
1118 if (msa.getModuleSaBuildOptions() == null || msa.getModuleSaBuildOptions().getOptions() == null) {\r
1119 return ;\r
1120 }\r
1121 OptionsDocument.Options opts = msa.getModuleSaBuildOptions().getOptions();\r
1122 XmlCursor cursor = opts.newCursor();\r
1123 if (cursor.toFirstChild()) {\r
1124 for (int j = 0; j < i; ++j){\r
1125 cursor.toNextSibling();\r
1126 }\r
1127 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
1128 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
1129 }\r
1130 cursor.dispose();\r
1131 }\r
1132 \r
a13899c5 1133 /**add pcd information of module mi to a ModuleSA. \r
1134 * @param mi\r
1135 * @param moduleSa if null, generate a new ModuleSA.\r
1136 */\r
bf5abaff 1137 public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi, String arch, ModuleSADocument.ModuleSA moduleSa) throws Exception {\r
a13899c5 1138 //ToDo add Arch filter\r
1139 \r
1140 try {\r
af25df16 1141 if (moduleSa == null) {\r
bf5abaff 1142 moduleSa = genModuleSA(mi, arch);\r
af25df16 1143 }\r
1144 \r
1bf9fa5a 1145 ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(mi);\r
a13899c5 1146 if (msa.getPcdCoded() == null) {\r
1147 return;\r
1148 }\r
af25df16 1149 \r
a13899c5 1150 Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
1151 m.put("ModuleSurfaceArea", msa);\r
1152 SurfaceAreaQuery.setDoc(m);\r
daa4663b 1153 PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
a13899c5 1154 //\r
1155 // Implementing InitializePlatformPcdBuildDefinitions\r
1156 //\r
1157 List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
1158 ListIterator li = l.listIterator();\r
1159 while(li.hasNext()) {\r
1160 PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
1161 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
1162 if (spdPcd == null) {\r
1163 //\r
1164 // ToDo Error \r
1165 //\r
34c614e1 1166 throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module " + mi.getName());\r
a13899c5 1167 }\r
1168 //\r
1169 // AddItem to ModuleSA PcdBuildDefinitions\r
1170 //\r
1171 String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
908b1c05 1172 \r
a13899c5 1173 genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType().toString(), spdPcd.getDatumType()+"", defaultVal, moduleSa);\r
1174 }\r
1175 \r
1176 }\r
1177 catch (Exception e){\r
34c614e1 1178 \r
82961247 1179 throw e; \r
a13899c5 1180 }\r
1181 \r
1182 }\r
1183 \r
1184 private PcdDeclarationsDocument.PcdDeclarations.PcdEntry LookupPcdDeclaration (PcdCodedDocument.PcdCoded.PcdEntry msaPcd, PackageIdentification[] depPkgs) {\r
1185 \r
a13899c5 1186 PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = null;\r
1187 for (int i = 0; i < depPkgs.length; ++i) {\r
3658f95e 1188\r
1189 XmlObject[] xo = SurfaceAreaQuery.getSpdPcdDeclarations(depPkgs[i]);\r
a13899c5 1190 if (xo == null) {\r
1191 continue;\r
1192 }\r
1193 for (int j = 0; j < xo.length; ++j) {\r
1194 spdPcd = (PcdDeclarationsDocument.PcdDeclarations.PcdEntry)xo[j];\r
1195 if (msaPcd.getTokenSpaceGuidCName() == null) {\r
1196 if (spdPcd.getCName().equals(msaPcd.getCName())) {\r
1197 return spdPcd;\r
1198 }\r
1199 }\r
1200 else{\r
1201 if (spdPcd.getCName().equals(msaPcd.getCName()) && spdPcd.getTokenSpaceGuidCName().equals(msaPcd.getTokenSpaceGuidCName())) {\r
1202 return spdPcd;\r
1203 }\r
1204 }\r
1205 \r
1206 }\r
1207 \r
1208 }\r
1209 return null;\r
1210 }\r
1211 \r
bf5abaff 1212 private ModuleSADocument.ModuleSA genModuleSA (ModuleIdentification mi, String arch) {\r
1bf9fa5a 1213 PackageIdentification pi = WorkspaceProfile.getPackageForModule(mi);\r
a13899c5 1214 ModuleSADocument.ModuleSA msa = getfpdFrameworkModules().addNewModuleSA();\r
82dcbb45 1215 XmlCursor cursor = msa.newCursor();\r
1216 try{\r
3658f95e 1217 String comment = "Mod: " + mi.getName() + " Type: " + SurfaceAreaQuery.getModuleType(mi) + " Path: "\r
1218 + mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
82dcbb45 1219 cursor.insertComment(comment);\r
1220 }\r
1221 catch(Exception e){\r
1222 e.printStackTrace();\r
1223 }\r
1224 finally { \r
1225 cursor.dispose();\r
1226 }\r
a13899c5 1227 msa.setModuleGuid(mi.getGuid());\r
1228 msa.setModuleVersion(mi.getVersion());\r
1229 msa.setPackageGuid(pi.getGuid());\r
1230 msa.setPackageVersion(pi.getVersion());\r
bf5abaff 1231 if (arch != null) {\r
1232 Vector<String> v = new Vector<String>();\r
1233 v.add(arch);\r
1234 msa.setSupArchList(v); \r
1235 }\r
a13899c5 1236 \r
1237 return msa;\r
1238 }\r
1239 \r
82961247 1240 private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, ModuleSADocument.ModuleSA moduleSa) \r
1241 throws PcdItemTypeConflictException, PcdValueMalFormed{\r
a13899c5 1242 if (moduleSa.getPcdBuildDefinition() == null){\r
1243 moduleSa.addNewPcdBuildDefinition();\r
1244 }\r
1245 //\r
1246 // constructe pcd to modulesa mapping first.\r
1247 // Attention : for any error condition, remove from map this pcd.\r
1248 //\r
1249 ArrayList<String> pcdConsumer = LookupPlatformPcdData(cName + " " + tsGuid);\r
1250 if (pcdConsumer == null) {\r
1251 pcdConsumer = new ArrayList<String>();\r
1252 }\r
1bf9fa5a 1253 //\r
1b69863a 1254 // Check whether this PCD has already added to ModuleSA, if so, just return.\r
1255 //\r
1256 String moduleInfo = moduleSa.getModuleGuid().toLowerCase() + " " + moduleSa.getModuleVersion() \r
1257 + " " + moduleSa.getPackageGuid().toLowerCase() + " " + moduleSa.getPackageVersion() + " " + listToString(moduleSa.getSupArchList());\r
1258 for (int i = 0; i < pcdConsumer.size(); ++i) {\r
1259 String pcdInfo = pcdConsumer.get(i);\r
1260 if (moduleInfo.equals(pcdInfo.substring(0, pcdInfo.lastIndexOf(" ")))){\r
1261 return;\r
1262 }\r
1263 }\r
1264 //\r
1bf9fa5a 1265 // Using existing Pcd type, if this pcd already exists in other ModuleSA\r
1266 //\r
1267 if (pcdConsumer.size() > 0) {\r
73d9b1c4 1268 \r
1269 itemType = itemType (pcdConsumer.get(0));\r
1bf9fa5a 1270 }\r
1b69863a 1271 String listValue = moduleInfo + " " + itemType;\r
a13899c5 1272 pcdConsumer.add(listValue);\r
1273 dynPcdMap.put(cName + " " + tsGuid, pcdConsumer);\r
1bf9fa5a 1274 \r
a13899c5 1275 PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData fpdPcd = moduleSa.getPcdBuildDefinition().addNewPcdData();\r
1276 fpdPcd.setCName(cName);\r
1277 fpdPcd.setToken(token);\r
1278 fpdPcd.setTokenSpaceGuidCName(tsGuid);\r
1279 fpdPcd.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
1280 fpdPcd.setItemType(PcdItemTypes.Enum.forString(itemType));\r
a390c35d 1281 \r
1282 if (defaultVal != null){\r
1283 fpdPcd.setValue(defaultVal);\r
1284 }\r
1285 else {\r
1286 if (dataType.equals("UINT8") || dataType.equals("UINT16") || dataType.equals("UINT32") || dataType.equals("UINT64")) {\r
1287 fpdPcd.setValue("0");\r
1288 }\r
1289 if (dataType.equals("BOOLEAN")){\r
b3151273 1290 fpdPcd.setValue("FALSE");\r
a390c35d 1291 }\r
1292 if (dataType.equals("VOID*")) {\r
1293 fpdPcd.setValue("");\r
1294 }\r
1295 }\r
1bf9fa5a 1296 //\r
1297 // Using existing pcd value, if this pcd already exists in other moduleSa.\r
1298 //\r
1299 if (defaultPcdValue.get(cName + " " + tsGuid) == null) {\r
1300 defaultPcdValue.put(cName + " " + tsGuid, fpdPcd.getValue());\r
1301 }\r
1302 else {\r
1303 fpdPcd.setValue(defaultPcdValue.get(cName + " " + tsGuid));\r
1304 }\r
1305 \r
802e0055 1306 if (dataType.equals("UINT8")){\r
1307 fpdPcd.setMaxDatumSize(1);\r
1308 }\r
1309 if (dataType.equals("UINT16")) {\r
1310 fpdPcd.setMaxDatumSize(2);\r
1311 }\r
1312 if (dataType.equals("UINT32")) {\r
1313 fpdPcd.setMaxDatumSize(4);\r
1314 }\r
1315 if (dataType.equals("UINT64")){\r
1316 fpdPcd.setMaxDatumSize(8);\r
1317 }\r
1318 if (dataType.equals("BOOLEAN")){\r
1319 fpdPcd.setMaxDatumSize(1);\r
1320 }\r
1321 if (dataType.equals("VOID*")) {\r
1322 int maxSize = setMaxSizeForPointer(fpdPcd.getValue());\r
1323 fpdPcd.setMaxDatumSize(maxSize);\r
1324 }\r
a13899c5 1325 \r
a390c35d 1326 \r
a13899c5 1327 if (itemType.equals("DYNAMIC") || itemType.equals("DYNAMIC_EX")) {\r
1328 ArrayList<String> al = LookupDynamicPcdBuildDefinition(cName + " " + tsGuid);\r
1329 //\r
1330 // if only one module mapped to this pcd, then the one is myself. so no other module mapped.\r
1331 // so need to add one dyn pcd.\r
1332 //\r
1333 if (al.size() == 1) {\r
1334 addDynamicPcdBuildData(cName, token, tsGuid, itemType, dataType, defaultVal);\r
1335 }\r
1336 }\r
1bf9fa5a 1337 \r
a13899c5 1338 }\r
1339 \r
908b1c05 1340 public int setMaxSizeForPointer(String datum) throws PcdValueMalFormed{\r
a13899c5 1341 if (datum == null) {\r
1342 return 0;\r
1343 }\r
1344 char ch = datum.charAt(0);\r
1345 int start, end;\r
1346 String strValue;\r
1347 //\r
1348 // For void* type PCD, only three datum is support:\r
1349 // 1) Unicode: string with start char is "L"\r
1350 // 2) Ansci: String is ""\r
1351 // 3) byte array: String start char "{"\r
1352 // \r
1353 if (ch == 'L') {\r
1354 start = datum.indexOf('\"');\r
1355 end = datum.lastIndexOf('\"');\r
1356 if ((start > end) || \r
1357 (end > datum.length())||\r
1358 ((start == end) && (datum.length() > 0))) {\r
1359 //ToDo Error handling here\r
82961247 1360 throw new PcdValueMalFormed (datum);\r
a13899c5 1361 }\r
1362\r
1363 strValue = datum.substring(start + 1, end);\r
1364 return strValue.length() * 2;\r
1365 } else if (ch == '\"'){\r
1366 start = datum.indexOf('\"');\r
1367 end = datum.lastIndexOf('\"');\r
1368 if ((start > end) || \r
1369 (end > datum.length())||\r
1370 ((start == end) && (datum.length() > 0))) {\r
82961247 1371 throw new PcdValueMalFormed (datum);\r
a13899c5 1372 }\r
1373 strValue = datum.substring(start + 1, end);\r
1374 return strValue.length();\r
1375 } else if (ch =='{') {\r
1376 String[] strValueArray;\r
1377\r
1378 start = datum.indexOf('{');\r
1379 end = datum.lastIndexOf('}');\r
1380 strValue = datum.substring(start + 1, end);\r
1381 strValue = strValue.trim();\r
1382 if (strValue.length() == 0) {\r
1383 return 0;\r
1384 }\r
1385 strValueArray = strValue.split(",");\r
1386 for (int index = 0; index < strValueArray.length; index ++) {\r
1387 Integer value = Integer.decode(strValueArray[index].trim());\r
1388 \r
1389 if (value > 0xFF) {\r
1390// "[FPD file error] The datum type of PCD %s in %s is VOID*, "+\r
a70d444e 1391// "it must be a byte array. But the element of %s exceed the byte range",\r
82961247 1392 throw new PcdValueMalFormed (datum); \r
a13899c5 1393 }\r
1394 }\r
1395 return strValueArray.length;\r
1396\r
1397\r
1398 } else {\r
1399// "[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+\r
1400// "1) UNICODE string: like L\"xxxx\";\r\n"+\r
1401// "2) ANSIC string: like \"xxx\";\r\n"+\r
1402// "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+\r
1403// "but the datum in seems does not following above format!",\r
82961247 1404 throw new PcdValueMalFormed (datum);\r
a13899c5 1405 \r
1406 }\r
1407 }\r
1408 \r
1409 private ArrayList<String> LookupDynamicPcdBuildDefinition(String dynPcdKey) {\r
1410 ArrayList<String> al = dynPcdMap.get(dynPcdKey);\r
1411 \r
1412 return al;\r
1413 }\r
1414 \r
1415 private ArrayList<String> LookupPlatformPcdData(String pcdKey) {\r
1416 \r
34c614e1 1417 return dynPcdMap.get(pcdKey);\r
a13899c5 1418 }\r
1419 \r
1420 public int getDynamicPcdBuildDataCount() {\r
5af6b67f 1421 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1422 removeElement(getfpdDynPcdBuildDefs());\r
1423 fpdDynPcdBuildDefs = null;\r
a13899c5 1424 return 0;\r
1425 }\r
1426 return getfpdDynPcdBuildDefs().getPcdBuildDataList().size();\r
1427 }\r
1428 \r
1429 public void getDynamicPcdBuildData(String[][] saa) {\r
5af6b67f 1430 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1431 removeElement(getfpdDynPcdBuildDefs());\r
1432 fpdDynPcdBuildDefs = null;\r
a13899c5 1433 return ;\r
1434 }\r
1435 List<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> l = getfpdDynPcdBuildDefs().getPcdBuildDataList();\r
1436 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData> li = l.listIterator();\r
1437 int i = 0;\r
1438 while(li.hasNext()) {\r
1439 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcd = li.next();\r
1440 saa[i][0] = dynPcd.getCName();\r
1441 saa[i][1] = dynPcd.getToken().toString();\r
1442 saa[i][2] = dynPcd.getTokenSpaceGuidCName();\r
1443 saa[i][3] = dynPcd.getMaxDatumSize()+"";\r
1444 saa[i][4] = dynPcd.getDatumType().toString();\r
1445 \r
1446 ++i;\r
1447 }\r
1448 }\r
1449 \r
908b1c05 1450 public void addDynamicPcdBuildData(String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal) \r
82961247 1451 throws PcdValueMalFormed{\r
a13899c5 1452 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData dynPcdData = getfpdDynPcdBuildDefs().addNewPcdBuildData();\r
1453 dynPcdData.setItemType(PcdItemTypes.Enum.forString(itemType));\r
1454 dynPcdData.setCName(cName);\r
1455 dynPcdData.setToken(token);\r
1456 dynPcdData.setTokenSpaceGuidCName(tsGuid);\r
1457 dynPcdData.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
1458 \r
1459 BigInteger bigInt = new BigInteger("0");\r
1460 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = dynPcdData.addNewSkuInfo();\r
1461 skuInfo.setSkuId(bigInt);\r
1462 if (defaultVal != null){\r
1463 skuInfo.setValue(defaultVal);\r
1464 }\r
1465 else {\r
1466 if (dataType.equals("UINT8")){\r
1467 skuInfo.setValue("0");\r
1468 }\r
1469 if (dataType.equals("UINT16")) {\r
1470 skuInfo.setValue("0");\r
1471 }\r
1472 if (dataType.equals("UINT32")) {\r
1473 skuInfo.setValue("0");\r
1474 }\r
1475 if (dataType.equals("UINT64")){\r
1476 skuInfo.setValue("0");\r
1477 }\r
1478 if (dataType.equals("BOOLEAN")){\r
1479 skuInfo.setValue("false");\r
1480 }\r
1481 if (dataType.equals("VOID*")) {\r
1482 skuInfo.setValue("");\r
1483 }\r
1484 }\r
1485 if (dataType.equals("UINT8")){\r
1486 dynPcdData.setMaxDatumSize(1);\r
1487 }\r
1488 if (dataType.equals("UINT16")) {\r
1489 dynPcdData.setMaxDatumSize(2);\r
1490 }\r
1491 if (dataType.equals("UINT32")) {\r
1492 dynPcdData.setMaxDatumSize(4);\r
1493 }\r
1494 if (dataType.equals("UINT64")){\r
1495 dynPcdData.setMaxDatumSize(8);\r
1496 }\r
1497 if (dataType.equals("BOOLEAN")){\r
1498 dynPcdData.setMaxDatumSize(1);\r
1499 }\r
1500 if (dataType.equals("VOID*")) {\r
1501 int maxSize = setMaxSizeForPointer(defaultVal);\r
1502 dynPcdData.setMaxDatumSize(maxSize);\r
1503 }\r
1504 }\r
1505 \r
908b1c05 1506 public void removeDynamicPcdBuildData(String cName, String tsGuid) {\r
e232295e 1507 XmlObject o = fpdRoot.getDynamicPcdBuildDefinitions();\r
1508 if (o == null) {\r
1509 return;\r
1510 }\r
a13899c5 1511 \r
1512 XmlCursor cursor = o.newCursor();\r
1513 if (cursor.toFirstChild()) {\r
af25df16 1514 do {\r
1515 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdBuildData = \r
1516 (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
908b1c05 1517 if (pcdBuildData.getCName().equals(cName) && pcdBuildData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
add40ab2 1518 \r
1519 if (getDynamicPcdBuildDataCount() == 1) {\r
af25df16 1520 cursor.toParent();\r
af25df16 1521 }\r
add40ab2 1522 cursor.removeXml();\r
908b1c05 1523 cursor.dispose();\r
1524 return;\r
1525 }\r
a13899c5 1526 }\r
af25df16 1527 while (cursor.toNextSibling());\r
a13899c5 1528 }\r
1529 cursor.dispose();\r
1530 }\r
1531 //\r
1532 // Get the Sku Info count of ith dyn pcd element.\r
1533 //\r
1534 public int getDynamicPcdSkuInfoCount(int i){\r
e232295e 1535 if (fpdRoot.getDynamicPcdBuildDefinitions() == null || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList() == null \r
1536 || fpdRoot.getDynamicPcdBuildDefinitions().getPcdBuildDataList().size() == 0) {\r
a13899c5 1537 return 0;\r
1538 }\r
1539 \r
1540 int skuInfoCount = 0;\r
1541 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1542 if (cursor.toFirstChild()) {\r
1543 for (int j = 0; j < i; ++j) {\r
1544 cursor.toNextSibling();\r
1545 }\r
1546 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1547 if (pcdData.getSkuInfoList() == null) {\r
1548 skuInfoCount = 0;\r
1549 }\r
1550 else {\r
1551 skuInfoCount = pcdData.getSkuInfoList().size();\r
1552 }\r
1553 }\r
1554 cursor.dispose();\r
1555 return skuInfoCount;\r
1556 }\r
1557 \r
1558 public void getDynamicPcdSkuInfos(int i, String[][] saa){\r
1559 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1560 removeElement(getfpdDynPcdBuildDefs());\r
1561 fpdDynPcdBuildDefs = null;\r
a13899c5 1562 return;\r
1563 }\r
1564 \r
1565 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1566 if (cursor.toFirstChild()) {\r
1567 for (int j = 0; j < i; ++j) {\r
1568 cursor.toNextSibling();\r
1569 }\r
1570 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1571 if (pcdData.getSkuInfoList() == null) {\r
1572 cursor.dispose();\r
1573 return;\r
1574 }\r
1575 else {\r
1576 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1577 int k = 0;\r
1578 while (li.hasNext()) {\r
1579 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1580 saa[k][0] = skuInfo.getSkuId()+"";\r
1581 saa[k][1] = skuInfo.getVariableName();\r
1582 saa[k][2] = skuInfo.getVariableGuid();\r
1583 saa[k][3] = skuInfo.getVariableOffset();\r
1584 saa[k][4] = skuInfo.getHiiDefaultValue();\r
1585 saa[k][5] = skuInfo.getVpdOffset();\r
1586 saa[k][6] = skuInfo.getValue();\r
1587 ++k;\r
1588 }\r
1589 \r
1590 }\r
1591 }\r
1592 cursor.dispose();\r
1593 \r
1594 }\r
1595 \r
1596 public String getDynamicPcdBuildDataValue(int i){\r
1597 String value = null;\r
1598 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1599 removeElement(getfpdDynPcdBuildDefs());\r
1600 fpdDynPcdBuildDefs = null;\r
a13899c5 1601 return value;\r
1602 }\r
1603 \r
1604 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1605 if (cursor.toFirstChild()) {\r
1606 for (int j = 0; j < i; ++j) {\r
1607 cursor.toNextSibling();\r
1608 }\r
1609 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1610 if (pcdData.getSkuInfoList() == null) {\r
1611 value = null;\r
1612 }\r
1613 else {\r
1614 value = pcdData.getSkuInfoArray(0).getValue();\r
1615 }\r
1616 }\r
1617 cursor.dispose();\r
1618 return value;\r
1619 }\r
1620 \r
1621 public String getDynamicPcdBuildDataVpdOffset(int i){\r
1622 String vpdOffset = null;\r
1623 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1624 removeElement(getfpdDynPcdBuildDefs());\r
1625 fpdDynPcdBuildDefs = null;\r
a13899c5 1626 return vpdOffset;\r
1627 }\r
1628 \r
1629 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1630 if (cursor.toFirstChild()) {\r
1631 for (int j = 0; j < i; ++j) {\r
1632 cursor.toNextSibling();\r
1633 }\r
1634 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1635 if (pcdData.getSkuInfoList() == null) {\r
1636 vpdOffset = null;\r
1637 }\r
1638 else {\r
1639 vpdOffset = pcdData.getSkuInfoArray(0).getVpdOffset();\r
1640 }\r
1641 }\r
1642 cursor.dispose();\r
1643 return vpdOffset;\r
1644 }\r
1645 \r
1646 public void removeDynamicPcdBuildDataSkuInfo(int i) {\r
1647 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
e232295e 1648 removeElement(getfpdDynPcdBuildDefs());\r
1649 fpdDynPcdBuildDefs = null;\r
a13899c5 1650 return;\r
1651 }\r
1652 \r
1653 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1654 if (cursor.toFirstChild()) {\r
1655 for (int j = 0; j < i; ++j) {\r
1656 cursor.toNextSibling();\r
1657 }\r
1658 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1659 if (pcdData.getSkuInfoList() == null) {\r
1660 cursor.dispose();\r
1661 return;\r
1662 }\r
1663 else {\r
1664 QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
1665 cursor.toChild(qSkuInfo);\r
1666 cursor.removeXml();\r
1667 }\r
1668 }\r
1669 cursor.dispose();\r
1670 }\r
1671 //\r
1672 // generate sku info for ith dyn pcd build data.\r
1673 //\r
1674 public void genDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1675 String hiiDefault, String vpdOffset, String value, int i) {\r
e232295e 1676// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1677// return;\r
1678// }\r
a13899c5 1679 \r
1680 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1681 if (cursor.toFirstChild()) {\r
1682 for (int j = 0; j < i; ++j) {\r
1683 cursor.toNextSibling();\r
1684 }\r
1685 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1686 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = pcdData.addNewSkuInfo();\r
1687 skuInfo.setSkuId(new BigInteger(id));\r
1688 if (varName != null){\r
1689 skuInfo.setVariableName(varName);\r
1690 skuInfo.setVariableGuid(varGuid);\r
1691 skuInfo.setVariableOffset(varOffset);\r
1692 skuInfo.setHiiDefaultValue(hiiDefault);\r
1693 }\r
1694 else if (vpdOffset != null){\r
1695 skuInfo.setVpdOffset(vpdOffset);\r
1696 }\r
1697 else{\r
1698 skuInfo.setValue(value);\r
1699 }\r
1700 }\r
1701 }\r
1702 \r
1703 public void updateDynamicPcdBuildDataSkuInfo(String id, String varName, String varGuid, String varOffset, \r
1704 String hiiDefault, String vpdOffset, String value, int i){\r
e232295e 1705// if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null || getfpdDynPcdBuildDefs().getPcdBuildDataList().size() == 0) {\r
1706// return;\r
1707// }\r
a13899c5 1708 \r
1709 XmlCursor cursor = getfpdDynPcdBuildDefs().newCursor();\r
1710 if (cursor.toFirstChild()) {\r
1711 for (int j = 0; j < i; ++j) {\r
1712 cursor.toNextSibling();\r
1713 }\r
1714 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData pcdData = (DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData)cursor.getObject();\r
1715 ListIterator<DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo> li = pcdData.getSkuInfoList().listIterator();\r
1716 while (li.hasNext()) {\r
1717 DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo skuInfo = li.next();\r
1718 if (skuInfo.getSkuId().toString().equals(id)){\r
1719 if (varName != null){\r
1720 skuInfo.setVariableName(varName);\r
1721 skuInfo.setVariableGuid(varGuid);\r
1722 skuInfo.setVariableOffset(varOffset);\r
1723 skuInfo.setHiiDefaultValue(hiiDefault);\r
1724 }\r
1725 else if (vpdOffset != null){\r
1726 skuInfo.setVpdOffset(vpdOffset);\r
1727 }\r
1728 else{\r
1729 skuInfo.setValue(value);\r
1730 }\r
1731 break;\r
1732 }\r
1733 }\r
1734 }\r
1735 }\r
1736 \r
a13899c5 1737 public BuildOptionsDocument.BuildOptions getfpdBuildOpts() {\r
1738 if (fpdBuildOpts == null) {\r
1739 fpdBuildOpts = fpdRoot.addNewBuildOptions();\r
1740 }\r
1741 return fpdBuildOpts;\r
1742 }\r
1743 \r
2b70a636 1744 public void genBuildOptionsUserExtensions(String fvName, String outputFileName, Vector<String[]> includeModules) {\r
eb8ea829 1745 QName elementFvName = new QName (xmlNs, "FvName");\r
1746 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1747 QName elementInfFileName = new QName(xmlNs, "InfFileName");\r
1748 QName elementModule = new QName(xmlNs, "Module");\r
1749 \r
1bf9fa5a 1750 UserExtensionsDocument.UserExtensions userExts = getfpdBuildOpts().addNewUserExtensions();\r
1751 userExts.setUserID("IMAGES");\r
1752 userExts.setIdentifier(new BigInteger("1"));\r
1753 XmlCursor cursor = userExts.newCursor();\r
1754 cursor.toEndToken();\r
1755 \r
eb8ea829 1756 cursor.beginElement(elementFvName);\r
1bf9fa5a 1757 cursor.insertChars(fvName);\r
1758 cursor.toNextToken();\r
1759 \r
eb8ea829 1760 cursor.beginElement(elementInfFileName);\r
61919f8c 1761 cursor.insertChars(fvName + ".inf");\r
1bf9fa5a 1762 cursor.toNextToken();\r
1763 \r
eb8ea829 1764 cursor.beginElement(elementIncludeModules);\r
2b70a636 1765 for (int i = 0; i < includeModules.size(); ++i) {\r
eb8ea829 1766 cursor.beginElement(elementModule);\r
2b70a636 1767 cursor.insertAttributeWithValue("ModuleGuid", includeModules.get(i)[0]);\r
53427242 1768 if (!includeModules.get(i)[1].equals("null") && includeModules.get(i)[1].length() != 0) {\r
1769 cursor.insertAttributeWithValue("ModuleVersion", includeModules.get(i)[1]);\r
1770 }\r
17bd391e 1771 cursor.insertAttributeWithValue("PackageGuid", includeModules.get(i)[2]);\r
53427242 1772 if (!includeModules.get(i)[3].equals("null") && includeModules.get(i)[3].length() != 0) {\r
1773 cursor.insertAttributeWithValue("PackageVersion", includeModules.get(i)[3]);\r
1774 }\r
1775 \r
17bd391e 1776 cursor.insertAttributeWithValue("Arch", includeModules.get(i)[4]);\r
1bf9fa5a 1777 cursor.toEndToken();\r
1778 cursor.toNextToken();\r
1779 }\r
1780 cursor.dispose();\r
1781 }\r
1782 \r
1783 public int getUserExtsIncModCount (String fvName) {\r
1784 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1785 return -1;\r
1786 }\r
1787 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
eb8ea829 1788 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1bf9fa5a 1789 while (li.hasNext()) {\r
1790 UserExtensionsDocument.UserExtensions ues = li.next();\r
1791 if (!ues.getUserID().equals("IMAGES")) {\r
1792 continue;\r
1793 }\r
1794 XmlCursor cursor = ues.newCursor();\r
1795 cursor.toFirstChild();\r
1796 String elementName = cursor.getTextValue();\r
1797 if (elementName.equals(fvName)) {\r
eb8ea829 1798 cursor.toNextSibling(elementIncludeModules);\r
1bf9fa5a 1799 if (cursor.toFirstChild()) {\r
1800 int i = 1;\r
1801 for (i = 1; cursor.toNextSibling(); ++i);\r
1802 cursor.dispose();\r
1803 return i;\r
1804 }\r
1805 cursor.dispose();\r
1806 return 0;\r
1807 }\r
1808 cursor.dispose();\r
1809 }\r
1810 return -1;\r
1811 }\r
1812 \r
1813 public void getUserExtsIncMods(String fvName, String[][] saa) {\r
1814 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1815 return;\r
1816 }\r
eb8ea829 1817 \r
1818 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
1819 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
1820 QName attribUserId = new QName ("UserID");\r
1821 QName elementFvName = new QName (xmlNs, "FvName");\r
1822 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1823 QName attribModuleGuid = new QName("ModuleGuid");\r
17bd391e 1824 QName attribModuleVersion = new QName("ModuleVersion");\r
1825 QName attribPackageGuid = new QName("PackageGuid");\r
1826 QName attribPackageVersion = new QName("PackageVersion");\r
1827 QName attribArch = new QName("Arch");\r
eb8ea829 1828 \r
1829 if (cursor.toChild(elementUserExts)) {\r
1830 do {\r
1831 cursor.push();\r
1832 if (cursor.getAttributeText(attribUserId).equals("IMAGES")) {\r
1833 cursor.toChild(elementFvName);\r
1834 String elementName = cursor.getTextValue();\r
1835 if (elementName.equals(fvName)) {\r
1836 cursor.toNextSibling(elementIncludeModules);\r
1837 if (cursor.toFirstChild()) {\r
1838 int i = 0;\r
1839 do {\r
1840 saa[i][0] = cursor.getAttributeText(attribModuleGuid);\r
17bd391e 1841 saa[i][1] = cursor.getAttributeText(attribModuleVersion);\r
1842 saa[i][2] = cursor.getAttributeText(attribPackageGuid);\r
1843 saa[i][3] = cursor.getAttributeText(attribPackageVersion);\r
1844 saa[i][4] = cursor.getAttributeText(attribArch);\r
eb8ea829 1845 ++i;\r
1846 }while (cursor.toNextSibling());\r
1847 }\r
1848 break;\r
1849 }\r
1850 }\r
1851 cursor.pop();\r
1852 }while (cursor.toNextSibling(elementUserExts));\r
1853 }\r
1854 cursor.dispose();\r
1855 \r
1856 }\r
1857 \r
1858 public void updateBuildOptionsUserExtensions (String oldFvName, String newFvName) {\r
1859 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1860 return;\r
1861 }\r
1bf9fa5a 1862 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
1863 while (li.hasNext()) {\r
1864 UserExtensionsDocument.UserExtensions ues = li.next();\r
1865 if (!ues.getUserID().equals("IMAGES")) {\r
1866 continue;\r
1867 }\r
1868 XmlCursor cursor = ues.newCursor();\r
1869 cursor.toFirstChild();\r
1870 String elementName = cursor.getTextValue();\r
eb8ea829 1871 if (elementName.equals(oldFvName)) {\r
1872 cursor.setTextValue(newFvName);\r
1bf9fa5a 1873 }\r
1874 cursor.dispose();\r
1875 }\r
1876 \r
1877 }\r
1878 \r
61919f8c 1879 public void removeBuildOptionsUserExtensions (String fvName) {\r
1880 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1881 return;\r
1882 }\r
1883 \r
1884 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
1885 while (li.hasNext()) {\r
1886 UserExtensionsDocument.UserExtensions ues = li.next();\r
1887 if (!ues.getUserID().equals("IMAGES")) {\r
1888 continue;\r
1889 }\r
1890 XmlCursor cursor = ues.newCursor();\r
1891 cursor.toFirstChild();\r
1892 String elementName = cursor.getTextValue();\r
1893 if (elementName.equals(fvName)) {\r
1894 cursor.toParent();\r
1895 cursor.removeXml();\r
1896 cursor.dispose();\r
1897 return;\r
1898 }\r
1899 cursor.dispose();\r
1900 }\r
1901 \r
1902 }\r
1903 \r
a0783edc 1904 private boolean versionEqual (String v1, String v2) {\r
1905 \r
1906 if ((v1 == null || v1.length() == 0 || v1.equalsIgnoreCase("null")) \r
1907 && (v2 == null || v2.length() == 0 || v2.equalsIgnoreCase("null"))) {\r
1908 return true;\r
1909 }\r
1910 \r
1911 if (v1 != null && v1.equals(v2)) {\r
1912 return true;\r
1913 }\r
1914 \r
1915 return false;\r
1916 }\r
1917 \r
1918 public boolean moduleInBuildOptionsUserExtensions (String fvName, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
1919 boolean inList = false;\r
1920 if (getUserExtsIncModCount(fvName) > 0) {\r
1921 \r
1922 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
1923 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
1924 QName attribUserId = new QName ("UserID");\r
1925 QName elementFvName = new QName (xmlNs, "FvName");\r
1926 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1927 QName attribModuleGuid = new QName("ModuleGuid");\r
1928 QName attribModuleVersion = new QName("ModuleVersion");\r
1929 QName attribPackageGuid = new QName("PackageGuid");\r
1930 QName attribPackageVersion = new QName("PackageVersion");\r
1931 QName attribArch = new QName("Arch");\r
1932 \r
1933 if (cursor.toChild(elementUserExts)) {\r
1934 do {\r
1935 cursor.push();\r
1936 if (cursor.getAttributeText(attribUserId).equals("IMAGES")) {\r
1937 cursor.toChild(elementFvName);\r
1938 String elementName = cursor.getTextValue();\r
1939 if (elementName.equals(fvName)) {\r
1940 cursor.toNextSibling(elementIncludeModules);\r
1941 if (cursor.toFirstChild()) {\r
1942 \r
1943 do {\r
1944 String mg = cursor.getAttributeText(attribModuleGuid);\r
1945 String mv = cursor.getAttributeText(attribModuleVersion);\r
1946 String pg = cursor.getAttributeText(attribPackageGuid);\r
1947 String pv = cursor.getAttributeText(attribPackageVersion);\r
1948 String ar = cursor.getAttributeText(attribArch);\r
1949 if (!moduleGuid.equalsIgnoreCase(mg)) {\r
1950 continue;\r
1951 }\r
1952 if (!packageGuid.equalsIgnoreCase(pg)) {\r
1953 continue;\r
1954 }\r
1955 if (!arch.equalsIgnoreCase(ar)) {\r
1956 continue;\r
1957 }\r
1958 if (!versionEqual(moduleVersion, mv)) {\r
1959 continue;\r
1960 }\r
1961 if (!versionEqual(packageVersion, pv)) {\r
1962 continue;\r
1963 }\r
1964 inList = true;\r
1965 break;\r
1966 }while (cursor.toNextSibling());\r
1967 }\r
1968 break;\r
1969 }\r
1970 }\r
1971 cursor.pop();\r
1972 }while (cursor.toNextSibling(elementUserExts));\r
1973 }\r
1974 cursor.dispose();\r
1975 }\r
1976 return inList;\r
1977 }\r
1978 \r
1979 public void removeModuleInBuildOptionsUserExtensions (String fvName, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
1980 if (getUserExtsIncModCount(fvName) > 0) {\r
1981 \r
1982 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
1983 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
1984 QName attribUserId = new QName ("UserID");\r
1985 QName elementFvName = new QName (xmlNs, "FvName");\r
1986 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1987 QName attribModuleGuid = new QName("ModuleGuid");\r
1988 QName attribModuleVersion = new QName("ModuleVersion");\r
1989 QName attribPackageGuid = new QName("PackageGuid");\r
1990 QName attribPackageVersion = new QName("PackageVersion");\r
1991 QName attribArch = new QName("Arch");\r
1992 \r
1993 if (cursor.toChild(elementUserExts)) {\r
1994 do {\r
1995 cursor.push();\r
1996 if (cursor.getAttributeText(attribUserId).equals("IMAGES")) {\r
1997 cursor.toChild(elementFvName);\r
1998 String elementName = cursor.getTextValue();\r
1999 if (elementName.equals(fvName)) {\r
2000 cursor.toNextSibling(elementIncludeModules);\r
2001 if (cursor.toFirstChild()) {\r
2002 \r
2003 do {\r
2004 String mg = cursor.getAttributeText(attribModuleGuid);\r
2005 String mv = cursor.getAttributeText(attribModuleVersion);\r
2006 String pg = cursor.getAttributeText(attribPackageGuid);\r
2007 String pv = cursor.getAttributeText(attribPackageVersion);\r
2008 String ar = cursor.getAttributeText(attribArch);\r
2009 if (!moduleGuid.equalsIgnoreCase(mg)) {\r
2010 continue;\r
2011 }\r
2012 if (!packageGuid.equalsIgnoreCase(pg)) {\r
2013 continue;\r
2014 }\r
2015 if (!arch.equalsIgnoreCase(ar)) {\r
2016 continue;\r
2017 }\r
2018 if (!versionEqual(moduleVersion, mv)) {\r
2019 continue;\r
2020 }\r
2021 if (!versionEqual(packageVersion, pv)) {\r
2022 continue;\r
2023 }\r
2024 cursor.removeXml();\r
2025 }while (cursor.toNextSibling());\r
2026 }\r
2027 break;\r
2028 }\r
2029 }\r
2030 cursor.pop();\r
2031 }while (cursor.toNextSibling(elementUserExts));\r
2032 }\r
2033 cursor.dispose();\r
2034 }\r
2035 }\r
61919f8c 2036 \r
a13899c5 2037 public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
2038 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2039 if (udats == null) {\r
2040 udats = getfpdBuildOpts().addNewUserDefinedAntTasks();\r
2041 }\r
2042 \r
2043 AntTaskDocument.AntTask at = udats.addNewAntTask();\r
2044 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
2045 }\r
2046 \r
2047 private void setBuildOptionsUserDefAntTask(String id, String fileName, String execOrder, AntTaskDocument.AntTask at) {\r
2048 at.setId(new Integer(id));\r
bf5abaff 2049 XmlCursor cursor = at.newCursor();\r
a13899c5 2050 if (fileName != null){\r
2051 at.setFilename(fileName);\r
2052 }\r
bf5abaff 2053 else if (cursor.toChild(xmlNs, "Filename")) {\r
2054 cursor.removeXml();\r
2055 }\r
202c4f38 2056 if (execOrder != null) {\r
a13899c5 2057 at.setAntCmdOptions(execOrder);\r
2058 }\r
bf5abaff 2059 else if (cursor.toChild(xmlNs, "AntCmdOptions")) {\r
2060 cursor.removeXml();\r
2061 }\r
2062 cursor.dispose();\r
a13899c5 2063 }\r
2064 \r
2065 public void removeBuildOptionsUserDefAntTask(int i) {\r
2066 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
2067 if (o == null) {\r
2068 return;\r
2069 }\r
2070 XmlCursor cursor = o.newCursor();\r
2071 if (cursor.toFirstChild()) {\r
2072 for (int j = 0; j < i; ++j) {\r
2073 cursor.toNextSibling();\r
2074 }\r
2075 cursor.removeXml();\r
af25df16 2076 if (getBuildOptionsUserDefAntTaskCount() == 0) {\r
2077 cursor.toParent();\r
2078 cursor.removeXml();\r
2079 }\r
a13899c5 2080 }\r
2081 cursor.dispose();\r
2082 }\r
2083 \r
2084 public void updateBuildOptionsUserDefAntTask(int i, String id, String fileName, String execOrder){\r
2085 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
2086 if (o == null) {\r
2087 return;\r
2088 }\r
2089 XmlCursor cursor = o.newCursor();\r
2090 if (cursor.toFirstChild()) {\r
2091 for (int j = 0; j < i; ++j) {\r
2092 cursor.toNextSibling();\r
2093 }\r
2094 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)cursor.getObject();\r
2095 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
2096 }\r
2097 cursor.dispose();\r
2098 }\r
2099 \r
2100 public int getBuildOptionsUserDefAntTaskCount() {\r
2101 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2102 if (udats == null || udats.getAntTaskList() == null) {\r
2103 return 0;\r
2104 }\r
2105 \r
2106 return udats.getAntTaskList().size();\r
2107 }\r
2108 \r
2109 public void getBuildOptionsUserDefAntTasks(String[][] saa) {\r
2110 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2111 if (udats == null || udats.getAntTaskList() == null) {\r
2112 return ;\r
2113 }\r
2114 \r
2115 List<AntTaskDocument.AntTask> l = udats.getAntTaskList();\r
2116 ListIterator li = l.listIterator();\r
2117 int i = 0;\r
2118 while (li.hasNext()) {\r
2119 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)li.next();\r
2120 saa[i][0] = at.getId() + "";\r
2121 saa[i][1] = saa[i][2] = "";\r
2122 if (at.getFilename() != null){\r
2123 saa[i][1] = at.getFilename();\r
2124 }\r
2125 if (at.getAntCmdOptions() != null) {\r
2126 saa[i][2] = at.getAntCmdOptions();\r
2127 }\r
2128 ++i;\r
2129 }\r
2130 }\r
1800d80f 2131 public void genBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 2132 OptionsDocument.Options opts = getfpdBuildOpts().getOptions();\r
2133 if (opts == null) {\r
2134 opts = getfpdBuildOpts().addNewOptions();\r
2135 }\r
2136 OptionDocument.Option opt = opts.addNewOption();\r
2137 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
2138 }\r
2139 \r
1800d80f 2140 private void setBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents, OptionDocument.Option opt){\r
a13899c5 2141 opt.setStringValue(contents);\r
9babb67e 2142 if (buildTargets != null) {\r
2143 opt.setBuildTargets(buildTargets);\r
2144 }\r
2145 else {\r
2146 if (opt.isSetBuildTargets()) {\r
2147 opt.unsetBuildTargets();\r
2148 }\r
2149 }\r
2150 \r
2151 if (toolChain != null && toolChain.length() > 0) {\r
2152 opt.setToolChainFamily(toolChain);\r
2153 }\r
2154 else {\r
2155 if (opt.isSetToolChainFamily()) {\r
2156 opt.unsetToolChainFamily();\r
2157 }\r
2158 }\r
2159 \r
2160 if (tagName != null && tagName.length() > 0) {\r
2161 opt.setTagName(tagName);\r
2162 }\r
2163 else {\r
2164 if (opt.isSetTagName()) {\r
2165 opt.unsetTagName();\r
2166 }\r
2167 }\r
2168 \r
2169 if (toolCmd != null && toolCmd.length() > 0) {\r
2170 opt.setToolCode(toolCmd);\r
2171 }\r
2172 else {\r
2173 if (opt.isSetToolCode()) {\r
2174 opt.unsetToolCode();\r
2175 }\r
2176 }\r
1800d80f 2177 \r
1800d80f 2178 \r
bf5abaff 2179 if (archList != null) {\r
2180 opt.setSupArchList(archList);\r
2181 }\r
2182 else {\r
2183 if (opt.isSetSupArchList()) {\r
2184 opt.unsetSupArchList();\r
2185 }\r
2186 }\r
a13899c5 2187 }\r
2188 \r
2189 public void removeBuildOptionsOpt(int i){\r
2190 \r
2191 XmlObject o = getfpdBuildOpts().getOptions();\r
2192 if (o == null) {\r
2193 return;\r
2194 }\r
2195 \r
2196 XmlCursor cursor = o.newCursor();\r
2197 if (cursor.toFirstChild()) {\r
2198 for (int j = 0; j < i; ++j) {\r
2199 cursor.toNextSibling();\r
2200 }\r
2201 cursor.removeXml();\r
af25df16 2202 if (getBuildOptionsOptCount() == 0) {\r
2203 cursor.toParent();\r
2204 cursor.removeXml();\r
2205 }\r
a13899c5 2206 }\r
2207 cursor.dispose();\r
2208 }\r
2209 \r
1800d80f 2210 public void updateBuildOptionsOpt(int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
a13899c5 2211 XmlObject o = getfpdBuildOpts().getOptions();\r
2212 if (o == null) {\r
2213 return;\r
2214 }\r
2215 \r
2216 XmlCursor cursor = o.newCursor();\r
2217 if (cursor.toFirstChild()) {\r
2218 for (int j = 0; j < i; ++j) {\r
2219 cursor.toNextSibling();\r
2220 }\r
2221 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
2222 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
2223 }\r
2224 cursor.dispose();\r
2225 }\r
2226 \r
2227 public int getBuildOptionsOptCount(){\r
2228 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
2229 return 0;\r
2230 }\r
2231 return getfpdBuildOpts().getOptions().getOptionList().size();\r
2232 }\r
2233 \r
2234 public void getBuildOptionsOpts(String[][] saa) {\r
2235 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
2236 return ;\r
2237 }\r
2238 \r
2239 List<OptionDocument.Option> lOpt = getfpdBuildOpts().getOptions().getOptionList();\r
2240 ListIterator li = lOpt.listIterator();\r
2241 int i = 0;\r
2242 while(li.hasNext()) {\r
2243 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
6cba26e8 2244 if (opt.getBuildTargets() != null) {\r
2245 saa[i][0] = listToString(opt.getBuildTargets());\r
2246 }\r
a13899c5 2247 saa[i][1] = opt.getToolChainFamily();\r
2248 if (opt.getSupArchList() != null){\r
6cba26e8 2249 saa[i][2] = listToString(opt.getSupArchList());\r
2250\r
a13899c5 2251 }\r
2252 saa[i][3] = opt.getToolCode();\r
2253 saa[i][4] = opt.getTagName();\r
2254 saa[i][5] = opt.getStringValue();\r
2255 \r
2256 ++i;\r
2257 }\r
2258 }\r
2259 \r
6cba26e8 2260 public void genBuildOptionsFfs(String ffsKey, String type) {\r
2261 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
2262 ffs.setFfsKey(ffsKey);\r
2263 if (type != null) {\r
2264 ffs.addNewSections().setEncapsulationType(type);\r
2265 }\r
2266 }\r
2267 \r
3b405e9b 2268 public void updateBuildOptionsFfsSectionsType(int i, String type) {\r
2269 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
2270 if (type != null) {\r
2271 ffs.addNewSections().setEncapsulationType(type);\r
2272 }\r
2273 }\r
2274 \r
6cba26e8 2275 public void genBuildOptionsFfsAttribute(int i, String name, String value) {\r
2276 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2277 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = ffs.addNewAttribute();\r
2278 attrib.setName(name);\r
2279 attrib.setValue(value);\r
2280 }\r
2281 \r
2282 /**update jth attribute of ith ffs.\r
2283 * @param i\r
2284 * @param j\r
2285 */\r
2286 public void updateBuildOptionsFfsAttribute(int i, int j, String name, String value){\r
2287 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2288 XmlCursor cursor = ffs.newCursor();\r
2289 QName qAttrib = new QName(xmlNs, "Attribute");\r
2290 if (cursor.toChild(qAttrib)) {\r
2291 for (int k = 0; k < j; ++k) {\r
2292 cursor.toNextSibling(qAttrib);\r
2293 }\r
2294 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = (BuildOptionsDocument.BuildOptions.Ffs.Attribute)cursor.getObject();\r
2295 attrib.setName(name);\r
2296 attrib.setValue(value);\r
2297 }\r
2298 cursor.dispose();\r
2299 }\r
2300 \r
2301 public void removeBuildOptionsFfsAttribute(int i, int j){\r
2302 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2303 XmlCursor cursor = ffs.newCursor();\r
2304 QName qAttrib = new QName(xmlNs, "Attribute");\r
2305 if (cursor.toChild(qAttrib)) {\r
2306 for (int k = 0; k < j; ++k) {\r
2307 cursor.toNextSibling(qAttrib);\r
2308 }\r
2309 cursor.removeXml();\r
2310 }\r
2311 cursor.dispose();\r
2312 }\r
2313 \r
2314 public void genBuildOptionsFfsSectionsSection(int i, String sectionType) {\r
2315 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2316 if (ffs == null) {\r
2317 return;\r
2318 }\r
2319 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2320 \r
2321 if (sections == null){\r
2322 sections = ffs.addNewSections();\r
2323 }\r
2324 sections.addNewSection().setSectionType(EfiSectionType.Enum.forString(sectionType));\r
2325 }\r
2326 \r
3b405e9b 2327 public void removeBuildOptionsFfsSectionsSection(int i, int j) {\r
2328 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2329 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2330 if (sections == null) {\r
2331 return;\r
2332 }\r
2333 XmlCursor cursor = sections.newCursor();\r
2334 QName qSection = new QName(xmlNs, "Section");\r
2335 if (cursor.toChild(qSection)) {\r
2336 for (int k = 0; k < j; ++k) {\r
2337 cursor.toNextSibling(qSection);\r
2338 }\r
2339 cursor.removeXml();\r
2340 }\r
2341 cursor.dispose();\r
2342 }\r
2343 \r
2344 public void updateBuildOptionsFfsSectionsSection(int i, int j, String type){\r
2345 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2346 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2347 if (sections == null) {\r
2348 return;\r
2349 }\r
2350 XmlCursor cursor = sections.newCursor();\r
2351 QName qSection = new QName(xmlNs, "Section");\r
2352 if (cursor.toChild(qSection)) {\r
2353 for (int k = 0; k < j; ++k) {\r
2354 cursor.toNextSibling(qSection);\r
2355 }\r
2356 BuildOptionsDocument.BuildOptions.Ffs.Sections.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Section)cursor.getObject();\r
2357 section.setSectionType(EfiSectionType.Enum.forString(type));\r
2358 }\r
2359 cursor.dispose();\r
2360 } \r
2361 \r
6cba26e8 2362 public void genBuildOptionsFfsSectionsSections(int i, String encapType) {\r
2363 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2364 if (ffs == null) {\r
2365 return;\r
2366 }\r
2367 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2368 \r
2369 if (sections == null){\r
2370 sections = ffs.addNewSections();\r
2371 }\r
2372 sections.addNewSections().setEncapsulationType(encapType);\r
2373 }\r
2374 \r
3b405e9b 2375 public void removeBuildOptionsFfsSectionsSections(int i, int j) {\r
2376 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2377 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2378 if (sections == null) {\r
2379 return;\r
2380 }\r
2381 XmlCursor cursor = sections.newCursor();\r
2382 QName qSections = new QName(xmlNs, "Sections");\r
2383 if (cursor.toChild(qSections)) {\r
2384 for (int k = 0; k < j; ++k) {\r
2385 cursor.toNextSibling(qSections);\r
2386 }\r
2387 cursor.removeXml();\r
2388 }\r
2389 cursor.dispose();\r
2390 }\r
2391 \r
2392 public void updateBuildOptionsFfsSectionsSections(int i, int j, String type) {\r
2393 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2394 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2395 if (sections == null) {\r
2396 return;\r
2397 }\r
2398 XmlCursor cursor = sections.newCursor();\r
2399 QName qSections = new QName(xmlNs, "Sections");\r
2400 if (cursor.toChild(qSections)) {\r
2401 for (int k = 0; k < j; ++k) {\r
2402 cursor.toNextSibling(qSections);\r
2403 }\r
2404 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2405 sections2.setEncapsulationType(type);\r
2406 }\r
2407 cursor.dispose();\r
2408 }\r
2409 \r
6cba26e8 2410 public void genBuildOptionsFfsSectionsSectionsSection(int i, int j, String type) {\r
2411 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2412 if (ffs == null) {\r
2413 return;\r
2414 }\r
2415 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2416 XmlCursor cursor = sections.newCursor();\r
2417 QName qSections = new QName(xmlNs, "Sections");\r
2418 if (cursor.toChild(qSections)){\r
2419 for (int k = 0; k < j; ++k) {\r
2420 cursor.toNextSibling(qSections);\r
2421 }\r
2422 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2423 sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString(type));\r
2424 }\r
2425 cursor.dispose();\r
2426 }\r
2427 \r
3b405e9b 2428 public void removeBuildOptionsFfsSectionsSectionsSection(int i, int j, int k) {\r
2429 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2430 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2431 if (sections == null) {\r
2432 return;\r
2433 }\r
2434 XmlCursor cursor = sections.newCursor();\r
2435 QName qSections = new QName(xmlNs, "Sections");\r
2436 if (cursor.toChild(qSections)) {\r
2437 for (int l = 0; l < j; ++l) {\r
2438 cursor.toNextSibling(qSections);\r
2439 }\r
2440 if (cursor.toFirstChild()) {\r
af25df16 2441 int m = 0;\r
2442 for (; m < k; ++m) {\r
3b405e9b 2443 cursor.toNextSibling();\r
2444 }\r
2445 cursor.removeXml();\r
af25df16 2446 if (m == 0) {\r
2447 cursor.toParent();\r
2448 cursor.removeXml();\r
2449 }\r
3b405e9b 2450 }\r
2451 }\r
2452 cursor.dispose();\r
2453 }\r
2454 \r
2455 public void updateBuildOptionsFfsSectionsSectionsSection(int i, int j, int k, String type) {\r
2456 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2457 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2458 if (sections == null) {\r
2459 return;\r
2460 }\r
2461 XmlCursor cursor = sections.newCursor();\r
2462 QName qSections = new QName(xmlNs, "Sections");\r
2463 if (cursor.toChild(qSections)) {\r
2464 for (int l = 0; l < j; ++l) {\r
2465 cursor.toNextSibling(qSections);\r
2466 }\r
2467 if (cursor.toFirstChild()) {\r
2468 for (int m = 0; m < k; ++m) {\r
2469 cursor.toNextSibling();\r
2470 }\r
2471 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section)cursor.getObject();\r
2472 section.setSectionType(EfiSectionType.Enum.forString(type));\r
2473 }\r
2474 }\r
2475 cursor.dispose();\r
2476 }\r
2477 \r
6cba26e8 2478 public void getBuildOptionsFfsSectionsSectionsSection(int i, int j, ArrayList<String> al) {\r
2479 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2480 if (ffs == null) {\r
2481 return;\r
2482 }\r
2483 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2484 XmlCursor cursor = sections.newCursor();\r
2485 QName qSections = new QName(xmlNs, "Sections");\r
2486 if (cursor.toChild(qSections)){\r
2487 for (int k = 0; k < j; ++k) {\r
2488 cursor.toNextSibling(qSections);\r
2489 }\r
2490 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2491 if (sections2.getSectionList() == null){\r
2492 cursor.dispose();\r
2493 return;\r
2494 }\r
2495 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section> li = sections2.getSectionList().listIterator();\r
2496 while(li.hasNext()) {\r
2497 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = li.next();\r
3b405e9b 2498 if (section.isSetSectionType()) {\r
1800d80f 2499 al.add(section.getSectionType().toString());\r
2500 }\r
3b405e9b 2501 \r
2502 }\r
6cba26e8 2503 }\r
2504 cursor.dispose();\r
2505 \r
2506 }\r
2507 \r
2508 public int getBuildOptionsFfsCount(){\r
2509 if (getfpdBuildOpts().getFfsList() == null) {\r
2510 return 0;\r
2511 }\r
2512 return getfpdBuildOpts().getFfsList().size();\r
2513 }\r
2514 \r
2515 public void getBuildOptionsFfsKey(String[][] saa) {\r
2516 if (getfpdBuildOpts().getFfsList() == null) {\r
2517 return;\r
2518 }\r
2519 ListIterator<BuildOptionsDocument.BuildOptions.Ffs> li = getfpdBuildOpts().getFfsList().listIterator();\r
2520 int i = 0;\r
2521 while(li.hasNext()){\r
2522 BuildOptionsDocument.BuildOptions.Ffs ffs = li.next();\r
2523 saa[i][0] = ffs.getFfsKey();\r
2524 ++i;\r
2525 }\r
2526 }\r
2527 \r
3b405e9b 2528 public void updateBuildOptionsFfsKey(int i, String key) {\r
2529 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2530 ffs.setFfsKey(key);\r
2531 }\r
2532 \r
6cba26e8 2533 /**Get ith FFS key and contents.\r
2534 * @param saa\r
2535 */\r
2536 public void getBuildOptionsFfs(int i, String[] sa, LinkedHashMap<String, String> ffsAttribMap, ArrayList<String> firstLevelSections, ArrayList<String> firstLevelSection) {\r
2537 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2538 \r
2539 if (ffs != null) {\r
2540 \r
2541 sa[0] = ffs.getFfsKey();\r
2542 if (ffs.getSections() != null) {\r
2543 if(ffs.getSections().getEncapsulationType() != null){\r
2544 sa[1] = ffs.getSections().getEncapsulationType();\r
2545 }\r
2546 if (ffs.getSections().getSectionList() != null){\r
2547 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Section> li = ffs.getSections().getSectionList().listIterator();\r
2548 while (li.hasNext()) {\r
2549 firstLevelSection.add(li.next().getSectionType().toString());\r
2550 }\r
2551 }\r
2552 if (ffs.getSections().getSectionsList() != null) {\r
2553 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2> li = ffs.getSections().getSectionsList().listIterator();\r
2554 while(li.hasNext()) {\r
2555 firstLevelSections.add(li.next().getEncapsulationType());\r
2556 }\r
2557 }\r
2558 }\r
2559 if (ffs.getAttributeList() != null) {\r
2560 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Attribute> li = ffs.getAttributeList().listIterator();\r
2561 while(li.hasNext()) {\r
2562 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = li.next();\r
2563 ffsAttribMap.put(attrib.getName(), attrib.getValue());\r
2564 }\r
2565 \r
2566 }\r
2567 }\r
2568\r
2569 \r
2570 }\r
2571 \r
2572 private BuildOptionsDocument.BuildOptions.Ffs getFfs(int i) {\r
2573 XmlObject o = getfpdBuildOpts();\r
2574 BuildOptionsDocument.BuildOptions.Ffs ffs = null;\r
2575 \r
2576 XmlCursor cursor = o.newCursor();\r
2577 QName qFfs = new QName(xmlNs, "Ffs");\r
2578 if (cursor.toChild(qFfs)) {\r
2579 for (int j = 0; j < i; ++j) {\r
2580 cursor.toNextSibling(qFfs);\r
2581 }\r
2582 ffs = (BuildOptionsDocument.BuildOptions.Ffs)cursor.getObject();\r
2583 }\r
2584 cursor.dispose();\r
2585 return ffs;\r
2586 }\r
2587 \r
2588 public void removeBuildOptionsFfs(int i) {\r
2589 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2590 if (ffs == null){\r
2591 return;\r
2592 }\r
2593 \r
2594 XmlCursor cursor = ffs.newCursor();\r
2595 cursor.removeXml();\r
2596 cursor.dispose();\r
2597 }\r
2598 \r
3b405e9b 2599 \r
2600 \r
a13899c5 2601 public PlatformDefinitionsDocument.PlatformDefinitions getfpdPlatformDefs(){\r
2602 if (fpdPlatformDefs == null){\r
2603 fpdPlatformDefs = fpdRoot.addNewPlatformDefinitions();\r
2604 }\r
2605 return fpdPlatformDefs;\r
2606 }\r
2607 \r
6a09eb19 2608 public void getPlatformDefsSupportedArchs(Vector<Object> archs){\r
2609 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {\r
2610 return;\r
2611 }\r
2612 ListIterator li = getfpdPlatformDefs().getSupportedArchitectures().listIterator();\r
2613 while(li.hasNext()) {\r
2614 archs.add(li.next());\r
2615 }\r
2616 }\r
2617 \r
2618 public void setPlatformDefsSupportedArchs(Vector<Object> archs) {\r
bf5abaff 2619 if (archs != null) {\r
2620 getfpdPlatformDefs().setSupportedArchitectures(archs);\r
2621 }\r
2622// else {\r
2623// XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
2624// if (cursor.toChild(xmlNs, "SupportedArchitectures")) {\r
2625// cursor.removeXml();\r
2626// }\r
2627// cursor.dispose();\r
2628// }\r
6a09eb19 2629 }\r
2630 \r
2631 public void getPlatformDefsBuildTargets(Vector<Object> targets) {\r
2632 if (getfpdPlatformDefs().getBuildTargets() == null) {\r
2633 return;\r
2634 }\r
2635 ListIterator li = getfpdPlatformDefs().getBuildTargets().listIterator();\r
2636 while(li.hasNext()) {\r
2637 targets.add(li.next());\r
2638 }\r
2639 }\r
2640 \r
2641 public void setPlatformDefsBuildTargets(Vector<Object> targets) {\r
2642 getfpdPlatformDefs().setBuildTargets(targets);\r
2643 }\r
2644 \r
2645 public void genPlatformDefsSkuInfo(String id, String name) {\r
2646 SkuInfoDocument.SkuInfo skuInfo = null;\r
2647 if (getfpdPlatformDefs().getSkuInfo() == null) {\r
2648 skuInfo = getfpdPlatformDefs().addNewSkuInfo();\r
2649 }\r
2650 skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2651 if (skuInfo.getUiSkuNameList() == null || skuInfo.getUiSkuNameList().size() == 0) {\r
2652 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
2653 skuName.setSkuID(new BigInteger("0"));\r
2654 skuName.setStringValue("DEFAULT");\r
2655 }\r
2656 if (id.equals("0")) {\r
2657 return;\r
2658 }\r
2659 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
2660 skuName.setSkuID(new BigInteger(id));\r
2661 skuName.setStringValue(name);\r
2662 }\r
2663 \r
2664 public int getPlatformDefsSkuInfoCount(){\r
2665 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
2666 return 0;\r
2667 }\r
2668 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();\r
2669 }\r
2670 \r
2671 public void getPlatformDefsSkuInfos(String[][] saa){\r
2672 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
5af6b67f 2673 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
2674 removeElement(getfpdDynPcdBuildDefs());\r
2675 fpdDynPcdBuildDefs = null;\r
2676 }\r
6a09eb19 2677 return ;\r
2678 }\r
2679 \r
2680 List<SkuInfoDocument.SkuInfo.UiSkuName> l = getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();\r
2681 ListIterator<SkuInfoDocument.SkuInfo.UiSkuName> li = l.listIterator();\r
2682 int i = 0;\r
2683 while(li.hasNext()) {\r
2684 SkuInfoDocument.SkuInfo.UiSkuName sku = li.next();\r
2685 saa[i][0] = sku.getSkuID()+"";\r
2686 saa[i][1] = sku.getStringValue();\r
2687 ++i;\r
2688 }\r
2689 }\r
2690 \r
2691 public void removePlatformDefsSkuInfo(int i) {\r
2692 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2693 if (skuInfo == null || i == 0) {\r
2694 return ;\r
2695 }\r
2696 \r
2697 XmlCursor cursor = skuInfo.newCursor();\r
2698 if (cursor.toFirstChild()) {\r
2699 for (int j = 0; j < i; ++j) {\r
2700 cursor.toNextSibling();\r
2701 }\r
2702 cursor.removeXml();\r
2703 }\r
2704 cursor.dispose();\r
2705 }\r
2706 \r
2707 public void updatePlatformDefsSkuInfo(int i, String id, String name) {\r
2708 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2709 if (skuInfo == null || i == 0) {\r
2710 return ;\r
2711 }\r
2712 \r
2713 XmlCursor cursor = skuInfo.newCursor();\r
2714 if (cursor.toFirstChild()) {\r
2715 for (int j = 0; j < i; ++j) {\r
2716 cursor.toNextSibling();\r
2717 }\r
2718 SkuInfoDocument.SkuInfo.UiSkuName sku = (SkuInfoDocument.SkuInfo.UiSkuName)cursor.getObject();\r
2719 sku.setSkuID(new BigInteger(id));\r
2720 sku.setStringValue(name);\r
2721 }\r
2722 cursor.dispose();\r
2723 }\r
2724 \r
2725 public String getPlatformDefsInterDir(){\r
2726 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {\r
2727 return null;\r
2728 }\r
2729 return getfpdPlatformDefs().getIntermediateDirectories().toString();\r
2730 }\r
2731 \r
2732 public void setPlatformDefsInterDir(String interDir){\r
2733 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType.Enum.forString(interDir));\r
2734 }\r
2735 \r
2736 public String getPlatformDefsOutputDir() {\r
2737 return getfpdPlatformDefs().getOutputDirectory();\r
2738 }\r
2739 \r
2740 public void setPlatformDefsOutputDir(String outputDir) {\r
af25df16 2741 if (outputDir != null && outputDir.length() > 0) {\r
2742 getfpdPlatformDefs().setOutputDirectory(outputDir);\r
2743 }\r
2744 else{\r
2745 XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
2746 if (cursor.toChild(new QName(xmlNs, "OutputDirectory"))) {\r
2747 cursor.removeXml();\r
2748 }\r
2749 cursor.dispose();\r
2750 }\r
6a09eb19 2751 }\r
2752 \r
a13899c5 2753 public FlashDocument.Flash getfpdFlash() {\r
2754 if (fpdFlash == null) {\r
2755 fpdFlash = fpdRoot.addNewFlash();\r
2756 }\r
2757 return fpdFlash;\r
2758 }\r
2759 \r
2760 public void genFlashDefinitionFile(String file) {\r
2761 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2762 if (fdf == null) {\r
2763 fdf = getfpdFlash().addNewFlashDefinitionFile();\r
2764 }\r
2765 \r
2766 fdf.setStringValue(file);\r
2767 }\r
2768 \r
2769 public String getFlashDefinitionFile() {\r
2770 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2771 if (fdf == null) {\r
2772 return "";\r
2773 }\r
2774 \r
2775 return fdf.getStringValue();\r
2776 }\r
2777 \r
a13899c5 2778 public void genFvImagesNameValue(String name, String value) {\r
2779 \r
2780 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2781 if (fi == null) {\r
2782 fi = getfpdFlash().addNewFvImages();\r
2783 }\r
2784 \r
2785 FvImagesDocument.FvImages.NameValue nv = fi.addNewNameValue();\r
2786 nv.setName(name);\r
2787 nv.setValue(value);\r
2788 }\r
2789 \r
2790 public void removeFvImagesNameValue(int i){\r
2791 \r
2792 XmlObject o = getfpdFlash().getFvImages();\r
2793 if (o == null) {\r
2794 return;\r
2795 }\r
2796 \r
2797 QName qNameValue = new QName(xmlNs, "NameValue");\r
2798 XmlCursor cursor = o.newCursor();\r
2799 if (cursor.toChild(qNameValue)) {\r
2800 for (int j = 0; j < i; ++j) {\r
2801 cursor.toNextSibling(qNameValue);\r
2802 }\r
2803 cursor.removeXml();\r
2804 }\r
2805 cursor.dispose();\r
2806 }\r
2807 \r
2808 public void updateFvImagesNameValue(int i, String name, String value){\r
2809 \r
2810 XmlObject o = getfpdFlash().getFvImages();\r
2811 if (o == null) {\r
2812 return;\r
2813 }\r
2814 \r
2815 QName qNameValue = new QName(xmlNs, "NameValue");\r
2816 XmlCursor cursor = o.newCursor();\r
2817 if (cursor.toChild(qNameValue)) {\r
2818 for (int j = 0; j < i; ++j) {\r
2819 cursor.toNextSibling(qNameValue);\r
2820 }\r
2821 FvImagesDocument.FvImages.NameValue nv = (FvImagesDocument.FvImages.NameValue)cursor.getObject();\r
2822 nv.setName(name);\r
2823 nv.setValue(value);\r
2824 }\r
2825 cursor.dispose();\r
2826 }\r
2827 \r
2828 public int getFvImagesNameValueCount() {\r
2829 \r
2830 FvImagesDocument.FvImages fi = null;\r
2831 if ((fi = getfpdFlash().getFvImages()) == null || fi.getNameValueList() == null) {\r
2832 return 0;\r
2833 }\r
2834 return fi.getNameValueList().size();\r
2835 }\r
2836 \r
2837 public void getFvImagesNameValues(String[][] nv) {\r
2838 \r
2839 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2840 if (fi == null){\r
2841 return;\r
2842 }\r
2843 List<FvImagesDocument.FvImages.NameValue> l = fi.getNameValueList();\r
2844 int i = 0;\r
2845 ListIterator li = l.listIterator();\r
2846 while (li.hasNext()) {\r
2847 FvImagesDocument.FvImages.NameValue e = (FvImagesDocument.FvImages.NameValue) li\r
2848 .next();\r
2849 nv[i][0] = e.getName();\r
2850 nv[i][1] = e.getValue();\r
2851 \r
2852 i++;\r
2853 }\r
2854 }\r
2855 \r
eb8ea829 2856 public void getFvImagesFvImageFvImageNames (Vector<String> vImageNames) {\r
98c20797 2857 FvImagesDocument.FvImages fis = getfpdFlash().getFvImages();\r
2858 if (fis == null || fis.getFvImageList() == null) {\r
2859 return;\r
2860 }\r
eb8ea829 2861 \r
98c20797 2862 ListIterator<FvImagesDocument.FvImages.FvImage> li = fis.getFvImageList().listIterator();\r
2863 while (li.hasNext()) {\r
2864 FvImagesDocument.FvImages.FvImage fi = li.next();\r
2865 if (fi.getType().toString().equals("ImageName")) {\r
2866 vImageNames.addAll(fi.getFvImageNamesList());\r
2867 return;\r
2868 }\r
2869 }\r
eb8ea829 2870 }\r
2871 \r
54aa8673 2872 public void addFvImageFvImageNames (String[] fvNames) {\r
eb8ea829 2873 FvImagesDocument.FvImages fis = getfpdFlash().getFvImages();\r
2874 if (fis == null || fis.getFvImageList() == null) {\r
2875 genFvImagesFvImage (fvNames, "ImageName", null);\r
2876 return;\r
2877 }\r
2878 \r
2879 ListIterator<FvImagesDocument.FvImages.FvImage> li = fis.getFvImageList().listIterator();\r
2880 while (li.hasNext()) {\r
2881 FvImagesDocument.FvImages.FvImage fi = li.next();\r
2882 if (fi.getType().toString().equals("ImageName")) {\r
54aa8673 2883 addFvImageNamesInFvImage (fi, fvNames);\r
eb8ea829 2884 return;\r
2885 }\r
2886 }\r
54aa8673 2887 genFvImagesFvImage (fvNames, "ImageName", null); \r
2888 }\r
2889 \r
2890 public void addFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String[] fvNames) {\r
eb8ea829 2891 \r
54aa8673 2892 for (int i = 0; i < fvNames.length; ++i) {\r
2893 fi.addFvImageNames(fvNames[i]);\r
2894 }\r
2895 }\r
2896 \r
2897 public void addFvImageNamesInFvImage (int i, String[] fvNames) {\r
2898 XmlObject o = getfpdFlash().getFvImages();\r
2899 if (o == null) {\r
2900 return;\r
2901 }\r
2902 XmlCursor cursor = o.newCursor();\r
2903 QName qFvImage = new QName(xmlNs, "FvImage");\r
2904 if (cursor.toChild(qFvImage)) {\r
2905 for (int j = 0; j < i; ++j) {\r
2906 cursor.toNextSibling(qFvImage);\r
2907 }\r
2908 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
2909 addFvImageNamesInFvImage(fi, fvNames);\r
2910 }\r
2911 cursor.dispose();\r
eb8ea829 2912 }\r
2913 \r
a13899c5 2914 public void genFvImagesFvImage(String[] names, String types, Map<String, String> options) {\r
2915 \r
2916 FvImagesDocument.FvImages fis = null;\r
2917 if ((fis = getfpdFlash().getFvImages()) == null) {\r
2918 fis = getfpdFlash().addNewFvImages();\r
2919 }\r
2920 \r
2921 //\r
2922 //gen FvImage with FvImageNames array\r
2923 //\r
2924 FvImagesDocument.FvImages.FvImage fi = fis.addNewFvImage();\r
2925 for (int i = 0; i < names.length; ++i) {\r
2926 fi.addFvImageNames(names[i]);\r
2927 }\r
2928 fi.setType(FvImageTypes.Enum.forString(types));\r
2929 if (options != null){\r
2930 setFvImagesFvImageFvImageOptions(options, fi);\r
2931 }\r
2932 }\r
2933 \r
2934 private void setFvImagesFvImageFvImageOptions(Map<String, String> options, FvImagesDocument.FvImages.FvImage fi){\r
2935 FvImagesDocument.FvImages.FvImage.FvImageOptions fio = fi.getFvImageOptions();\r
2936 if (fio == null){\r
2937 fio = fi.addNewFvImageOptions();\r
2938 }\r
2939 \r
2940 Set<String> key = options.keySet();\r
2941 Iterator<String> i = key.iterator();\r
2942 while (i.hasNext()) {\r
44053733 2943 \r
a13899c5 2944 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
2945 String k = (String)i.next();\r
ae0d4fd2 2946 \r
a13899c5 2947 nv.setName(k);\r
2948 nv.setValue((String)options.get(k));\r
2949 \r
2950 }\r
2951 \r
2952 }\r
2953 \r
44053733 2954 \r
a13899c5 2955 public void removeFvImagesFvImage(int i) {\r
2956 \r
2957 XmlObject o = getfpdFlash().getFvImages();\r
2958 if (o == null) {\r
2959 return;\r
2960 }\r
2961 \r
2962 QName qFvImage = new QName(xmlNs, "FvImage");\r
2963 XmlCursor cursor = o.newCursor();\r
2964 if (cursor.toChild(qFvImage)) {\r
2965 for (int j = 0; j < i; ++j) {\r
2966 cursor.toNextSibling(qFvImage);\r
2967 }\r
2968 cursor.removeXml();\r
2969 }\r
2970 cursor.dispose();\r
2971 }\r
2972 \r
98c20797 2973 /**\r
2974 * @param oldFvName\r
2975 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.\r
2976 */\r
eb8ea829 2977 public void updateFvImageNameAll (String oldFvName, String newFvName) {\r
2978 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
2979 return;\r
2980 }\r
2981 ListIterator<FvImagesDocument.FvImages.FvImage> li = getfpdFlash().getFvImages().getFvImageList().listIterator();\r
2982 while (li.hasNext()) {\r
2983 FvImagesDocument.FvImages.FvImage fi = li.next();\r
2984 updateFvImageNamesInFvImage (fi, oldFvName, newFvName);\r
701d95b3 2985 if (fi.getFvImageNamesList().size() == 0) {\r
2986 li.remove();\r
2987 }\r
eb8ea829 2988 }\r
2989 }\r
2990 \r
54aa8673 2991 public void updateFvImageNamesInFvImage (int i, String oldFvName, String newFvName) {\r
2992 XmlObject o = getfpdFlash().getFvImages();\r
2993 if (o == null) {\r
2994 return;\r
2995 }\r
2996 XmlCursor cursor = o.newCursor();\r
2997 QName qFvImage = new QName(xmlNs, "FvImage");\r
2998 if (cursor.toChild(qFvImage)) {\r
2999 for (int j = 0; j < i; ++j) {\r
3000 cursor.toNextSibling(qFvImage);\r
3001 }\r
3002 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3003 updateFvImageNamesInFvImage (fi, oldFvName, newFvName);\r
3004 }\r
3005 cursor.dispose();\r
3006 }\r
98c20797 3007 /**\r
3008 * @param fi\r
3009 * @param oldFvName The FV Name to be replaced.\r
3010 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.\r
3011 */\r
eb8ea829 3012 public void updateFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String oldFvName, String newFvName) {\r
3013 QName qFvImageNames = new QName(xmlNs, "FvImageNames");\r
3014 XmlCursor cursor = fi.newCursor();\r
3015 \r
3016 if (cursor.toChild(qFvImageNames)) {\r
3017 do {\r
701d95b3 3018 String xmlValue = cursor.getTextValue();\r
3019 if (xmlValue.equals(oldFvName)){\r
98c20797 3020 if (newFvName != null) {\r
3021 cursor.setTextValue(newFvName);\r
3022 }\r
3023 else {\r
54aa8673 3024 cursor.removeXml();\r
98c20797 3025 }\r
eb8ea829 3026 }\r
3027 }while (cursor.toNextSibling(qFvImageNames));\r
3028 }\r
3029 \r
3030 cursor.dispose();\r
3031 }\r
3032 \r
72426064 3033 /**update the Type attribute of ith FvImage with new type.\r
3034 * @param i\r
3035 * @param type\r
3036 */\r
3037 public void updateFvImagesFvImageType (int i, String type) {\r
3038 XmlObject o = getfpdFlash().getFvImages();\r
3039 if (o == null) {\r
3040 return;\r
3041 }\r
3042 XmlCursor cursor = o.newCursor();\r
3043 QName qFvImage = new QName(xmlNs, "FvImage");\r
3044 if (cursor.toChild(qFvImage)) {\r
3045 for (int j = 0; j < i; ++j) {\r
3046 cursor.toNextSibling(qFvImage);\r
3047 }\r
3048 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3049 fi.setType(FvImageTypes.Enum.forString(type));\r
3050 }\r
3051 cursor.dispose();\r
3052 }\r
3053 \r
a13899c5 3054 public void updateFvImagesFvImage(int i, String[] names, String types, Map<String, String> options){\r
3055 \r
3056 XmlObject o = getfpdFlash().getFvImages();\r
3057 if (o == null) {\r
3058 return;\r
3059 }\r
3060 XmlCursor cursor = o.newCursor();\r
3061 QName qFvImage = new QName(xmlNs, "FvImage");\r
3062 if (cursor.toChild(qFvImage)) {\r
3063 for (int j = 0; j < i; ++j) {\r
3064 cursor.toNextSibling(qFvImage);\r
3065 }\r
3066 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3067 fi.setType(FvImageTypes.Enum.forString(types));\r
3068 \r
3069 //\r
3070 // remove old FvImageNames before adding new ones\r
3071 //\r
3072 QName qFvImageNames = new QName(xmlNs, "FvImageNames"); \r
3073 cursor.toChild(qFvImageNames);\r
3074 cursor.removeXml();\r
3075 while (cursor.toNextSibling(qFvImageNames)) {\r
3076 cursor.removeXml();\r
3077 }\r
3078 \r
3079 for (int k = 0; k < names.length; ++k) {\r
3080 fi.addFvImageNames(names[k]);\r
3081 }\r
3082 //\r
3083 // remove old FvImageOptions before adding new options\r
3084 //\r
3085 QName qFvImageOptions = new QName(xmlNs, "FvImageOptions");\r
3086 cursor.toNextSibling(qFvImageOptions);\r
3087 cursor.removeXml();\r
3088 \r
3089 setFvImagesFvImageFvImageOptions(options, fi);\r
3090 }\r
3091 cursor.dispose();\r
3092 }\r
3093 \r
98c20797 3094 public int getFvImagesFvImageCount(String type) {\r
a13899c5 3095 \r
3096 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
3097 return 0;\r
3098 }\r
98c20797 3099 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3100 ListIterator li = l.listIterator();\r
3101 int i = 0;\r
3102 while(li.hasNext()) {\r
3103 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3104 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3105 continue;\r
3106 }\r
3107 \r
3108 ++i;\r
3109 }\r
3110 \r
3111 return i;\r
a13899c5 3112 }\r
3113 \r
98c20797 3114 public Vector<FvImagesDocument.FvImages.FvImage> getFvImagesFvImageWithName (String fvName, String type) {\r
3115 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = new Vector<FvImagesDocument.FvImages.FvImage>();\r
3116 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
3117 return vFvImage;\r
3118 }\r
3119 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3120 ListIterator li = l.listIterator();\r
3121 while(li.hasNext()) {\r
3122 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3123 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3124 continue;\r
3125 }\r
3126 if (fi.getFvImageNamesList().contains(fvName)) {\r
3127 vFvImage.add(fi);\r
3128 }\r
3129 }\r
3130 \r
3131 return vFvImage;\r
3132 }\r
3133 /**\r
ae0d4fd2 3134 * @param saa\r
98c20797 3135 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.\r
ae0d4fd2 3136 */\r
98c20797 3137 public void getFvImagesFvImages(String[][] saa, String type) {\r
a13899c5 3138 \r
3139 if (getfpdFlash().getFvImages() == null) {\r
3140 return;\r
3141 }\r
3142 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3143 if (l == null) {\r
3144 return;\r
3145 }\r
3146 ListIterator li = l.listIterator();\r
3147 int i = 0;\r
3148 while(li.hasNext()) {\r
3149 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
98c20797 3150 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3151 continue;\r
3152 }\r
a13899c5 3153 //\r
3154 // get FvImageNames array, space separated\r
3155 //\r
3156 List<String> lfn = fi.getFvImageNamesList();\r
3157 ListIterator lfni = lfn.listIterator();\r
3158 saa[i][0] = " ";\r
3159 while (lfni.hasNext()) {\r
3160 saa[i][0] += (String)lfni.next();\r
3161 saa[i][0] += " ";\r
3162 }\r
3163 saa[i][0] = saa[i][0].trim();\r
3164 \r
3165 saa[i][1] = fi.getType()+"";\r
3166 \r
ae0d4fd2 3167 ++i;\r
3168 }\r
3169 }\r
3170 \r
54aa8673 3171 public void removeFvImageNameValue (int i, String attributeName) {\r
3172 XmlObject o = getfpdFlash().getFvImages();\r
3173 if (o == null) {\r
3174 return;\r
3175 }\r
3176 XmlCursor cursor = o.newCursor();\r
3177 QName qFvImage = new QName(xmlNs, "FvImage");\r
3178 if (cursor.toChild(qFvImage)) {\r
3179 for (int j = 0; j < i; ++j) {\r
3180 cursor.toNextSibling(qFvImage);\r
3181 }\r
3182 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3183 removeFvImageNameValue (fi, attributeName);\r
3184 }\r
3185 cursor.dispose();\r
3186 }\r
72426064 3187 /**Remove from fi the attribute pair with attributeName in FvImageOptions.\r
3188 * @param fi\r
3189 * @param attributeName\r
3190 */\r
3191 public void removeFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String attributeName) {\r
3192 if (fi.getFvImageOptions() != null && fi.getFvImageOptions().getNameValueList() != null) {\r
3193 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
3194 while (li.hasNext()) {\r
3195 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
3196 if (nv.getName().equals(attributeName)) {\r
3197 li.remove();\r
3198 }\r
3199 }\r
3200 }\r
3201 }\r
3202 \r
b411fc1f 3203 public void removeTypedNamedFvImageNameValue (String fvName, String type, String optName) {\r
3204 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = getFvImagesFvImageWithName(fvName, type);\r
3205 for (int i = 0; i < vFvImage.size(); ++i) {\r
3206 FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i);\r
72426064 3207 removeFvImageNameValue (fi, optName);\r
b411fc1f 3208 }\r
3209 }\r
3210 \r
98c20797 3211 /**Add name-value pair to FvImage element with type.\r
3212 * @param fvName FV name to add name-value pair.\r
3213 * @param type FvImage attribute.\r
3214 * @param name\r
3215 * @param value\r
3216 */\r
3217 public void setTypedNamedFvImageNameValue (String fvName, String type, String name, String value) {\r
b411fc1f 3218 boolean fvImageExists = false;\r
98c20797 3219 if (getfpdFlash().getFvImages() == null) {\r
3220 return;\r
3221 }\r
3222 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3223 if (l == null) {\r
3224 return;\r
3225 }\r
3226 ListIterator li = l.listIterator();\r
3227 while(li.hasNext()) {\r
3228 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3229 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3230 continue;\r
3231 }\r
3232 if (!fi.getFvImageNamesList().contains(fvName)) {\r
3233 continue;\r
3234 }\r
b411fc1f 3235 fvImageExists = true;\r
98c20797 3236 setFvImagesFvImageNameValue (fi, name, value, null);\r
3237 }\r
b411fc1f 3238 \r
3239 if (!fvImageExists) {\r
3240 HashMap<String, String> map = new HashMap<String, String>();\r
3241 map.put(name, value);\r
3242 genFvImagesFvImage(new String[]{fvName}, type, map);\r
3243 }\r
98c20797 3244 }\r
3245 \r
3246 /**Add to all FvImage elements with type, the name-value pair.\r
3247 * @param type\r
3248 * @param name\r
3249 * @param value\r
3250 */\r
3251 public void setTypedFvImageNameValue (String type, String name, String value) {\r
3252 if (getfpdFlash().getFvImages() == null) {\r
3253 return;\r
3254 }\r
3255 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3256 if (l == null) {\r
3257 return;\r
3258 }\r
3259 ListIterator li = l.listIterator();\r
3260 while(li.hasNext()) {\r
3261 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3262 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3263 continue;\r
3264 }\r
3265 setFvImagesFvImageNameValue (fi, name, value, null);\r
3266 }\r
b411fc1f 3267 \r
98c20797 3268 }\r
3269 \r
54aa8673 3270 public void setFvImagesFvImageNameValue (int i, String name, String value) {\r
3271 XmlObject o = getfpdFlash().getFvImages();\r
3272 if (o == null) {\r
3273 return;\r
3274 }\r
3275 XmlCursor cursor = o.newCursor();\r
3276 QName qFvImage = new QName(xmlNs, "FvImage");\r
3277 if (cursor.toChild(qFvImage)) {\r
3278 for (int j = 0; j < i; ++j) {\r
3279 cursor.toNextSibling(qFvImage);\r
3280 }\r
3281 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3282 setFvImagesFvImageNameValue (fi, name, value, null);\r
3283 }\r
3284 cursor.dispose();\r
3285 }\r
3286 \r
98c20797 3287 /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before.\r
3288 * @param fi\r
3289 * @param name\r
3290 * @param value\r
3291 * @param newName\r
3292 */\r
3293 public void setFvImagesFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String name, String value, String newName) {\r
3294 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) {\r
54aa8673 3295 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.addNewFvImageOptions().addNewNameValue();\r
3296 nv.setName(name);\r
3297 nv.setValue(value);\r
3298 if (newName != null) {\r
3299 nv.setName(newName);\r
3300 }\r
98c20797 3301 return;\r
3302 }\r
3303 \r
3304 XmlCursor cursor = fi.getFvImageOptions().newCursor();\r
3305 if (cursor.toFirstChild()) {\r
3306 do {\r
3307 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = (FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue)cursor.getObject();\r
3308 if (nv.getName().equals(name)) {\r
3309 nv.setValue(value);\r
3310 if (newName != null) {\r
3311 nv.setName(newName);\r
3312 }\r
3313 cursor.dispose();\r
3314 return;\r
3315 }\r
3316 }while (cursor.toNextSibling());\r
3317 }\r
3318 \r
3319 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.getFvImageOptions().addNewNameValue();\r
3320 nv.setName(name);\r
3321 nv.setValue(value);\r
3322 if (newName != null) {\r
3323 nv.setName(newName);\r
3324 }\r
3325 cursor.dispose();\r
3326 }\r
3327 \r
3328 public void getFvImagesFvImageOptions (String fvName, Map<String, String> m) {\r
3329 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = getFvImagesFvImageWithName (fvName, "Options");\r
3330 for (int i = 0; i < vFvImage.size(); ++i) {\r
3331 FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i);\r
3332 if (fi == null || fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) {\r
3333 continue;\r
3334 }\r
3335\r
3336 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions()\r
3337 .getNameValueList()\r
3338 .listIterator();\r
3339 while (li.hasNext()) {\r
3340 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
3341 m.put(nv.getName(), nv.getValue());\r
3342 }\r
3343 }\r
3344 }\r
72426064 3345 \r
3346 public int getFvImagePosInFvImages (String fvNameList, String type) {\r
3347 XmlObject o = getfpdFlash().getFvImages();\r
3348 if (o == null) {\r
3349 return -1;\r
3350 }\r
3351 \r
3352 int pos = -1;\r
54aa8673 3353 String[] fvNameArray = fvNameList.trim().split(" ");\r
72426064 3354 Vector<String> vFvNames = new Vector<String>();\r
3355 \r
3356 \r
3357 XmlCursor cursor = o.newCursor();\r
3358 QName qFvImage = new QName(xmlNs, "FvImage");\r
3359 if (cursor.toChild(qFvImage)) {\r
3360 do {\r
3361 pos++;\r
3362 vFvNames.removeAllElements();\r
3363 for (int i = 0; i < fvNameArray.length; ++i) {\r
3364 vFvNames.add(fvNameArray[i]);\r
3365 }\r
3366 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3367 if (!fi.getType().toString().equals(type)) {\r
3368 continue;\r
3369 }\r
3370 if (fi.getFvImageNamesList() == null || fi.getFvImageNamesList().size() != vFvNames.size()) {\r
3371 continue;\r
3372 }\r
3373 ListIterator<String> li = fi.getFvImageNamesList().listIterator();\r
3374 while (li.hasNext()) {\r
3375 String name = li.next();\r
3376 vFvNames.remove(name);\r
3377 }\r
3378 if (vFvNames.size() == 0) {\r
3379 cursor.dispose();\r
3380 return pos;\r
3381 }\r
3382 \r
3383 }while (cursor.toNextSibling(qFvImage));\r
3384 \r
3385 }\r
3386 cursor.dispose();\r
3387 return -1;\r
3388 }\r
ae0d4fd2 3389 /**Get FvImage Options for FvImage i\r
3390 * @param i the ith FvImage\r
3391 */\r
3392 public void getFvImagesFvImageOptions(int i, Map<String, String> m) {\r
3393 XmlObject o = getfpdFlash().getFvImages();\r
3394 if (o == null) {\r
3395 return;\r
3396 }\r
3397 XmlCursor cursor = o.newCursor();\r
3398 QName qFvImage = new QName(xmlNs, "FvImage");\r
3399 if (cursor.toChild(qFvImage)) {\r
3400 for (int j = 0; j < i; ++j) {\r
3401 cursor.toNextSibling(qFvImage);\r
a13899c5 3402 }\r
ae0d4fd2 3403 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3404 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){\r
72426064 3405 cursor.dispose();\r
ae0d4fd2 3406 return;\r
a13899c5 3407 }\r
ae0d4fd2 3408 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
3409 while(li.hasNext()){\r
3410 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
a13899c5 3411 m.put(nv.getName(), nv.getValue());\r
3412 }\r
a13899c5 3413 }\r
72426064 3414 cursor.dispose();\r
a13899c5 3415 }\r
3416 \r
3417 /**\r
3418 Get platform header element\r
3419 @return PlatformHeaderDocument.PlatformHeader\r
3420 **/\r
3421 public PlatformHeaderDocument.PlatformHeader getFpdHdr() {\r
3422 if (fpdHdr == null) {\r
3423 fpdHdr = fpdRoot.addNewPlatformHeader();\r
3424 }\r
1faac7b6 3425 \r
a13899c5 3426 return fpdHdr;\r
3427 }\r
3428 \r
a13899c5 3429 public String getFpdHdrPlatformName() {\r
3430 return getFpdHdr().getPlatformName();\r
3431 }\r
3432 \r
3433 public String getFpdHdrGuidValue() {\r
3434 return getFpdHdr().getGuidValue();\r
3435 }\r
3436 \r
3437 public String getFpdHdrVer() {\r
3438 return getFpdHdr().getVersion();\r
3439 }\r
3440 \r
3441 public String getFpdHdrAbs() {\r
3442 return getFpdHdr().getAbstract();\r
3443 }\r
3444 \r
3445 public String getFpdHdrDescription() {\r
3446 return getFpdHdr().getDescription();\r
3447 }\r
3448 \r
3449 public String getFpdHdrCopyright() {\r
3450 return getFpdHdr().getCopyright();\r
3451 }\r
3452 \r
3453 public String getFpdHdrLicense() {\r
3454 LicenseDocument.License l = getFpdHdr().getLicense();\r
3455 if (l == null) {\r
3456 return null;\r
3457 }\r
3458 return l.getStringValue();\r
3459 }\r
3460 \r
3461 public String getFpdHdrUrl() {\r
3462 LicenseDocument.License l = getFpdHdr().getLicense();\r
3463 if (l == null) {\r
3464 return null;\r
3465 }\r
3466 return l.getURL();\r
3467 }\r
3468 \r
3469 public String getFpdHdrSpec() {\r
3470\r
c06e8657 3471 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 3472// return getFpdHdr().getSpecification();\r
3473 }\r
3474 \r
3475 public void setFpdHdrPlatformName(String name){\r
3476 getFpdHdr().setPlatformName(name);\r
3477 }\r
3478 \r
3479 public void setFpdHdrGuidValue(String guid){\r
3480 getFpdHdr().setGuidValue(guid);\r
3481 }\r
3482 \r
3483 public void setFpdHdrVer(String v){\r
3484 getFpdHdr().setVersion(v);\r
3485 }\r
3486 \r
3487 public void setFpdHdrAbs(String abs) {\r
3488 getFpdHdr().setAbstract(abs);\r
3489 }\r
3490 \r
3491 public void setFpdHdrDescription(String desc){\r
3492 getFpdHdr().setDescription(desc);\r
3493 }\r
3494 \r
3495 public void setFpdHdrCopyright(String cr) {\r
3496 getFpdHdr().setCopyright(cr);\r
3497 }\r
3498 \r
3499 public void setFpdHdrLicense(String license){\r
3500 LicenseDocument.License l = getFpdHdr().getLicense();\r
3501 if (l == null) {\r
3502 getFpdHdr().addNewLicense().setStringValue(license);\r
3503 }\r
3504 else {\r
3505 l.setStringValue(license);\r
3506 }\r
3507 }\r
3508\r
3509 public void setFpdHdrUrl(String url){\r
3510 LicenseDocument.License l = getFpdHdr().getLicense();\r
3511 \r
3512 l.setURL(url);\r
3513 \r
3514 }\r
3515 \r
3516 public void setFpdHdrSpec(String s){\r
c06e8657 3517 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
a13899c5 3518 getFpdHdr().setSpecification(s);\r
3519 }\r
3520 /**\r
3521 Save the processed xml contents to file\r
3522 \r
3523 @param fpdFile The file to save xml contents\r
3524 @throws IOException Exceptions during file operation\r
3525 **/\r
3526 public void saveAs(File fpdFile) throws IOException {\r
3527\r
3528 XmlOptions options = new XmlOptions();\r
3529\r
3530 options.setCharacterEncoding("UTF-8");\r
3531 options.setSavePrettyPrint();\r
3532 options.setSavePrettyPrintIndent(2);\r
3533 try {\r
3534 fpdd.save(fpdFile, options);\r
3535 } catch (IOException e) {\r
3536 e.printStackTrace();\r
3537 }\r
3538\r
3539 }\r
3540 \r
1800d80f 3541 private String listToString(List l) {\r
a13899c5 3542 if (l == null) {\r
3543 return null;\r
3544 }\r
3545 String s = " ";\r
3546 ListIterator li = l.listIterator();\r
3547 while(li.hasNext()) {\r
3548 s += li.next();\r
3549 s += " ";\r
3550 }\r
3551 return s.trim();\r
3552 }\r
e232295e 3553 \r
3554 private void removeElement(XmlObject o) {\r
3555 XmlCursor cursor = o.newCursor();\r
3556 cursor.removeXml();\r
3557 cursor.dispose();\r
3558 }\r
a13899c5 3559}\r
82961247 3560\r
3561class PcdItemTypeConflictException extends Exception {\r
3562\r
3563 /**\r
3564 * \r
3565 */\r
3566 private static final long serialVersionUID = 1L;\r
3567 private String details = null;\r
3568 \r
34c614e1 3569 PcdItemTypeConflictException(String pcdName, String info){\r
1bf9fa5a 3570 ModuleIdentification mi = WorkspaceProfile.getModuleId(info);\r
3658f95e 3571 details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName();\r
82961247 3572 }\r
3573 \r
3574 public String getMessage() {\r
3575 return details;\r
3576 }\r
3577}\r
3578\r
3579class PcdDeclNotFound extends Exception {\r
3580\r
3581 /**\r
3582 * \r
3583 */\r
3584 private static final long serialVersionUID = 1L;\r
3585 private String details = null;\r
3586 \r
3587 PcdDeclNotFound(String info) {\r
4da2e625 3588 details = "PcdDeclNotFound: " + info;\r
82961247 3589 }\r
3590 \r
3591 public String getMessage() {\r
3592 return details;\r
3593 }\r
3594}\r
3595\r
3596class PcdValueMalFormed extends Exception {\r
3597\r
3598 /**\r
3599 * \r
3600 */\r
3601 private static final long serialVersionUID = 1L;\r
3602 private String details = null;\r
3603 \r
3604 PcdValueMalFormed(String info) {\r
4da2e625 3605 details = "PcdValueMalFormed: " + info;\r
82961247 3606 }\r
3607 \r
3608 public String getMessage() {\r
3609 return details;\r
3610 }\r
3611}\r