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