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