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