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