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