]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
Provide UI for generating Apriori file of PEI or DXE phase. The module order informat...
[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 userId, String id, 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(userId);\r
1811 userExts.setIdentifier(new BigInteger(id));\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(outputFileName);\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, String userId, int id) {\r
1843 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1844 return -1;\r
1845 }\r
1846\r
1847 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
1848 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1849 while (li.hasNext()) {\r
1850 UserExtensionsDocument.UserExtensions ues = li.next();\r
1851 if (!ues.getUserID().equals(userId)) {\r
1852 continue;\r
1853 }\r
1854 if (ues.getIdentifier() == null || ues.getIdentifier().intValue() != id) {\r
1855 continue;\r
1856 }\r
1857 XmlCursor cursor = ues.newCursor();\r
1858 cursor.toFirstChild();\r
1859 String elementName = cursor.getTextValue();\r
1860 if (elementName.equals(fvName)) {\r
1861 cursor.toNextSibling(elementIncludeModules);\r
1862 if (cursor.toFirstChild()) {\r
1863 int i = 1;\r
1864 for (i = 1; cursor.toNextSibling(); ++i);\r
1865 cursor.dispose();\r
1866 return i;\r
1867 }\r
1868 cursor.dispose();\r
1869 return 0;\r
1870 }\r
1871 cursor.dispose();\r
1872 }\r
1873 return -1;\r
1874 }\r
1875 \r
1876 public void getUserExtsIncMods(String fvName, String userId, int id, String[][] saa) {\r
1877 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1878 return;\r
1879 }\r
1880\r
1881 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
1882 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
1883 QName attribUserId = new QName ("UserID");\r
1884 QName attribId = new QName ("Identifier");\r
1885 QName elementFvName = new QName (xmlNs, "FvName");\r
1886 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1887 QName attribModuleGuid = new QName("ModuleGuid");\r
1888 QName attribModuleVersion = new QName("ModuleVersion");\r
1889 QName attribPackageGuid = new QName("PackageGuid");\r
1890 QName attribPackageVersion = new QName("PackageVersion");\r
1891 QName attribArch = new QName("Arch");\r
1892 \r
1893 if (cursor.toChild(elementUserExts)) {\r
1894 do {\r
1895 cursor.push();\r
1896 if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
1897 cursor.toChild(elementFvName);\r
1898 String elementName = cursor.getTextValue();\r
1899 if (elementName.equals(fvName)) {\r
1900 cursor.toNextSibling(elementIncludeModules);\r
1901 if (cursor.toFirstChild()) {\r
1902 int i = 0;\r
1903 do {\r
1904 saa[i][0] = cursor.getAttributeText(attribModuleGuid);\r
1905 saa[i][1] = cursor.getAttributeText(attribModuleVersion);\r
1906 saa[i][2] = cursor.getAttributeText(attribPackageGuid);\r
1907 saa[i][3] = cursor.getAttributeText(attribPackageVersion);\r
1908 saa[i][4] = cursor.getAttributeText(attribArch);\r
1909 ++i;\r
1910 }while (cursor.toNextSibling());\r
1911 }\r
1912 break;\r
1913 }\r
1914 }\r
1915 cursor.pop();\r
1916 }while (cursor.toNextSibling(elementUserExts));\r
1917 }\r
1918 cursor.dispose();\r
1919 \r
1920 }\r
1921 \r
1922 public void updateBuildOptionsUserExtensions (String oldFvName, String newFvName) {\r
1923 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1924 return;\r
1925 }\r
1926 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
1927 while (li.hasNext()) {\r
1928 UserExtensionsDocument.UserExtensions ues = li.next();\r
1929 if (!ues.getUserID().equals("IMAGES")) {\r
1930 continue;\r
1931 }\r
1932 XmlCursor cursor = ues.newCursor();\r
1933 cursor.toFirstChild();\r
1934 String elementName = cursor.getTextValue();\r
1935 if (elementName.equals(oldFvName)) {\r
1936 cursor.setTextValue(newFvName);\r
1937 }\r
1938 cursor.dispose();\r
1939 }\r
1940 \r
1941 }\r
1942 \r
1943 public void removeBuildOptionsUserExtensions (String fvName, String userId, int id) {\r
1944 if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
1945 return;\r
1946 }\r
1947\r
1948 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
1949 while (li.hasNext()) {\r
1950 UserExtensionsDocument.UserExtensions ues = li.next();\r
1951 if (!ues.getUserID().equals(userId)) {\r
1952 continue;\r
1953 }\r
1954 if (ues.getIdentifier()== null || ues.getIdentifier().intValue() != id) {\r
1955 continue;\r
1956 }\r
1957 XmlCursor cursor = ues.newCursor();\r
1958 cursor.toFirstChild();\r
1959 String elementName = cursor.getTextValue();\r
1960 if (elementName.equals(fvName)) {\r
1961 cursor.toParent();\r
1962 cursor.removeXml();\r
1963 cursor.dispose();\r
1964 return;\r
1965 }\r
1966 cursor.dispose();\r
1967 }\r
1968 \r
1969 }\r
1970 \r
1971 private boolean versionEqual (String v1, String v2) {\r
1972 \r
1973 if ((v1 == null || v1.length() == 0 || v1.equalsIgnoreCase("null")) \r
1974 && (v2 == null || v2.length() == 0 || v2.equalsIgnoreCase("null"))) {\r
1975 return true;\r
1976 }\r
1977 \r
1978 if (v1 != null && v1.equals(v2)) {\r
1979 return true;\r
1980 }\r
1981 \r
1982 return false;\r
1983 }\r
1984 \r
1985 public boolean moduleInBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
1986 boolean inList = false;\r
1987 if (getUserExtsIncModCount(fvName, userId, id) > 0) {\r
1988 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
1989 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
1990 QName attribUserId = new QName ("UserID");\r
1991 QName attribId = new QName ("Identifier");\r
1992 QName elementFvName = new QName (xmlNs, "FvName");\r
1993 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
1994 QName attribModuleGuid = new QName("ModuleGuid");\r
1995 QName attribModuleVersion = new QName("ModuleVersion");\r
1996 QName attribPackageGuid = new QName("PackageGuid");\r
1997 QName attribPackageVersion = new QName("PackageVersion");\r
1998 QName attribArch = new QName("Arch");\r
1999 \r
2000 if (cursor.toChild(elementUserExts)) {\r
2001 do {\r
2002 cursor.push();\r
2003 if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
2004 cursor.toChild(elementFvName);\r
2005 String elementName = cursor.getTextValue();\r
2006 if (elementName.equals(fvName)) {\r
2007 cursor.toNextSibling(elementIncludeModules);\r
2008 if (cursor.toFirstChild()) {\r
2009 \r
2010 do {\r
2011 String mg = cursor.getAttributeText(attribModuleGuid);\r
2012 String mv = cursor.getAttributeText(attribModuleVersion);\r
2013 String pg = cursor.getAttributeText(attribPackageGuid);\r
2014 String pv = cursor.getAttributeText(attribPackageVersion);\r
2015 String ar = cursor.getAttributeText(attribArch);\r
2016 if (!moduleGuid.equalsIgnoreCase(mg)) {\r
2017 continue;\r
2018 }\r
2019 if (!packageGuid.equalsIgnoreCase(pg)) {\r
2020 continue;\r
2021 }\r
2022 if (!arch.equalsIgnoreCase(ar)) {\r
2023 continue;\r
2024 }\r
2025 if (!versionEqual(moduleVersion, mv)) {\r
2026 continue;\r
2027 }\r
2028 if (!versionEqual(packageVersion, pv)) {\r
2029 continue;\r
2030 }\r
2031 inList = true;\r
2032 break;\r
2033 }while (cursor.toNextSibling());\r
2034 }\r
2035 break;\r
2036 }\r
2037 }\r
2038 cursor.pop();\r
2039 }while (cursor.toNextSibling(elementUserExts));\r
2040 }\r
2041 cursor.dispose();\r
2042 }\r
2043 return inList;\r
2044 }\r
2045 \r
2046 public void removeModuleInBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
2047 //\r
2048 // if there is only one module before remove operation, the whole user extension should be removed.\r
2049 //\r
2050 int moduleAmount = getUserExtsIncModCount(fvName, userId, id);\r
2051 if (moduleAmount == 1) {\r
2052 removeBuildOptionsUserExtensions(fvName, userId, id);\r
2053 return;\r
2054 }\r
2055 \r
2056 if (moduleAmount > 1) {\r
2057 XmlCursor cursor = getfpdBuildOpts().newCursor();\r
2058 QName elementUserExts = new QName (xmlNs, "UserExtensions");\r
2059 QName attribUserId = new QName ("UserID");\r
2060 QName attribId = new QName ("Identifier");\r
2061 QName elementFvName = new QName (xmlNs, "FvName");\r
2062 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
2063 QName attribModuleGuid = new QName("ModuleGuid");\r
2064 QName attribModuleVersion = new QName("ModuleVersion");\r
2065 QName attribPackageGuid = new QName("PackageGuid");\r
2066 QName attribPackageVersion = new QName("PackageVersion");\r
2067 QName attribArch = new QName("Arch");\r
2068 \r
2069 if (cursor.toChild(elementUserExts)) {\r
2070 do {\r
2071 cursor.push();\r
2072 if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
2073 cursor.toChild(elementFvName);\r
2074 String elementName = cursor.getTextValue();\r
2075 if (elementName.equals(fvName)) {\r
2076 cursor.toNextSibling(elementIncludeModules);\r
2077 if (cursor.toFirstChild()) {\r
2078 \r
2079 do {\r
2080 String mg = cursor.getAttributeText(attribModuleGuid);\r
2081 String mv = cursor.getAttributeText(attribModuleVersion);\r
2082 String pg = cursor.getAttributeText(attribPackageGuid);\r
2083 String pv = cursor.getAttributeText(attribPackageVersion);\r
2084 String ar = cursor.getAttributeText(attribArch);\r
2085 if (!moduleGuid.equalsIgnoreCase(mg)) {\r
2086 continue;\r
2087 }\r
2088 if (!packageGuid.equalsIgnoreCase(pg)) {\r
2089 continue;\r
2090 }\r
2091 if (!arch.equalsIgnoreCase(ar)) {\r
2092 continue;\r
2093 }\r
2094 if (!versionEqual(moduleVersion, mv)) {\r
2095 continue;\r
2096 }\r
2097 if (!versionEqual(packageVersion, pv)) {\r
2098 continue;\r
2099 }\r
2100 cursor.removeXml();\r
2101 }while (cursor.toNextSibling());\r
2102 }\r
2103 break;\r
2104 }\r
2105 }\r
2106 cursor.pop();\r
2107 }while (cursor.toNextSibling(elementUserExts));\r
2108 }\r
2109 cursor.dispose();\r
2110 }\r
2111 }\r
2112 \r
2113 public void addModuleIntoBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
2114 if (moduleInBuildOptionsUserExtensions (fvName, userId, id, moduleGuid, moduleVersion, packageGuid, packageVersion, arch)) {\r
2115 return;\r
2116 }\r
2117\r
2118 ListIterator<UserExtensionsDocument.UserExtensions> li = getfpdBuildOpts().getUserExtensionsList().listIterator();\r
2119 QName elementIncludeModules = new QName(xmlNs, "IncludeModules");\r
2120 QName elementModule = new QName(xmlNs, "Module");\r
2121 while (li.hasNext()) {\r
2122 UserExtensionsDocument.UserExtensions ues = li.next();\r
2123 if (!ues.getUserID().equals(userId)) {\r
2124 continue;\r
2125 }\r
2126 if (ues.getIdentifier() == null || ues.getIdentifier().intValue() != id) {\r
2127 continue;\r
2128 }\r
2129 XmlCursor cursor = ues.newCursor();\r
2130 cursor.toFirstChild();\r
2131 String elementName = cursor.getTextValue();\r
2132 if (elementName.equals(fvName)) {\r
2133 cursor.toNextSibling(elementIncludeModules);\r
2134 cursor.toLastChild();\r
2135 cursor.toEndToken();\r
2136 cursor.toNextToken();\r
2137 cursor.beginElement(elementModule);\r
2138 cursor.insertAttributeWithValue("ModuleGuid", moduleGuid);\r
2139 if (!moduleVersion.equals("null") && moduleVersion.length() != 0) {\r
2140 cursor.insertAttributeWithValue("ModuleVersion", moduleVersion);\r
2141 }\r
2142 cursor.insertAttributeWithValue("PackageGuid", packageGuid);\r
2143 if (!packageVersion.equals("null") && packageVersion.length() != 0) {\r
2144 cursor.insertAttributeWithValue("PackageVersion", packageVersion);\r
2145 }\r
2146 \r
2147 cursor.insertAttributeWithValue("Arch", arch);\r
2148 cursor.dispose();\r
2149 return;\r
2150 }\r
2151 cursor.dispose();\r
2152 }\r
2153 \r
2154 }\r
2155 \r
2156 public void genBuildOptionsUserDefAntTask (String id, String fileName, String execOrder) {\r
2157 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2158 if (udats == null) {\r
2159 udats = getfpdBuildOpts().addNewUserDefinedAntTasks();\r
2160 }\r
2161 \r
2162 AntTaskDocument.AntTask at = udats.addNewAntTask();\r
2163 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
2164 }\r
2165 \r
2166 private void setBuildOptionsUserDefAntTask(String id, String fileName, String execOrder, AntTaskDocument.AntTask at) {\r
2167 at.setId(new Integer(id));\r
2168 XmlCursor cursor = at.newCursor();\r
2169 if (fileName != null){\r
2170 at.setFilename(fileName);\r
2171 }\r
2172 else if (cursor.toChild(xmlNs, "Filename")) {\r
2173 cursor.removeXml();\r
2174 }\r
2175 if (execOrder != null) {\r
2176 at.setAntCmdOptions(execOrder);\r
2177 }\r
2178 else if (cursor.toChild(xmlNs, "AntCmdOptions")) {\r
2179 cursor.removeXml();\r
2180 }\r
2181 cursor.dispose();\r
2182 }\r
2183 \r
2184 public void removeBuildOptionsUserDefAntTask(int i) {\r
2185 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
2186 if (o == null) {\r
2187 return;\r
2188 }\r
2189 XmlCursor cursor = o.newCursor();\r
2190 if (cursor.toFirstChild()) {\r
2191 for (int j = 0; j < i; ++j) {\r
2192 cursor.toNextSibling();\r
2193 }\r
2194 cursor.removeXml();\r
2195 if (getBuildOptionsUserDefAntTaskCount() == 0) {\r
2196 cursor.toParent();\r
2197 cursor.removeXml();\r
2198 }\r
2199 }\r
2200 cursor.dispose();\r
2201 }\r
2202 \r
2203 public void updateBuildOptionsUserDefAntTask(int i, String id, String fileName, String execOrder){\r
2204 XmlObject o = getfpdBuildOpts().getUserDefinedAntTasks();\r
2205 if (o == null) {\r
2206 return;\r
2207 }\r
2208 XmlCursor cursor = o.newCursor();\r
2209 if (cursor.toFirstChild()) {\r
2210 for (int j = 0; j < i; ++j) {\r
2211 cursor.toNextSibling();\r
2212 }\r
2213 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)cursor.getObject();\r
2214 setBuildOptionsUserDefAntTask(id, fileName, execOrder, at);\r
2215 }\r
2216 cursor.dispose();\r
2217 }\r
2218 \r
2219 public int getBuildOptionsUserDefAntTaskCount() {\r
2220 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2221 if (udats == null || udats.getAntTaskList() == null) {\r
2222 return 0;\r
2223 }\r
2224 \r
2225 return udats.getAntTaskList().size();\r
2226 }\r
2227 \r
2228 public void getBuildOptionsUserDefAntTasks(String[][] saa) {\r
2229 UserDefinedAntTasksDocument.UserDefinedAntTasks udats = getfpdBuildOpts().getUserDefinedAntTasks();\r
2230 if (udats == null || udats.getAntTaskList() == null) {\r
2231 return ;\r
2232 }\r
2233 \r
2234 List<AntTaskDocument.AntTask> l = udats.getAntTaskList();\r
2235 ListIterator li = l.listIterator();\r
2236 int i = 0;\r
2237 while (li.hasNext()) {\r
2238 AntTaskDocument.AntTask at = (AntTaskDocument.AntTask)li.next();\r
2239 saa[i][0] = at.getId() + "";\r
2240 saa[i][1] = saa[i][2] = "";\r
2241 if (at.getFilename() != null){\r
2242 saa[i][1] = at.getFilename();\r
2243 }\r
2244 if (at.getAntCmdOptions() != null) {\r
2245 saa[i][2] = at.getAntCmdOptions();\r
2246 }\r
2247 ++i;\r
2248 }\r
2249 }\r
2250 public void genBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
2251 OptionsDocument.Options opts = getfpdBuildOpts().getOptions();\r
2252 if (opts == null) {\r
2253 opts = getfpdBuildOpts().addNewOptions();\r
2254 }\r
2255 OptionDocument.Option opt = opts.addNewOption();\r
2256 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
2257 }\r
2258 \r
2259 private void setBuildOptionsOpt(Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents, OptionDocument.Option opt){\r
2260 opt.setStringValue(contents);\r
2261 if (buildTargets != null) {\r
2262 opt.setBuildTargets(buildTargets);\r
2263 }\r
2264 else {\r
2265 if (opt.isSetBuildTargets()) {\r
2266 opt.unsetBuildTargets();\r
2267 }\r
2268 }\r
2269 \r
2270 if (toolChain != null && toolChain.length() > 0) {\r
2271 opt.setToolChainFamily(toolChain);\r
2272 }\r
2273 else {\r
2274 if (opt.isSetToolChainFamily()) {\r
2275 opt.unsetToolChainFamily();\r
2276 }\r
2277 }\r
2278 \r
2279 if (tagName != null && tagName.length() > 0) {\r
2280 opt.setTagName(tagName);\r
2281 }\r
2282 else {\r
2283 if (opt.isSetTagName()) {\r
2284 opt.unsetTagName();\r
2285 }\r
2286 }\r
2287 \r
2288 if (toolCmd != null && toolCmd.length() > 0) {\r
2289 opt.setToolCode(toolCmd);\r
2290 }\r
2291 else {\r
2292 if (opt.isSetToolCode()) {\r
2293 opt.unsetToolCode();\r
2294 }\r
2295 }\r
2296 \r
2297 \r
2298 if (archList != null) {\r
2299 opt.setSupArchList(archList);\r
2300 }\r
2301 else {\r
2302 if (opt.isSetSupArchList()) {\r
2303 opt.unsetSupArchList();\r
2304 }\r
2305 }\r
2306 }\r
2307 \r
2308 public void removeBuildOptionsOpt(int i){\r
2309 \r
2310 XmlObject o = getfpdBuildOpts().getOptions();\r
2311 if (o == null) {\r
2312 return;\r
2313 }\r
2314 \r
2315 XmlCursor cursor = o.newCursor();\r
2316 if (cursor.toFirstChild()) {\r
2317 for (int j = 0; j < i; ++j) {\r
2318 cursor.toNextSibling();\r
2319 }\r
2320 cursor.removeXml();\r
2321 if (getBuildOptionsOptCount() == 0) {\r
2322 cursor.toParent();\r
2323 cursor.removeXml();\r
2324 }\r
2325 }\r
2326 cursor.dispose();\r
2327 }\r
2328 \r
2329 public void updateBuildOptionsOpt(int i, Vector<Object> buildTargets, String toolChain, String tagName, String toolCmd, Vector<Object> archList, String contents) {\r
2330 XmlObject o = getfpdBuildOpts().getOptions();\r
2331 if (o == null) {\r
2332 return;\r
2333 }\r
2334 \r
2335 XmlCursor cursor = o.newCursor();\r
2336 if (cursor.toFirstChild()) {\r
2337 for (int j = 0; j < i; ++j) {\r
2338 cursor.toNextSibling();\r
2339 }\r
2340 OptionDocument.Option opt = (OptionDocument.Option)cursor.getObject();\r
2341 setBuildOptionsOpt(buildTargets, toolChain, tagName, toolCmd, archList, contents, opt);\r
2342 }\r
2343 cursor.dispose();\r
2344 }\r
2345 \r
2346 public int getBuildOptionsOptCount(){\r
2347 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
2348 return 0;\r
2349 }\r
2350 return getfpdBuildOpts().getOptions().getOptionList().size();\r
2351 }\r
2352 \r
2353 public void getBuildOptionsOpts(String[][] saa) {\r
2354 if (getfpdBuildOpts().getOptions() == null || getfpdBuildOpts().getOptions().getOptionList() == null) {\r
2355 return ;\r
2356 }\r
2357 \r
2358 List<OptionDocument.Option> lOpt = getfpdBuildOpts().getOptions().getOptionList();\r
2359 ListIterator li = lOpt.listIterator();\r
2360 int i = 0;\r
2361 while(li.hasNext()) {\r
2362 OptionDocument.Option opt = (OptionDocument.Option)li.next();\r
2363 if (opt.getBuildTargets() != null) {\r
2364 saa[i][0] = listToString(opt.getBuildTargets());\r
2365 }\r
2366 saa[i][1] = opt.getToolChainFamily();\r
2367 if (opt.getSupArchList() != null){\r
2368 saa[i][2] = listToString(opt.getSupArchList());\r
2369\r
2370 }\r
2371 saa[i][3] = opt.getToolCode();\r
2372 saa[i][4] = opt.getTagName();\r
2373 saa[i][5] = opt.getStringValue();\r
2374 \r
2375 ++i;\r
2376 }\r
2377 }\r
2378 \r
2379 public void genBuildOptionsFfs(String ffsKey, String type) {\r
2380 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
2381 ffs.setFfsKey(ffsKey);\r
2382 if (type != null) {\r
2383 ffs.addNewSections().setEncapsulationType(type);\r
2384 }\r
2385 }\r
2386 \r
2387 public void updateBuildOptionsFfsSectionsType(int i, String type) {\r
2388 BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
2389 if (type != null) {\r
2390 ffs.addNewSections().setEncapsulationType(type);\r
2391 }\r
2392 }\r
2393 \r
2394 public void genBuildOptionsFfsAttribute(int i, String name, String value) {\r
2395 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2396 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = ffs.addNewAttribute();\r
2397 attrib.setName(name);\r
2398 attrib.setValue(value);\r
2399 }\r
2400 \r
2401 /**update jth attribute of ith ffs.\r
2402 * @param i\r
2403 * @param j\r
2404 */\r
2405 public void updateBuildOptionsFfsAttribute(int i, int j, String name, String value){\r
2406 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2407 XmlCursor cursor = ffs.newCursor();\r
2408 QName qAttrib = new QName(xmlNs, "Attribute");\r
2409 if (cursor.toChild(qAttrib)) {\r
2410 for (int k = 0; k < j; ++k) {\r
2411 cursor.toNextSibling(qAttrib);\r
2412 }\r
2413 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = (BuildOptionsDocument.BuildOptions.Ffs.Attribute)cursor.getObject();\r
2414 attrib.setName(name);\r
2415 attrib.setValue(value);\r
2416 }\r
2417 cursor.dispose();\r
2418 }\r
2419 \r
2420 public void removeBuildOptionsFfsAttribute(int i, int j){\r
2421 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2422 XmlCursor cursor = ffs.newCursor();\r
2423 QName qAttrib = new QName(xmlNs, "Attribute");\r
2424 if (cursor.toChild(qAttrib)) {\r
2425 for (int k = 0; k < j; ++k) {\r
2426 cursor.toNextSibling(qAttrib);\r
2427 }\r
2428 cursor.removeXml();\r
2429 }\r
2430 cursor.dispose();\r
2431 }\r
2432 \r
2433 public void genBuildOptionsFfsSectionsSection(int i, String sectionType) {\r
2434 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2435 if (ffs == null) {\r
2436 return;\r
2437 }\r
2438 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2439 \r
2440 if (sections == null){\r
2441 sections = ffs.addNewSections();\r
2442 }\r
2443 sections.addNewSection().setSectionType(EfiSectionType.Enum.forString(sectionType));\r
2444 }\r
2445 \r
2446 public void removeBuildOptionsFfsSectionsSection(int i, int j) {\r
2447 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2448 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2449 if (sections == null) {\r
2450 return;\r
2451 }\r
2452 XmlCursor cursor = sections.newCursor();\r
2453 QName qSection = new QName(xmlNs, "Section");\r
2454 if (cursor.toChild(qSection)) {\r
2455 for (int k = 0; k < j; ++k) {\r
2456 cursor.toNextSibling(qSection);\r
2457 }\r
2458 cursor.removeXml();\r
2459 }\r
2460 cursor.dispose();\r
2461 }\r
2462 \r
2463 public void updateBuildOptionsFfsSectionsSection(int i, int j, String type){\r
2464 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2465 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2466 if (sections == null) {\r
2467 return;\r
2468 }\r
2469 XmlCursor cursor = sections.newCursor();\r
2470 QName qSection = new QName(xmlNs, "Section");\r
2471 if (cursor.toChild(qSection)) {\r
2472 for (int k = 0; k < j; ++k) {\r
2473 cursor.toNextSibling(qSection);\r
2474 }\r
2475 BuildOptionsDocument.BuildOptions.Ffs.Sections.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Section)cursor.getObject();\r
2476 section.setSectionType(EfiSectionType.Enum.forString(type));\r
2477 }\r
2478 cursor.dispose();\r
2479 } \r
2480 \r
2481 public void genBuildOptionsFfsSectionsSections(int i, String encapType) {\r
2482 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2483 if (ffs == null) {\r
2484 return;\r
2485 }\r
2486 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2487 \r
2488 if (sections == null){\r
2489 sections = ffs.addNewSections();\r
2490 }\r
2491 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = sections.addNewSections();\r
2492 sections2.setEncapsulationType(encapType);\r
2493 sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString("EFI_SECTION_PE32"));\r
2494 }\r
2495 \r
2496 public void removeBuildOptionsFfsSectionsSections(int i, int j) {\r
2497 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2498 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2499 if (sections == null) {\r
2500 return;\r
2501 }\r
2502 XmlCursor cursor = sections.newCursor();\r
2503 QName qSections = new QName(xmlNs, "Sections");\r
2504 if (cursor.toChild(qSections)) {\r
2505 for (int k = 0; k < j; ++k) {\r
2506 cursor.toNextSibling(qSections);\r
2507 }\r
2508 cursor.removeXml();\r
2509 }\r
2510 cursor.dispose();\r
2511 }\r
2512 \r
2513 public void updateBuildOptionsFfsSectionsSections(int i, int j, String type) {\r
2514 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2515 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2516 if (sections == null) {\r
2517 return;\r
2518 }\r
2519 XmlCursor cursor = sections.newCursor();\r
2520 QName qSections = new QName(xmlNs, "Sections");\r
2521 if (cursor.toChild(qSections)) {\r
2522 for (int k = 0; k < j; ++k) {\r
2523 cursor.toNextSibling(qSections);\r
2524 }\r
2525 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2526 sections2.setEncapsulationType(type);\r
2527 }\r
2528 cursor.dispose();\r
2529 }\r
2530 \r
2531 public void genBuildOptionsFfsSectionsSectionsSection(int i, int j, String type) {\r
2532 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2533 if (ffs == null) {\r
2534 return;\r
2535 }\r
2536 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2537 XmlCursor cursor = sections.newCursor();\r
2538 QName qSections = new QName(xmlNs, "Sections");\r
2539 if (cursor.toChild(qSections)){\r
2540 for (int k = 0; k < j; ++k) {\r
2541 cursor.toNextSibling(qSections);\r
2542 }\r
2543 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2544 sections2.addNewSection().setSectionType(EfiSectionType.Enum.forString(type));\r
2545 }\r
2546 cursor.dispose();\r
2547 }\r
2548 \r
2549 public void removeBuildOptionsFfsSectionsSectionsSection(int i, int j, int k) {\r
2550 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2551 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2552 if (sections == null) {\r
2553 return;\r
2554 }\r
2555 XmlCursor cursor = sections.newCursor();\r
2556 QName qSections = new QName(xmlNs, "Sections");\r
2557 if (cursor.toChild(qSections)) {\r
2558 for (int l = 0; l < j; ++l) {\r
2559 cursor.toNextSibling(qSections);\r
2560 }\r
2561 if (cursor.toFirstChild()) {\r
2562 int m = 0;\r
2563 for (; m < k; ++m) {\r
2564 cursor.toNextSibling();\r
2565 }\r
2566 cursor.removeXml();\r
2567 if (m == 0) {\r
2568 cursor.toParent();\r
2569 cursor.removeXml();\r
2570 }\r
2571 }\r
2572 }\r
2573 cursor.dispose();\r
2574 }\r
2575 \r
2576 public void updateBuildOptionsFfsSectionsSectionsSection(int i, int j, int k, String type) {\r
2577 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2578 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2579 if (sections == null) {\r
2580 return;\r
2581 }\r
2582 XmlCursor cursor = sections.newCursor();\r
2583 QName qSections = new QName(xmlNs, "Sections");\r
2584 if (cursor.toChild(qSections)) {\r
2585 for (int l = 0; l < j; ++l) {\r
2586 cursor.toNextSibling(qSections);\r
2587 }\r
2588 if (cursor.toFirstChild()) {\r
2589 for (int m = 0; m < k; ++m) {\r
2590 cursor.toNextSibling();\r
2591 }\r
2592 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section)cursor.getObject();\r
2593 section.setSectionType(EfiSectionType.Enum.forString(type));\r
2594 }\r
2595 }\r
2596 cursor.dispose();\r
2597 }\r
2598 \r
2599 public void getBuildOptionsFfsSectionsSectionsSection(int i, int j, ArrayList<String> al) {\r
2600 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2601 if (ffs == null) {\r
2602 return;\r
2603 }\r
2604 BuildOptionsDocument.BuildOptions.Ffs.Sections sections = ffs.getSections();\r
2605 XmlCursor cursor = sections.newCursor();\r
2606 QName qSections = new QName(xmlNs, "Sections");\r
2607 if (cursor.toChild(qSections)){\r
2608 for (int k = 0; k < j; ++k) {\r
2609 cursor.toNextSibling(qSections);\r
2610 }\r
2611 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2 sections2 = (BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2)cursor.getObject();\r
2612 if (sections2.getSectionList() == null){\r
2613 cursor.dispose();\r
2614 return;\r
2615 }\r
2616 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section> li = sections2.getSectionList().listIterator();\r
2617 while(li.hasNext()) {\r
2618 BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2.Section section = li.next();\r
2619// if (section.isSetSectionType()) {\r
2620 al.add(section.getSectionType()+"");\r
2621// }\r
2622 \r
2623 }\r
2624 }\r
2625 cursor.dispose();\r
2626 \r
2627 }\r
2628 \r
2629 public int getBuildOptionsFfsCount(){\r
2630 if (getfpdBuildOpts().getFfsList() == null) {\r
2631 return 0;\r
2632 }\r
2633 return getfpdBuildOpts().getFfsList().size();\r
2634 }\r
2635 \r
2636 public void getBuildOptionsFfsKey(String[][] saa) {\r
2637 if (getfpdBuildOpts().getFfsList() == null) {\r
2638 return;\r
2639 }\r
2640 ListIterator<BuildOptionsDocument.BuildOptions.Ffs> li = getfpdBuildOpts().getFfsList().listIterator();\r
2641 int i = 0;\r
2642 while(li.hasNext()){\r
2643 BuildOptionsDocument.BuildOptions.Ffs ffs = li.next();\r
2644 saa[i][0] = ffs.getFfsKey();\r
2645 ++i;\r
2646 }\r
2647 }\r
2648 \r
2649 public void updateBuildOptionsFfsKey(int i, String key) {\r
2650 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2651 ffs.setFfsKey(key);\r
2652 }\r
2653 \r
2654 /**Get ith FFS key and contents.\r
2655 * @param saa\r
2656 */\r
2657 public void getBuildOptionsFfs(int i, String[] sa, LinkedHashMap<String, String> ffsAttribMap, ArrayList<String> firstLevelSections, ArrayList<String> firstLevelSection) {\r
2658 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2659 \r
2660 if (ffs != null) {\r
2661 \r
2662 sa[0] = ffs.getFfsKey();\r
2663 if (ffs.getSections() != null) {\r
2664 if(ffs.getSections().getEncapsulationType() != null){\r
2665 sa[1] = ffs.getSections().getEncapsulationType();\r
2666 }\r
2667 if (ffs.getSections().getSectionList() != null){\r
2668 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Section> li = ffs.getSections().getSectionList().listIterator();\r
2669 while (li.hasNext()) {\r
2670 firstLevelSection.add(li.next().getSectionType()+"");\r
2671 }\r
2672 }\r
2673 if (ffs.getSections().getSectionsList() != null) {\r
2674 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Sections.Sections2> li = ffs.getSections().getSectionsList().listIterator();\r
2675 while(li.hasNext()) {\r
2676 firstLevelSections.add(li.next().getEncapsulationType());\r
2677 }\r
2678 }\r
2679 }\r
2680 if (ffs.getAttributeList() != null) {\r
2681 ListIterator<BuildOptionsDocument.BuildOptions.Ffs.Attribute> li = ffs.getAttributeList().listIterator();\r
2682 while(li.hasNext()) {\r
2683 BuildOptionsDocument.BuildOptions.Ffs.Attribute attrib = li.next();\r
2684 ffsAttribMap.put(attrib.getName(), attrib.getValue());\r
2685 }\r
2686 \r
2687 }\r
2688 }\r
2689\r
2690 \r
2691 }\r
2692 \r
2693 private BuildOptionsDocument.BuildOptions.Ffs getFfs(int i) {\r
2694 XmlObject o = getfpdBuildOpts();\r
2695 BuildOptionsDocument.BuildOptions.Ffs ffs = null;\r
2696 \r
2697 XmlCursor cursor = o.newCursor();\r
2698 QName qFfs = new QName(xmlNs, "Ffs");\r
2699 if (cursor.toChild(qFfs)) {\r
2700 for (int j = 0; j < i; ++j) {\r
2701 cursor.toNextSibling(qFfs);\r
2702 }\r
2703 ffs = (BuildOptionsDocument.BuildOptions.Ffs)cursor.getObject();\r
2704 }\r
2705 cursor.dispose();\r
2706 return ffs;\r
2707 }\r
2708 \r
2709 public void removeBuildOptionsFfs(int i) {\r
2710 BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
2711 if (ffs == null){\r
2712 return;\r
2713 }\r
2714 \r
2715 XmlCursor cursor = ffs.newCursor();\r
2716 cursor.removeXml();\r
2717 cursor.dispose();\r
2718 }\r
2719 \r
2720 \r
2721 \r
2722 public PlatformDefinitionsDocument.PlatformDefinitions getfpdPlatformDefs(){\r
2723 if (fpdPlatformDefs == null){\r
2724 fpdPlatformDefs = fpdRoot.addNewPlatformDefinitions();\r
2725 }\r
2726 return fpdPlatformDefs;\r
2727 }\r
2728 \r
2729 public void getPlatformDefsSupportedArchs(Vector<Object> archs){\r
2730 if (getfpdPlatformDefs().getSupportedArchitectures() == null) {\r
2731 return;\r
2732 }\r
2733 ListIterator li = getfpdPlatformDefs().getSupportedArchitectures().listIterator();\r
2734 while(li.hasNext()) {\r
2735 archs.add(li.next());\r
2736 }\r
2737 }\r
2738 \r
2739 public void setPlatformDefsSupportedArchs(Vector<Object> archs) {\r
2740 if (archs != null) {\r
2741 getfpdPlatformDefs().setSupportedArchitectures(archs);\r
2742 }\r
2743// else {\r
2744// XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
2745// if (cursor.toChild(xmlNs, "SupportedArchitectures")) {\r
2746// cursor.removeXml();\r
2747// }\r
2748// cursor.dispose();\r
2749// }\r
2750 }\r
2751 \r
2752 public void getPlatformDefsBuildTargets(Vector<Object> targets) {\r
2753 if (getfpdPlatformDefs().getBuildTargets() == null) {\r
2754 return;\r
2755 }\r
2756 ListIterator li = getfpdPlatformDefs().getBuildTargets().listIterator();\r
2757 while(li.hasNext()) {\r
2758 targets.add(li.next());\r
2759 }\r
2760 }\r
2761 \r
2762 public void setPlatformDefsBuildTargets(Vector<Object> targets) {\r
2763 getfpdPlatformDefs().setBuildTargets(targets);\r
2764 }\r
2765 \r
2766 public void genPlatformDefsSkuInfo(String id, String name) {\r
2767 SkuInfoDocument.SkuInfo skuInfo = null;\r
2768 if (getfpdPlatformDefs().getSkuInfo() == null) {\r
2769 skuInfo = getfpdPlatformDefs().addNewSkuInfo();\r
2770 }\r
2771 skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2772 if (skuInfo.getUiSkuNameList() == null || skuInfo.getUiSkuNameList().size() == 0) {\r
2773 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
2774 skuName.setSkuID(new BigInteger("0"));\r
2775 skuName.setStringValue("DEFAULT");\r
2776 }\r
2777 if (id.equals("0")) {\r
2778 return;\r
2779 }\r
2780 SkuInfoDocument.SkuInfo.UiSkuName skuName = skuInfo.addNewUiSkuName();\r
2781 skuName.setSkuID(new BigInteger(id));\r
2782 skuName.setStringValue(name);\r
2783 }\r
2784 \r
2785 public int getPlatformDefsSkuInfoCount(){\r
2786 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
2787 return 0;\r
2788 }\r
2789 return getfpdPlatformDefs().getSkuInfo().getUiSkuNameList().size();\r
2790 }\r
2791 \r
2792 public void getPlatformDefsSkuInfos(String[][] saa){\r
2793 if (getfpdPlatformDefs().getSkuInfo() == null || getfpdPlatformDefs().getSkuInfo().getUiSkuNameList() == null) {\r
2794 if (getfpdDynPcdBuildDefs().getPcdBuildDataList() == null) {\r
2795 removeElement(getfpdDynPcdBuildDefs());\r
2796 fpdDynPcdBuildDefs = null;\r
2797 }\r
2798 return ;\r
2799 }\r
2800 \r
2801 List<SkuInfoDocument.SkuInfo.UiSkuName> l = getfpdPlatformDefs().getSkuInfo().getUiSkuNameList();\r
2802 ListIterator<SkuInfoDocument.SkuInfo.UiSkuName> li = l.listIterator();\r
2803 int i = 0;\r
2804 while(li.hasNext()) {\r
2805 SkuInfoDocument.SkuInfo.UiSkuName sku = li.next();\r
2806 saa[i][0] = sku.getSkuID()+"";\r
2807 saa[i][1] = sku.getStringValue();\r
2808 ++i;\r
2809 }\r
2810 }\r
2811 \r
2812 public void removePlatformDefsSkuInfo(int i) {\r
2813 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2814 if (skuInfo == null || i == 0) {\r
2815 return ;\r
2816 }\r
2817 \r
2818 XmlCursor cursor = skuInfo.newCursor();\r
2819 if (cursor.toFirstChild()) {\r
2820 for (int j = 0; j < i; ++j) {\r
2821 cursor.toNextSibling();\r
2822 }\r
2823 cursor.removeXml();\r
2824 }\r
2825 cursor.dispose();\r
2826 }\r
2827 \r
2828 public void updatePlatformDefsSkuInfo(int i, String id, String name) {\r
2829 SkuInfoDocument.SkuInfo skuInfo = getfpdPlatformDefs().getSkuInfo();\r
2830 if (skuInfo == null || i == 0) {\r
2831 return ;\r
2832 }\r
2833 \r
2834 XmlCursor cursor = skuInfo.newCursor();\r
2835 if (cursor.toFirstChild()) {\r
2836 for (int j = 0; j < i; ++j) {\r
2837 cursor.toNextSibling();\r
2838 }\r
2839 SkuInfoDocument.SkuInfo.UiSkuName sku = (SkuInfoDocument.SkuInfo.UiSkuName)cursor.getObject();\r
2840 sku.setSkuID(new BigInteger(id));\r
2841 sku.setStringValue(name);\r
2842 }\r
2843 cursor.dispose();\r
2844 }\r
2845 \r
2846 public String getPlatformDefsInterDir(){\r
2847 if (getfpdPlatformDefs().getIntermediateDirectories() == null) {\r
2848 return null;\r
2849 }\r
2850 return getfpdPlatformDefs().getIntermediateDirectories().toString();\r
2851 }\r
2852 \r
2853 public void setPlatformDefsInterDir(String interDir){\r
2854 getfpdPlatformDefs().setIntermediateDirectories(IntermediateOutputType.Enum.forString(interDir));\r
2855 }\r
2856 \r
2857 public String getPlatformDefsOutputDir() {\r
2858 return getfpdPlatformDefs().getOutputDirectory();\r
2859 }\r
2860 \r
2861 public void setPlatformDefsOutputDir(String outputDir) {\r
2862 if (outputDir != null && outputDir.length() > 0) {\r
2863 getfpdPlatformDefs().setOutputDirectory(outputDir);\r
2864 }\r
2865 else{\r
2866 XmlCursor cursor = getfpdPlatformDefs().newCursor();\r
2867 if (cursor.toChild(new QName(xmlNs, "OutputDirectory"))) {\r
2868 cursor.removeXml();\r
2869 }\r
2870 cursor.dispose();\r
2871 }\r
2872 }\r
2873 \r
2874 public FlashDocument.Flash getfpdFlash() {\r
2875 if (fpdFlash == null) {\r
2876 fpdFlash = fpdRoot.addNewFlash();\r
2877 }\r
2878 return fpdFlash;\r
2879 }\r
2880 \r
2881 public void genFlashDefinitionFile(String file) {\r
2882 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2883 if (fdf == null) {\r
2884 fdf = getfpdFlash().addNewFlashDefinitionFile();\r
2885 }\r
2886 \r
2887 fdf.setStringValue(file);\r
2888 }\r
2889 \r
2890 public String getFlashDefinitionFile() {\r
2891 FlashDefinitionFileDocument.FlashDefinitionFile fdf = getfpdFlash().getFlashDefinitionFile();\r
2892 if (fdf == null) {\r
2893 return "";\r
2894 }\r
2895 \r
2896 return fdf.getStringValue();\r
2897 }\r
2898 \r
2899 public void genFvImagesNameValue(String name, String value) {\r
2900 \r
2901 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2902 if (fi == null) {\r
2903 fi = getfpdFlash().addNewFvImages();\r
2904 }\r
2905 \r
2906 FvImagesDocument.FvImages.NameValue nv = fi.addNewNameValue();\r
2907 nv.setName(name);\r
2908 nv.setValue(value);\r
2909 }\r
2910 \r
2911 public void removeFvImagesNameValue(int i){\r
2912 \r
2913 XmlObject o = getfpdFlash().getFvImages();\r
2914 if (o == null) {\r
2915 return;\r
2916 }\r
2917 \r
2918 QName qNameValue = new QName(xmlNs, "NameValue");\r
2919 XmlCursor cursor = o.newCursor();\r
2920 if (cursor.toChild(qNameValue)) {\r
2921 for (int j = 0; j < i; ++j) {\r
2922 cursor.toNextSibling(qNameValue);\r
2923 }\r
2924 cursor.removeXml();\r
2925 }\r
2926 cursor.dispose();\r
2927 }\r
2928 \r
2929 public void updateFvImagesNameValue(int i, String name, String value){\r
2930 \r
2931 XmlObject o = getfpdFlash().getFvImages();\r
2932 if (o == null) {\r
2933 return;\r
2934 }\r
2935 \r
2936 QName qNameValue = new QName(xmlNs, "NameValue");\r
2937 XmlCursor cursor = o.newCursor();\r
2938 if (cursor.toChild(qNameValue)) {\r
2939 for (int j = 0; j < i; ++j) {\r
2940 cursor.toNextSibling(qNameValue);\r
2941 }\r
2942 FvImagesDocument.FvImages.NameValue nv = (FvImagesDocument.FvImages.NameValue)cursor.getObject();\r
2943 nv.setName(name);\r
2944 nv.setValue(value);\r
2945 }\r
2946 cursor.dispose();\r
2947 }\r
2948 \r
2949 public int getFvImagesNameValueCount() {\r
2950 \r
2951 FvImagesDocument.FvImages fi = null;\r
2952 if ((fi = getfpdFlash().getFvImages()) == null || fi.getNameValueList() == null) {\r
2953 return 0;\r
2954 }\r
2955 return fi.getNameValueList().size();\r
2956 }\r
2957 \r
2958 public void getFvImagesNameValues(String[][] nv) {\r
2959 \r
2960 FvImagesDocument.FvImages fi = getfpdFlash().getFvImages();\r
2961 if (fi == null){\r
2962 return;\r
2963 }\r
2964 List<FvImagesDocument.FvImages.NameValue> l = fi.getNameValueList();\r
2965 int i = 0;\r
2966 ListIterator li = l.listIterator();\r
2967 while (li.hasNext()) {\r
2968 FvImagesDocument.FvImages.NameValue e = (FvImagesDocument.FvImages.NameValue) li\r
2969 .next();\r
2970 nv[i][0] = e.getName();\r
2971 nv[i][1] = e.getValue();\r
2972 \r
2973 i++;\r
2974 }\r
2975 }\r
2976 \r
2977 public void getFvImagesFvImageFvImageNames (Vector<String> vImageNames) {\r
2978 FvImagesDocument.FvImages fis = getfpdFlash().getFvImages();\r
2979 if (fis == null || fis.getFvImageList() == null) {\r
2980 return;\r
2981 }\r
2982 \r
2983 ListIterator<FvImagesDocument.FvImages.FvImage> li = fis.getFvImageList().listIterator();\r
2984 while (li.hasNext()) {\r
2985 FvImagesDocument.FvImages.FvImage fi = li.next();\r
2986 if (fi.getType().toString().equals("ImageName")) {\r
2987 vImageNames.addAll(fi.getFvImageNamesList());\r
2988 return;\r
2989 }\r
2990 }\r
2991 }\r
2992 \r
2993 public void addFvImageFvImageNames (String[] fvNames) {\r
2994 FvImagesDocument.FvImages fis = getfpdFlash().getFvImages();\r
2995 if (fis == null || fis.getFvImageList() == null) {\r
2996 genFvImagesFvImage (fvNames, "ImageName", null);\r
2997 return;\r
2998 }\r
2999 \r
3000 ListIterator<FvImagesDocument.FvImages.FvImage> li = fis.getFvImageList().listIterator();\r
3001 while (li.hasNext()) {\r
3002 FvImagesDocument.FvImages.FvImage fi = li.next();\r
3003 if (fi.getType().toString().equals("ImageName")) {\r
3004 addFvImageNamesInFvImage (fi, fvNames);\r
3005 return;\r
3006 }\r
3007 }\r
3008 genFvImagesFvImage (fvNames, "ImageName", null); \r
3009 }\r
3010 \r
3011 public void addFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String[] fvNames) {\r
3012 \r
3013 for (int i = 0; i < fvNames.length; ++i) {\r
3014 fi.addFvImageNames(fvNames[i]);\r
3015 }\r
3016 }\r
3017 \r
3018 public void addFvImageNamesInFvImage (int i, String[] fvNames) {\r
3019 XmlObject o = getfpdFlash().getFvImages();\r
3020 if (o == null) {\r
3021 return;\r
3022 }\r
3023 XmlCursor cursor = o.newCursor();\r
3024 QName qFvImage = new QName(xmlNs, "FvImage");\r
3025 if (cursor.toChild(qFvImage)) {\r
3026 for (int j = 0; j < i; ++j) {\r
3027 cursor.toNextSibling(qFvImage);\r
3028 }\r
3029 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3030 addFvImageNamesInFvImage(fi, fvNames);\r
3031 }\r
3032 cursor.dispose();\r
3033 }\r
3034 \r
3035 public void genFvImagesFvImage(String[] names, String types, Map<String, String> options) {\r
3036 \r
3037 FvImagesDocument.FvImages fis = null;\r
3038 if ((fis = getfpdFlash().getFvImages()) == null) {\r
3039 fis = getfpdFlash().addNewFvImages();\r
3040 }\r
3041 \r
3042 //\r
3043 //gen FvImage with FvImageNames array\r
3044 //\r
3045 FvImagesDocument.FvImages.FvImage fi = fis.addNewFvImage();\r
3046 for (int i = 0; i < names.length; ++i) {\r
3047 fi.addFvImageNames(names[i]);\r
3048 }\r
3049 fi.setType(FvImageTypes.Enum.forString(types));\r
3050 if (options != null){\r
3051 setFvImagesFvImageFvImageOptions(options, fi);\r
3052 }\r
3053 }\r
3054 \r
3055 private void setFvImagesFvImageFvImageOptions(Map<String, String> options, FvImagesDocument.FvImages.FvImage fi){\r
3056 FvImagesDocument.FvImages.FvImage.FvImageOptions fio = fi.getFvImageOptions();\r
3057 if (fio == null){\r
3058 fio = fi.addNewFvImageOptions();\r
3059 }\r
3060 \r
3061 Set<String> key = options.keySet();\r
3062 Iterator<String> i = key.iterator();\r
3063 while (i.hasNext()) {\r
3064 \r
3065 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fio.addNewNameValue();\r
3066 String k = (String)i.next();\r
3067 \r
3068 nv.setName(k);\r
3069 nv.setValue((String)options.get(k));\r
3070 \r
3071 }\r
3072 \r
3073 }\r
3074 \r
3075 \r
3076 public void removeFvImagesFvImage(int i) {\r
3077 \r
3078 XmlObject o = getfpdFlash().getFvImages();\r
3079 if (o == null) {\r
3080 return;\r
3081 }\r
3082 \r
3083 QName qFvImage = new QName(xmlNs, "FvImage");\r
3084 XmlCursor cursor = o.newCursor();\r
3085 if (cursor.toChild(qFvImage)) {\r
3086 for (int j = 0; j < i; ++j) {\r
3087 cursor.toNextSibling(qFvImage);\r
3088 }\r
3089 cursor.removeXml();\r
3090 }\r
3091 cursor.dispose();\r
3092 }\r
3093 \r
3094 /**\r
3095 * @param oldFvName\r
3096 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.\r
3097 */\r
3098 public void updateFvImageNameAll (String oldFvName, String newFvName) {\r
3099 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
3100 return;\r
3101 }\r
3102 ListIterator<FvImagesDocument.FvImages.FvImage> li = getfpdFlash().getFvImages().getFvImageList().listIterator();\r
3103 while (li.hasNext()) {\r
3104 FvImagesDocument.FvImages.FvImage fi = li.next();\r
3105 updateFvImageNamesInFvImage (fi, oldFvName, newFvName);\r
3106 if (fi.getFvImageNamesList().size() == 0) {\r
3107 li.remove();\r
3108 }\r
3109 }\r
3110 }\r
3111 \r
3112 public void updateFvImageNamesInFvImage (int i, String oldFvName, String newFvName) {\r
3113 XmlObject o = getfpdFlash().getFvImages();\r
3114 if (o == null) {\r
3115 return;\r
3116 }\r
3117 XmlCursor cursor = o.newCursor();\r
3118 QName qFvImage = new QName(xmlNs, "FvImage");\r
3119 if (cursor.toChild(qFvImage)) {\r
3120 for (int j = 0; j < i; ++j) {\r
3121 cursor.toNextSibling(qFvImage);\r
3122 }\r
3123 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3124 updateFvImageNamesInFvImage (fi, oldFvName, newFvName);\r
3125 }\r
3126 cursor.dispose();\r
3127 }\r
3128 /**\r
3129 * @param fi\r
3130 * @param oldFvName The FV Name to be replaced.\r
3131 * @param newFvName The New FV Name. If null, remove the old FvImageNames entry.\r
3132 */\r
3133 public void updateFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String oldFvName, String newFvName) {\r
3134 QName qFvImageNames = new QName(xmlNs, "FvImageNames");\r
3135 XmlCursor cursor = fi.newCursor();\r
3136 \r
3137 if (cursor.toChild(qFvImageNames)) {\r
3138 do {\r
3139 String xmlValue = cursor.getTextValue();\r
3140 if (xmlValue.equals(oldFvName)){\r
3141 if (newFvName != null) {\r
3142 cursor.setTextValue(newFvName);\r
3143 }\r
3144 else {\r
3145 cursor.removeXml();\r
3146 }\r
3147 }\r
3148 }while (cursor.toNextSibling(qFvImageNames));\r
3149 }\r
3150 \r
3151 cursor.dispose();\r
3152 }\r
3153 \r
3154 /**update the Type attribute of ith FvImage with new type.\r
3155 * @param i\r
3156 * @param type\r
3157 */\r
3158 public void updateFvImagesFvImageType (int i, String type) {\r
3159 XmlObject o = getfpdFlash().getFvImages();\r
3160 if (o == null) {\r
3161 return;\r
3162 }\r
3163 XmlCursor cursor = o.newCursor();\r
3164 QName qFvImage = new QName(xmlNs, "FvImage");\r
3165 if (cursor.toChild(qFvImage)) {\r
3166 for (int j = 0; j < i; ++j) {\r
3167 cursor.toNextSibling(qFvImage);\r
3168 }\r
3169 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3170 fi.setType(FvImageTypes.Enum.forString(type));\r
3171 }\r
3172 cursor.dispose();\r
3173 }\r
3174 \r
3175 public void updateFvImagesFvImage(int i, String[] names, String types, Map<String, String> options){\r
3176 \r
3177 XmlObject o = getfpdFlash().getFvImages();\r
3178 if (o == null) {\r
3179 return;\r
3180 }\r
3181 XmlCursor cursor = o.newCursor();\r
3182 QName qFvImage = new QName(xmlNs, "FvImage");\r
3183 if (cursor.toChild(qFvImage)) {\r
3184 for (int j = 0; j < i; ++j) {\r
3185 cursor.toNextSibling(qFvImage);\r
3186 }\r
3187 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3188 fi.setType(FvImageTypes.Enum.forString(types));\r
3189 \r
3190 //\r
3191 // remove old FvImageNames before adding new ones\r
3192 //\r
3193 QName qFvImageNames = new QName(xmlNs, "FvImageNames"); \r
3194 cursor.toChild(qFvImageNames);\r
3195 cursor.removeXml();\r
3196 while (cursor.toNextSibling(qFvImageNames)) {\r
3197 cursor.removeXml();\r
3198 }\r
3199 \r
3200 for (int k = 0; k < names.length; ++k) {\r
3201 fi.addFvImageNames(names[k]);\r
3202 }\r
3203 //\r
3204 // remove old FvImageOptions before adding new options\r
3205 //\r
3206 QName qFvImageOptions = new QName(xmlNs, "FvImageOptions");\r
3207 cursor.toNextSibling(qFvImageOptions);\r
3208 cursor.removeXml();\r
3209 \r
3210 setFvImagesFvImageFvImageOptions(options, fi);\r
3211 }\r
3212 cursor.dispose();\r
3213 }\r
3214 \r
3215 public int getFvImagesFvImageCount(String type) {\r
3216 \r
3217 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
3218 return 0;\r
3219 }\r
3220 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3221 ListIterator li = l.listIterator();\r
3222 int i = 0;\r
3223 while(li.hasNext()) {\r
3224 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3225 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3226 continue;\r
3227 }\r
3228 \r
3229 ++i;\r
3230 }\r
3231 \r
3232 return i;\r
3233 }\r
3234 \r
3235 public Vector<FvImagesDocument.FvImages.FvImage> getFvImagesFvImageWithName (String fvName, String type) {\r
3236 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = new Vector<FvImagesDocument.FvImages.FvImage>();\r
3237 if (getfpdFlash().getFvImages() == null || getfpdFlash().getFvImages().getFvImageList() == null) {\r
3238 return vFvImage;\r
3239 }\r
3240 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3241 ListIterator li = l.listIterator();\r
3242 while(li.hasNext()) {\r
3243 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3244 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3245 continue;\r
3246 }\r
3247 if (fi.getFvImageNamesList().contains(fvName)) {\r
3248 vFvImage.add(fi);\r
3249 }\r
3250 }\r
3251 \r
3252 return vFvImage;\r
3253 }\r
3254 /**\r
3255 * @param saa\r
3256 * @param type "ALL" means all FvImage types: ImageName, Options, Attributes, Components.\r
3257 */\r
3258 public void getFvImagesFvImages(String[][] saa, String type) {\r
3259 \r
3260 if (getfpdFlash().getFvImages() == null) {\r
3261 return;\r
3262 }\r
3263 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3264 if (l == null) {\r
3265 return;\r
3266 }\r
3267 ListIterator li = l.listIterator();\r
3268 int i = 0;\r
3269 while(li.hasNext()) {\r
3270 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3271 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3272 continue;\r
3273 }\r
3274 //\r
3275 // get FvImageNames array, space separated\r
3276 //\r
3277 List<String> lfn = fi.getFvImageNamesList();\r
3278 ListIterator lfni = lfn.listIterator();\r
3279 saa[i][0] = " ";\r
3280 while (lfni.hasNext()) {\r
3281 saa[i][0] += (String)lfni.next();\r
3282 saa[i][0] += " ";\r
3283 }\r
3284 saa[i][0] = saa[i][0].trim();\r
3285 \r
3286 saa[i][1] = fi.getType()+"";\r
3287 \r
3288 ++i;\r
3289 }\r
3290 }\r
3291 \r
3292 public void removeFvImageNameValue (int i, String attributeName) {\r
3293 XmlObject o = getfpdFlash().getFvImages();\r
3294 if (o == null) {\r
3295 return;\r
3296 }\r
3297 XmlCursor cursor = o.newCursor();\r
3298 QName qFvImage = new QName(xmlNs, "FvImage");\r
3299 if (cursor.toChild(qFvImage)) {\r
3300 for (int j = 0; j < i; ++j) {\r
3301 cursor.toNextSibling(qFvImage);\r
3302 }\r
3303 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3304 removeFvImageNameValue (fi, attributeName);\r
3305 }\r
3306 cursor.dispose();\r
3307 }\r
3308 /**Remove from fi the attribute pair with attributeName in FvImageOptions.\r
3309 * @param fi\r
3310 * @param attributeName\r
3311 */\r
3312 public void removeFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String attributeName) {\r
3313 if (fi.getFvImageOptions() != null && fi.getFvImageOptions().getNameValueList() != null) {\r
3314 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
3315 while (li.hasNext()) {\r
3316 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
3317 if (nv.getName().equals(attributeName)) {\r
3318 li.remove();\r
3319 }\r
3320 }\r
3321 }\r
3322 }\r
3323 \r
3324 public void removeTypedNamedFvImageNameValue (String fvName, String type, String optName) {\r
3325 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = getFvImagesFvImageWithName(fvName, type);\r
3326 for (int i = 0; i < vFvImage.size(); ++i) {\r
3327 FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i);\r
3328 removeFvImageNameValue (fi, optName);\r
3329 }\r
3330 }\r
3331 \r
3332 /**Add name-value pair to FvImage element with type.\r
3333 * @param fvName FV name to add name-value pair.\r
3334 * @param type FvImage attribute.\r
3335 * @param name\r
3336 * @param value\r
3337 */\r
3338 public void setTypedNamedFvImageNameValue (String fvName, String type, String name, String value, String newName) {\r
3339 boolean fvImageExists = false;\r
3340 if (getfpdFlash().getFvImages() != null) {\r
3341\r
3342 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3343 if (l != null) {\r
3344 ListIterator li = l.listIterator();\r
3345 while (li.hasNext()) {\r
3346 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage) li.next();\r
3347 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3348 continue;\r
3349 }\r
3350 if (!fi.getFvImageNamesList().contains(fvName)) {\r
3351 continue;\r
3352 }\r
3353 fvImageExists = true;\r
3354 setFvImagesFvImageNameValue(fi, name, value, newName);\r
3355 }\r
3356 }\r
3357 }\r
3358\r
3359 if (!fvImageExists) {\r
3360 HashMap<String, String> map = new HashMap<String, String>();\r
3361 map.put(name, value);\r
3362 genFvImagesFvImage(new String[] { fvName }, type, map);\r
3363 }\r
3364 }\r
3365 \r
3366 /**Add to all FvImage elements with type, the name-value pair.\r
3367 * @param type\r
3368 * @param name\r
3369 * @param value\r
3370 */\r
3371 public void setTypedFvImageNameValue (String type, String name, String value) {\r
3372 if (getfpdFlash().getFvImages() == null) {\r
3373 return;\r
3374 }\r
3375 List<FvImagesDocument.FvImages.FvImage> l = getfpdFlash().getFvImages().getFvImageList();\r
3376 if (l == null) {\r
3377 return;\r
3378 }\r
3379 ListIterator li = l.listIterator();\r
3380 while(li.hasNext()) {\r
3381 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)li.next();\r
3382 if (!fi.getType().toString().equals(type) && !type.equals("ALL")) {\r
3383 continue;\r
3384 }\r
3385 setFvImagesFvImageNameValue (fi, name, value, null);\r
3386 }\r
3387 \r
3388 }\r
3389 \r
3390 public void setFvImagesFvImageNameValue (int i, String name, String value) {\r
3391 XmlObject o = getfpdFlash().getFvImages();\r
3392 if (o == null) {\r
3393 return;\r
3394 }\r
3395 XmlCursor cursor = o.newCursor();\r
3396 QName qFvImage = new QName(xmlNs, "FvImage");\r
3397 if (cursor.toChild(qFvImage)) {\r
3398 for (int j = 0; j < i; ++j) {\r
3399 cursor.toNextSibling(qFvImage);\r
3400 }\r
3401 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3402 setFvImagesFvImageNameValue (fi, name, value, null);\r
3403 }\r
3404 cursor.dispose();\r
3405 }\r
3406 \r
3407 /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before.\r
3408 * @param fi\r
3409 * @param name\r
3410 * @param value\r
3411 * @param newName\r
3412 */\r
3413 public void setFvImagesFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String name, String value, String newName) {\r
3414 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) {\r
3415 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.addNewFvImageOptions().addNewNameValue();\r
3416 nv.setName(name);\r
3417 nv.setValue(value);\r
3418 if (newName != null && !newName.equals(name)) {\r
3419 nv.setName(newName);\r
3420 }\r
3421 return;\r
3422 }\r
3423 \r
3424 XmlCursor cursor = fi.getFvImageOptions().newCursor();\r
3425 if (cursor.toFirstChild()) {\r
3426 do {\r
3427 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = (FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue)cursor.getObject();\r
3428 if (nv.getName().equals(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 return;\r
3435 }\r
3436 }while (cursor.toNextSibling());\r
3437 }\r
3438 \r
3439 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.getFvImageOptions().addNewNameValue();\r
3440 nv.setName(name);\r
3441 nv.setValue(value);\r
3442 if (newName != null && !newName.equals(name)) {\r
3443 nv.setName(newName);\r
3444 }\r
3445 cursor.dispose();\r
3446 }\r
3447 \r
3448 public void getFvImagesFvImageOptions (String fvName, Map<String, String> m) {\r
3449 Vector<FvImagesDocument.FvImages.FvImage> vFvImage = getFvImagesFvImageWithName (fvName, "Options");\r
3450 for (int i = 0; i < vFvImage.size(); ++i) {\r
3451 FvImagesDocument.FvImages.FvImage fi = vFvImage.get(i);\r
3452 if (fi == null || fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) {\r
3453 continue;\r
3454 }\r
3455\r
3456 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions()\r
3457 .getNameValueList()\r
3458 .listIterator();\r
3459 while (li.hasNext()) {\r
3460 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
3461 m.put(nv.getName(), nv.getValue());\r
3462 }\r
3463 }\r
3464 }\r
3465 \r
3466 public int getFvImagePosInFvImages (String fvNameList, String type) {\r
3467 XmlObject o = getfpdFlash().getFvImages();\r
3468 if (o == null) {\r
3469 return -1;\r
3470 }\r
3471 \r
3472 int pos = -1;\r
3473 String[] fvNameArray = fvNameList.trim().split(" ");\r
3474 Vector<String> vFvNames = new Vector<String>();\r
3475 \r
3476 \r
3477 XmlCursor cursor = o.newCursor();\r
3478 QName qFvImage = new QName(xmlNs, "FvImage");\r
3479 if (cursor.toChild(qFvImage)) {\r
3480 do {\r
3481 pos++;\r
3482 vFvNames.removeAllElements();\r
3483 for (int i = 0; i < fvNameArray.length; ++i) {\r
3484 vFvNames.add(fvNameArray[i]);\r
3485 }\r
3486 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3487 if (!fi.getType().toString().equals(type)) {\r
3488 continue;\r
3489 }\r
3490 if (fi.getFvImageNamesList() == null || fi.getFvImageNamesList().size() != vFvNames.size()) {\r
3491 continue;\r
3492 }\r
3493 ListIterator<String> li = fi.getFvImageNamesList().listIterator();\r
3494 while (li.hasNext()) {\r
3495 String name = li.next();\r
3496 vFvNames.remove(name);\r
3497 }\r
3498 if (vFvNames.size() == 0) {\r
3499 cursor.dispose();\r
3500 return pos;\r
3501 }\r
3502 \r
3503 }while (cursor.toNextSibling(qFvImage));\r
3504 \r
3505 }\r
3506 cursor.dispose();\r
3507 return -1;\r
3508 }\r
3509 /**Get FvImage Options for FvImage i\r
3510 * @param i the ith FvImage\r
3511 */\r
3512 public void getFvImagesFvImageOptions(int i, Map<String, String> m) {\r
3513 XmlObject o = getfpdFlash().getFvImages();\r
3514 if (o == null) {\r
3515 return;\r
3516 }\r
3517 XmlCursor cursor = o.newCursor();\r
3518 QName qFvImage = new QName(xmlNs, "FvImage");\r
3519 if (cursor.toChild(qFvImage)) {\r
3520 for (int j = 0; j < i; ++j) {\r
3521 cursor.toNextSibling(qFvImage);\r
3522 }\r
3523 FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject();\r
3524 if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null){\r
3525 cursor.dispose();\r
3526 return;\r
3527 }\r
3528 ListIterator<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> li = fi.getFvImageOptions().getNameValueList().listIterator();\r
3529 while(li.hasNext()){\r
3530 FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = li.next();\r
3531 m.put(nv.getName(), nv.getValue());\r
3532 }\r
3533 }\r
3534 cursor.dispose();\r
3535 }\r
3536 \r
3537 /**\r
3538 Get platform header element\r
3539 @return PlatformHeaderDocument.PlatformHeader\r
3540 **/\r
3541 public PlatformHeaderDocument.PlatformHeader getFpdHdr() {\r
3542 if (fpdHdr == null) {\r
3543 fpdHdr = fpdRoot.addNewPlatformHeader();\r
3544 }\r
3545 \r
3546 return fpdHdr;\r
3547 }\r
3548 \r
3549 public String getFpdHdrPlatformName() {\r
3550 return getFpdHdr().getPlatformName();\r
3551 }\r
3552 \r
3553 public String getFpdHdrGuidValue() {\r
3554 return getFpdHdr().getGuidValue();\r
3555 }\r
3556 \r
3557 public String getFpdHdrVer() {\r
3558 return getFpdHdr().getVersion();\r
3559 }\r
3560 \r
3561 public String getFpdHdrAbs() {\r
3562 return getFpdHdr().getAbstract();\r
3563 }\r
3564 \r
3565 public String getFpdHdrDescription() {\r
3566 return getFpdHdr().getDescription();\r
3567 }\r
3568 \r
3569 public String getFpdHdrCopyright() {\r
3570 return getFpdHdr().getCopyright();\r
3571 }\r
3572 \r
3573 public String getFpdHdrLicense() {\r
3574 LicenseDocument.License l = getFpdHdr().getLicense();\r
3575 if (l == null) {\r
3576 return null;\r
3577 }\r
3578 return l.getStringValue();\r
3579 }\r
3580 \r
3581 public String getFpdHdrUrl() {\r
3582 LicenseDocument.License l = getFpdHdr().getLicense();\r
3583 if (l == null) {\r
3584 return null;\r
3585 }\r
3586 return l.getURL();\r
3587 }\r
3588 \r
3589 public String getFpdHdrSpec() {\r
3590\r
3591 return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
3592// return getFpdHdr().getSpecification();\r
3593 }\r
3594 \r
3595 public void setFpdHdrPlatformName(String name){\r
3596 getFpdHdr().setPlatformName(name);\r
3597 }\r
3598 \r
3599 public void setFpdHdrGuidValue(String guid){\r
3600 getFpdHdr().setGuidValue(guid);\r
3601 }\r
3602 \r
3603 public void setFpdHdrVer(String v){\r
3604 getFpdHdr().setVersion(v);\r
3605 }\r
3606 \r
3607 public void setFpdHdrAbs(String abs) {\r
3608 getFpdHdr().setAbstract(abs);\r
3609 }\r
3610 \r
3611 public void setFpdHdrDescription(String desc){\r
3612 getFpdHdr().setDescription(desc);\r
3613 }\r
3614 \r
3615 public void setFpdHdrCopyright(String cr) {\r
3616 getFpdHdr().setCopyright(cr);\r
3617 }\r
3618 \r
3619 public void setFpdHdrLicense(String license){\r
3620 LicenseDocument.License l = getFpdHdr().getLicense();\r
3621 if (l == null) {\r
3622 getFpdHdr().addNewLicense().setStringValue(license);\r
3623 }\r
3624 else {\r
3625 l.setStringValue(license);\r
3626 }\r
3627 }\r
3628\r
3629 public void setFpdHdrUrl(String url){\r
3630 LicenseDocument.License l = getFpdHdr().getLicense();\r
3631 \r
3632 l.setURL(url);\r
3633 \r
3634 }\r
3635 \r
3636 public void setFpdHdrSpec(String s){\r
3637 s = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
3638 getFpdHdr().setSpecification(s);\r
3639 }\r
3640 /**\r
3641 Save the processed xml contents to file\r
3642 \r
3643 @param fpdFile The file to save xml contents\r
3644 @throws IOException Exceptions during file operation\r
3645 **/\r
3646 public void saveAs(File fpdFile) throws IOException {\r
3647\r
3648 XmlOptions options = new XmlOptions();\r
3649\r
3650 options.setCharacterEncoding("UTF-8");\r
3651 options.setSavePrettyPrint();\r
3652 options.setSavePrettyPrintIndent(2);\r
3653 try {\r
3654 fpdd.save(fpdFile, options);\r
3655 } catch (IOException e) {\r
3656 e.printStackTrace();\r
3657 }\r
3658\r
3659 }\r
3660 \r
3661 private String listToString(List l) {\r
3662 if (l == null) {\r
3663 return null;\r
3664 }\r
3665 String s = " ";\r
3666 ListIterator li = l.listIterator();\r
3667 while(li.hasNext()) {\r
3668 s += li.next();\r
3669 s += " ";\r
3670 }\r
3671 return s.trim();\r
3672 }\r
3673 \r
3674 private void removeElement(XmlObject o) {\r
3675 XmlCursor cursor = o.newCursor();\r
3676 cursor.removeXml();\r
3677 cursor.dispose();\r
3678 }\r
3679}\r
3680\r
3681class PcdItemTypeConflictException extends Exception {\r
3682\r
3683 /**\r
3684 * \r
3685 */\r
3686 private static final long serialVersionUID = 1L;\r
3687 private String details = null;\r
3688 \r
3689 PcdItemTypeConflictException (String pcdName, String info) {\r
3690 ModuleIdentification mi = WorkspaceProfile.getModuleId(info);\r
3691 if (mi != null) {\r
3692 details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName(); \r
3693 }\r
3694 else {\r
3695 details = pcdName + " ItemType Conflicts with " + info;\r
3696 }\r
3697 }\r
3698 \r
3699 PcdItemTypeConflictException (String pcdName, String info1, String info2) {\r
3700 ModuleIdentification mi1 = WorkspaceProfile.getModuleId(info1);\r
3701 ModuleIdentification mi2 = WorkspaceProfile.getModuleId(info2);\r
3702 String moduleInfo1 = "";\r
3703 String moduleInfo2 = "";\r
3704 if (mi1 != null) {\r
3705 moduleInfo1 = mi1.getName() + " in Pkg " + mi1.getPackageId().getName();\r
3706 }\r
3707 else {\r
3708 moduleInfo1 = info1;\r
3709 }\r
3710 \r
3711 if (mi2 != null) {\r
3712 moduleInfo2 = mi2.getName() + " in Pkg " + mi2.getPackageId().getName();\r
3713 }\r
3714 else {\r
3715 moduleInfo2 = info2;\r
3716 }\r
3717 \r
3718 details = pcdName + " ItemType Conflicts in " + moduleInfo1 + " and " + moduleInfo2;\r
3719 }\r
3720 \r
3721 public String getMessage() {\r
3722 return details;\r
3723 }\r
3724}\r
3725\r
3726class PcdDeclNotFound extends Exception {\r
3727\r
3728 /**\r
3729 * \r
3730 */\r
3731 private static final long serialVersionUID = 1L;\r
3732 private String details = null;\r
3733 \r
3734 PcdDeclNotFound(String info) {\r
3735 details = "PcdDeclNotFound: " + info;\r
3736 }\r
3737 \r
3738 public String getMessage() {\r
3739 return details;\r
3740 }\r
3741}\r
3742\r
3743class PcdValueMalFormed extends Exception {\r
3744\r
3745 /**\r
3746 * \r
3747 */\r
3748 private static final long serialVersionUID = 1L;\r
3749 private String details = null;\r
3750 \r
3751 PcdValueMalFormed(String info) {\r
3752 details = "PcdValueMalFormed: " + info;\r
3753 }\r
3754 \r
3755 public String getMessage() {\r
3756 return details;\r
3757 }\r
3758}\r