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