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