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