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