b16a1e50893a80f8ec8f80468b24900035738e26
[people/mcb30/edk2.git] / edk2 / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdFileContents.java
1 /** @file\r
2   Java class SpdFileContents is used to parse spd xml file.\r
3  \r
4 Copyright (c) 2006, Intel Corporation\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution.  The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9 \r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12 **/\r
13 package org.tianocore.frameworkwizard.packaging.ui;\r
14 \r
15 import java.io.File;\r
16 import java.io.IOException;\r
17 import java.util.ArrayList;\r
18 import java.util.List;\r
19 import java.util.ListIterator;\r
20 import java.util.Vector;\r
21 \r
22 \r
23 import org.apache.xmlbeans.XmlObject;\r
24 import org.apache.xmlbeans.XmlOptions;\r
25 import org.apache.xmlbeans.XmlCursor;\r
26 \r
27 import org.tianocore.GuidDeclarationsDocument;\r
28 \r
29 import org.tianocore.LibraryClassDeclarationsDocument;\r
30 \r
31 import org.tianocore.ModuleTypeDef;\r
32 import org.tianocore.MsaFilesDocument;\r
33 import org.tianocore.PackageDefinitionsDocument;\r
34 import org.tianocore.PackageHeadersDocument;\r
35 import org.tianocore.PackageSurfaceAreaDocument;\r
36 import org.tianocore.PcdDataTypes;\r
37 import org.tianocore.PcdDeclarationsDocument;\r
38 import org.tianocore.PpiDeclarationsDocument;\r
39 import org.tianocore.ProtocolDeclarationsDocument;\r
40 import org.tianocore.SpdHeaderDocument;\r
41 import org.tianocore.GuidDeclarationsDocument.GuidDeclarations;\r
42 \r
43 /**\r
44  This class processes spd file contents such as add remove xml elements.\r
45   \r
46  @since PackageEditor 1.0\r
47 **/\r
48 \r
49 public class SpdFileContents {\r
50 \r
51     private File file = null;\r
52 \r
53     private PackageSurfaceAreaDocument psad = null;\r
54 \r
55     private PackageSurfaceAreaDocument.PackageSurfaceArea psaRoot = null;\r
56 \r
57     private SpdHeaderDocument.SpdHeader spdHdr = null;\r
58     \r
59     private PackageDefinitionsDocument.PackageDefinitions spdPkgDefs = null;\r
60     \r
61     private LibraryClassDeclarationsDocument.LibraryClassDeclarations spdLibClassDeclarations = null;\r
62 \r
63     private MsaFilesDocument.MsaFiles spdMsaFiles = null;\r
64 \r
65     private PackageHeadersDocument.PackageHeaders spdModHdrs = null;\r
66 \r
67     private GuidDeclarationsDocument.GuidDeclarations spdGuidDeclarations = null;\r
68 \r
69     private ProtocolDeclarationsDocument.ProtocolDeclarations spdProtocolDeclarations = null;\r
70 \r
71     private PpiDeclarationsDocument.PpiDeclarations spdPpiDeclarations = null;\r
72 \r
73     private PcdDeclarationsDocument.PcdDeclarations spdPcdDefinitions = null;\r
74 \r
75     /**\r
76      Constructor to create a new spd file\r
77     **/\r
78     public SpdFileContents() {\r
79 \r
80         psad = PackageSurfaceAreaDocument.Factory.newInstance();\r
81         psaRoot = psad.addNewPackageSurfaceArea();\r
82 \r
83     }\r
84 \r
85     /**\r
86      Constructor for existing document object\r
87        @param psa\r
88     **/\r
89     public SpdFileContents(PackageSurfaceAreaDocument.PackageSurfaceArea psa) {\r
90         psaRoot = psa;\r
91         spdHdr = psaRoot.getSpdHeader();\r
92         spdPkgDefs = psaRoot.getPackageDefinitions();\r
93     }\r
94     /**\r
95      Constructor based on an existing spd file\r
96      \r
97      @param f Existing spd file\r
98     **/\r
99     public SpdFileContents(File f) {\r
100         try {\r
101             psad = PackageSurfaceAreaDocument.Factory.parse(f);\r
102             psaRoot = psad.getPackageSurfaceArea();\r
103             file = f;\r
104         } catch (Exception e) {\r
105             System.out.println(e.toString());\r
106         }\r
107     }\r
108 \r
109     /**\r
110      Remove existing pcd definitions elements using XmlCursor\r
111     **/\r
112     public void removeSpdPcdDefinition() {\r
113         XmlObject o = psaRoot.getPcdDeclarations();\r
114         if (o == null)\r
115             return;\r
116         XmlCursor cursor = o.newCursor();\r
117         cursor.removeXml();\r
118         spdPcdDefinitions = null;\r
119         cursor.dispose();\r
120     }\r
121     \r
122     public void removeSpdPcdDefinition(int i){\r
123         XmlObject o = psaRoot.getPcdDeclarations();\r
124         if (o == null)\r
125             return;\r
126         XmlCursor cursor = o.newCursor();\r
127         if (cursor.toFirstChild()) {\r
128             for (int j = 0; j < i; ++j) {\r
129                 cursor.toNextSibling();\r
130             }\r
131             cursor.removeXml();\r
132             if (getSpdPcdDefinitionCount() == 0) {\r
133                 cursor.toParent();\r
134                 cursor.removeXml();\r
135             }\r
136         } \r
137         cursor.dispose();\r
138     }\r
139 \r
140     /**\r
141      Remove existing ppi declarations using XmlCursor\r
142     **/\r
143     public void removeSpdPpiDeclaration() {\r
144         XmlObject o = psaRoot.getPpiDeclarations();\r
145         if (o == null)\r
146             return;\r
147         XmlCursor cursor = o.newCursor();\r
148         cursor.removeXml();\r
149         spdPpiDeclarations = null;\r
150         cursor.dispose();\r
151     }\r
152 \r
153     public void removeSpdPpiDeclaration(int i){\r
154         XmlObject o = psaRoot.getPpiDeclarations();\r
155         if (o == null)\r
156             return;\r
157         XmlCursor cursor = o.newCursor();\r
158         if (cursor.toFirstChild()) {\r
159             for (int j = 0; j < i; ++j) {\r
160                 cursor.toNextSibling();\r
161             }\r
162             cursor.removeXml();\r
163             if (getSpdPpiDeclarationCount() == 0){\r
164                 cursor.toParent();\r
165                 cursor.removeXml();\r
166             }\r
167         } \r
168         cursor.dispose();\r
169     }\r
170     /**\r
171      Remove existing protocols declarations using XmlCursor\r
172     **/\r
173     public void removeSpdProtocolDeclaration() {\r
174         XmlObject o = psaRoot.getProtocolDeclarations();\r
175         if (o == null)\r
176             return;\r
177         XmlCursor cursor = o.newCursor();\r
178         cursor.removeXml();\r
179         spdProtocolDeclarations = null;\r
180         cursor.dispose();\r
181     }\r
182     \r
183     public void removeSpdProtocolDeclaration(int i) {\r
184         XmlObject o = psaRoot.getProtocolDeclarations();\r
185         if (o == null)\r
186             return;\r
187         XmlCursor cursor = o.newCursor();\r
188         if (cursor.toFirstChild()) {\r
189             for (int j = 0; j < i; ++j) {\r
190                 cursor.toNextSibling();\r
191             }\r
192             cursor.removeXml();\r
193             if (getSpdProtocolDeclarationCount() == 0) {\r
194                 cursor.toParent();\r
195                 cursor.removeXml();\r
196             }\r
197         }\r
198         cursor.dispose();\r
199     }\r
200     /**\r
201      Remove existing GUID declarations using XmlCursor\r
202     **/\r
203     public void removeSpdGuidDeclaration() {\r
204         XmlObject o = psaRoot.getGuidDeclarations();\r
205         if (o == null)\r
206             return;\r
207         XmlCursor cursor = o.newCursor();\r
208         cursor.removeXml();\r
209         spdGuidDeclarations = null; \r
210         cursor.dispose();\r
211     }\r
212     \r
213     public void removeSpdGuidDeclaration(int i) {\r
214         XmlObject o = psaRoot.getGuidDeclarations();\r
215         if (o == null)\r
216             return;\r
217         XmlCursor cursor = o.newCursor();\r
218         if (cursor.toFirstChild()) {\r
219             for (int j = 0; j < i; ++j) {\r
220                 cursor.toNextSibling();\r
221             }\r
222             cursor.removeXml();\r
223             if (getSpdGuidDeclarationCount() == 0) {\r
224                 cursor.toParent();\r
225                 cursor.removeXml();\r
226             }\r
227         } \r
228         cursor.dispose();\r
229     }\r
230 \r
231     /**\r
232      Remove existing spd package include files using XmlCursor\r
233     **/\r
234     public void removeSpdPkgHeader() {\r
235         XmlObject o = psaRoot.getPackageHeaders();\r
236         if (o == null)\r
237             return;\r
238         XmlCursor cursor = o.newCursor();\r
239         cursor.removeXml();\r
240         spdModHdrs = null;\r
241         cursor.dispose();\r
242     }\r
243     \r
244     public void removeSpdPkgHeader(int i){\r
245         XmlObject o = psaRoot.getPackageHeaders();\r
246         if (o == null)\r
247             return;\r
248         XmlCursor cursor = o.newCursor();\r
249         if (cursor.toFirstChild()) {\r
250             for (int j = 0; j < i; ++j) {\r
251                 cursor.toNextSibling();\r
252             }\r
253             cursor.removeXml();\r
254             if (getSpdPackageHeaderCount() == 0) {\r
255                 cursor.toParent();\r
256                 cursor.removeXml();\r
257             }\r
258         } \r
259         cursor.dispose();\r
260     }\r
261 \r
262     /**\r
263      Remove existing msa files using XmlCursor\r
264     **/\r
265     public void removeSpdMsaFile() {\r
266         XmlObject o = psaRoot.getMsaFiles();\r
267         if (o == null)\r
268             return;\r
269         XmlCursor cursor = o.newCursor();\r
270         cursor.removeXml();\r
271         spdMsaFiles = null;\r
272         cursor.dispose();\r
273     }\r
274     \r
275     public void removeSpdMsaFile(int i){\r
276         XmlObject o = psaRoot.getMsaFiles();\r
277         if (o == null)\r
278             return;\r
279         XmlCursor cursor = o.newCursor();\r
280         if (cursor.toFirstChild()) {\r
281             for (int j = 0; j < i; ++j) {\r
282                 cursor.toNextSibling();\r
283             }\r
284             cursor.removeXml();\r
285             if (getSpdMsaFileCount() == 0) {\r
286                 cursor.toParent();\r
287                 cursor.removeXml();\r
288             }\r
289         }\r
290         cursor.dispose();\r
291     }\r
292 \r
293     /**\r
294      Remove existing library class declarations using XmlCursor\r
295     **/\r
296     public void removeSpdLibClass() {\r
297         XmlObject o = psaRoot.getLibraryClassDeclarations();\r
298         if (o == null)\r
299             return;\r
300         XmlCursor cursor = o.newCursor();\r
301         cursor.removeXml();\r
302         spdLibClassDeclarations = null;\r
303         cursor.dispose();\r
304     }\r
305     \r
306     public void removeSpdLibClass(int i) {\r
307         XmlObject o = psaRoot.getLibraryClassDeclarations();\r
308         if (o == null)\r
309             return;\r
310         XmlCursor cursor = o.newCursor();\r
311         if (cursor.toFirstChild()) {\r
312             for (int j = 0; j < i; ++j) {\r
313                 cursor.toNextSibling();\r
314             }\r
315             cursor.removeXml();\r
316             if (getSpdLibClassDeclarationCount() == 0) {\r
317                 cursor.toParent();\r
318                 cursor.removeXml();\r
319             }\r
320         }\r
321         cursor.dispose();\r
322     }\r
323     \r
324     public void updateSpdLibClass(int i, String lib, String hdr, String hlp, String clsUsage, String instanceVer, String hdrAttribArch, String hdrAttribModType) {\r
325         XmlObject o = psaRoot.getLibraryClassDeclarations();\r
326         if (o == null)\r
327             return;\r
328         \r
329         XmlCursor cursor = o.newCursor();\r
330         if (cursor.toFirstChild()) {\r
331             for (int j = 0; j < i; ++j) {\r
332                 cursor.toNextSibling();\r
333             }\r
334             LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass lc = (LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass)cursor.getObject();\r
335             lc.setName(lib);\r
336             lc.setIncludeHeader(hdr);\r
337             lc.setHelpText(hlp);\r
338             if (clsUsage != null) {\r
339                 lc.setRecommendedInstanceGuid(clsUsage);\r
340             }\r
341             if (instanceVer != null){\r
342                 lc.setRecommendedInstanceVersion(instanceVer);\r
343             }\r
344             if (stringToList(hdrAttribArch) != null){\r
345                 lc.setSupArchList(stringToList(hdrAttribArch));\r
346             }\r
347             if (stringToList(hdrAttribModType) != null){\r
348                 lc.setSupModuleList(stringToList(hdrAttribModType));\r
349             }\r
350         }\r
351         \r
352         cursor.dispose();\r
353     }\r
354     \r
355     public void updateSpdMsaFile(int i, String msaFile, String mName, String v, String g){\r
356         XmlObject o = psaRoot.getMsaFiles();\r
357         if (o == null)\r
358             return;\r
359         \r
360         XmlCursor cursor = o.newCursor();\r
361         if (cursor.toFirstChild()) {\r
362             for (int j = 0; j < i; ++j) {\r
363                 cursor.toNextSibling();\r
364             }\r
365             cursor.setTextValue(msaFile);\r
366 \r
367         }\r
368         \r
369         cursor.dispose();\r
370     }\r
371 \r
372     public void updateSpdGuidDecl(int i, String name, String cName, String guid, String hlp, String archList, \r
373                                   String modTypeList, String guidTypeList){\r
374         XmlObject o = psaRoot.getGuidDeclarations();\r
375         if (o == null){\r
376             return;\r
377         }\r
378         \r
379         XmlCursor cursor = o.newCursor();\r
380         if (cursor.toFirstChild()) {\r
381             for (int j = 0; j < i; ++j) {\r
382                 cursor.toNextSibling();\r
383             }\r
384             GuidDeclarationsDocument.GuidDeclarations.Entry e = (GuidDeclarationsDocument.GuidDeclarations.Entry)cursor.getObject();\r
385             e.setName(name);\r
386             e.setCName(cName);\r
387             e.setGuidValue(guid);\r
388             e.setHelpText(hlp);\r
389             if (stringToList(guidTypeList) != null) {\r
390                 e.setGuidTypeList(stringToList(guidTypeList));\r
391             }\r
392             else{\r
393                 e.setGuidTypeList(null);\r
394             }\r
395             if (stringToList(archList) != null){\r
396                 e.setSupArchList(stringToList(archList));\r
397             }\r
398             else{\r
399                 e.setSupArchList(null);\r
400             }\r
401             if (stringToList(modTypeList) != null) {\r
402                 e.setSupModuleList(stringToList(modTypeList));\r
403             }\r
404             else{\r
405                 e.setSupModuleList(null);\r
406             }\r
407             \r
408         }\r
409         cursor.dispose();\r
410     }\r
411     \r
412     public void updateSpdPpiDecl(int i, String name, String cName, String guid, String hlp, String archList, \r
413                                  String modTypeList){\r
414         XmlObject o = psaRoot.getPpiDeclarations();\r
415         if (o == null){\r
416             return;\r
417         }\r
418         \r
419         XmlCursor cursor = o.newCursor();\r
420         if (cursor.toFirstChild()) {\r
421             for (int j = 0; j < i; ++j) {\r
422                 cursor.toNextSibling();\r
423             }\r
424             PpiDeclarationsDocument.PpiDeclarations.Entry e = (PpiDeclarationsDocument.PpiDeclarations.Entry)cursor.getObject();\r
425             e.setName(name);\r
426             e.setCName(cName);\r
427             e.setGuidValue(guid);\r
428             e.setHelpText(hlp);\r
429             if (stringToList(archList) != null){\r
430                 e.setSupArchList(stringToList(archList));\r
431             }\r
432             else{\r
433                 e.setSupArchList(null);\r
434             }\r
435             if (stringToList(modTypeList) != null) {\r
436                 e.setSupModuleList(stringToList(modTypeList));\r
437             }\r
438             else{\r
439                 e.setSupModuleList(null);\r
440             }\r
441         }\r
442         cursor.dispose();\r
443     }\r
444     \r
445     public void updateSpdProtocolDecl(int i, String name, String cName, String guid, String hlp, String archList, \r
446                                       String modTypeList){\r
447         XmlObject o = psaRoot.getProtocolDeclarations();\r
448         if (o == null){\r
449             return;\r
450         }\r
451         \r
452         XmlCursor cursor = o.newCursor();\r
453         if (cursor.toFirstChild()) {\r
454             for (int j = 0; j < i; ++j) {\r
455                 cursor.toNextSibling();\r
456             }\r
457             ProtocolDeclarationsDocument.ProtocolDeclarations.Entry e = (ProtocolDeclarationsDocument.ProtocolDeclarations.Entry)cursor.getObject();\r
458             e.setName(name);\r
459             e.setCName(cName);\r
460             e.setGuidValue(guid);\r
461             e.setHelpText(hlp);\r
462             if (stringToList(archList) != null){\r
463                 e.setSupArchList(stringToList(archList));\r
464             }\r
465             else{\r
466                 e.setSupArchList(null);\r
467             }\r
468             if (stringToList(modTypeList) != null) {\r
469                 e.setSupModuleList(stringToList(modTypeList));\r
470             }\r
471             else{\r
472                 e.setSupModuleList(null);\r
473             }\r
474         }\r
475         cursor.dispose();\r
476     }\r
477     \r
478     public void updateSpdPkgHdr(int i, String pkgName, String hdrName){\r
479         XmlObject o = psaRoot.getPackageHeaders();\r
480         if (o == null){\r
481             return;\r
482         }\r
483         \r
484         XmlCursor cursor = o.newCursor();\r
485         if (cursor.toFirstChild()) {\r
486             for (int j = 0; j < i; ++j) {\r
487                 cursor.toNextSibling();\r
488             }\r
489             \r
490             PackageHeadersDocument.PackageHeaders.IncludePkgHeader iph = (PackageHeadersDocument.PackageHeaders.IncludePkgHeader)cursor.getObject();\r
491             iph.setModuleType(ModuleTypeDef.Enum.forString(pkgName));\r
492             iph.setStringValue(hdrName);\r
493         }\r
494         cursor.dispose();\r
495     }\r
496     \r
497     public void updateSpdPcdDefinition(int i, String cName, String token, String dataType, String pcdItemTypes, \r
498                                        String spaceGuid, String defaultString, String help, String archList, String modTypeList){\r
499         XmlObject o = psaRoot.getPcdDeclarations();\r
500         if (o == null)\r
501             return;\r
502         XmlCursor cursor = o.newCursor();\r
503         if (cursor.toFirstChild()) {\r
504             for (int j = 0; j < i; ++j) {\r
505                 cursor.toNextSibling();\r
506             }\r
507             PcdDeclarationsDocument.PcdDeclarations.PcdEntry e = (PcdDeclarationsDocument.PcdDeclarations.PcdEntry)cursor.getObject();\r
508             e.setCName(cName);\r
509             e.setToken(token);\r
510             e.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
511             if (pcdItemTypes != null && pcdItemTypes.length() > 0) {\r
512                 String usage[] = pcdItemTypes.split("( )+");\r
513                 List<String> l = new ArrayList<String>();\r
514                 for (int k = 0; k < usage.length; ++k) {\r
515                     l.add(usage[k]);  \r
516                 }\r
517                 e.setValidUsage(l);\r
518             }\r
519             \r
520             e.setTokenSpaceGuidCName(spaceGuid);\r
521             e.setDefaultValue(defaultString);\r
522             e.setHelpText(help);\r
523             if (archList != null && archList.length() > 0){\r
524                 e.setSupArchList(stringToList(archList));\r
525             }\r
526             if (modTypeList != null && modTypeList.length() > 0){\r
527                 e.setSupModuleList(stringToList(modTypeList));\r
528             }\r
529         } \r
530         cursor.dispose();\r
531     }\r
532     /**\r
533      Get spd file header contents into String array\r
534      \r
535      @param s Caller allocated String array\r
536     **/\r
537     public void getSpdHdrDetails(String[] s) {\r
538         if (getSpdHdr() == null) {\r
539             spdHdr = psaRoot.addNewSpdHeader();\r
540         }\r
541         s[0] = getSpdHdrPkgName();\r
542         s[1] = getSpdHdr().getGuidValue();\r
543         s[2] = getSpdHdrVer();\r
544 //        s[3] = getSpdHdr().getAbstract();\r
545         s[4] = getSpdHdr().getDescription();\r
546         s[5] = getSpdHdr().getCopyright();\r
547         s[6] = getSpdHdrLicense();\r
548         \r
549     }\r
550 \r
551     /**\r
552      Get the number of library class declarations from the size of List\r
553      \r
554      @return int\r
555     **/\r
556     public int getSpdLibClassDeclarationCount() {\r
557         if (psaRoot.getLibraryClassDeclarations() == null\r
558             || psaRoot.getLibraryClassDeclarations().getLibraryClassList() == null) {\r
559             return 0;\r
560         }\r
561         return psaRoot.getLibraryClassDeclarations().getLibraryClassList().size();\r
562     }\r
563 \r
564     /**\r
565      Get available library class declaration into String array\r
566      @param libClass Caller allocated two-dimentional String array\r
567     **/\r
568     public void getSpdLibClassDeclarations(String[][] libClass) {\r
569         if (psaRoot.getLibraryClassDeclarations() == null){\r
570             return;\r
571         }\r
572         \r
573         List<LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass> l = psaRoot.getLibraryClassDeclarations().getLibraryClassList();\r
574         int i = 0;\r
575         ListIterator li = l.listIterator();\r
576         while (li.hasNext()) {\r
577             LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass lc = (LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass) li.next();\r
578             if (lc != null) {\r
579                 libClass[i][0] = lc.getName();\r
580                 libClass[i][1] = lc.getIncludeHeader();\r
581                 libClass[i][2] = lc.getHelpText();\r
582                 libClass[i][3] = lc.getRecommendedInstanceGuid();\r
583                 libClass[i][4] = lc.getRecommendedInstanceVersion();\r
584                 if (lc.getSupArchList() != null) {\r
585                     libClass[i][5] = listToString(lc.getSupArchList());\r
586                 }\r
587                 if (lc.getSupModuleList() != null) {\r
588                     libClass[i][6] = listToString(lc.getSupModuleList());\r
589                 }\r
590                 \r
591             }\r
592             \r
593             i++;\r
594         }\r
595 \r
596     }\r
597     \r
598     /**\r
599     Get the number of Msa files from the size of List\r
600     \r
601     @return int\r
602    **/\r
603     public int getSpdMsaFileCount() {\r
604         if (psaRoot.getMsaFiles() == null || psaRoot.getMsaFiles().getFilenameList() == null) {\r
605             return 0;\r
606         }\r
607         return psaRoot.getMsaFiles().getFilenameList().size();\r
608     }\r
609     \r
610     /**\r
611     Get available Msa file into String array\r
612     \r
613     @param msaFile Caller allocated two-dimentional String array\r
614    **/\r
615     public void getSpdMsaFiles(String[][] msaFile) {\r
616         if (psaRoot.getMsaFiles() == null) {\r
617             return;\r
618         }\r
619         List<String> l = psaRoot.getMsaFiles().getFilenameList();\r
620         int i = 0;\r
621         ListIterator li = l.listIterator();\r
622         while (li.hasNext()) {\r
623             msaFile[i][0] = (String)li.next();\r
624 \r
625             i++;\r
626         }\r
627     }\r
628 \r
629     /**\r
630     Get the number of include header files in PackageHeaders from the size of List\r
631     \r
632     @return int\r
633    **/\r
634     public int getSpdPackageHeaderCount() {\r
635         if (psaRoot.getPackageHeaders() == null || psaRoot.getPackageHeaders().getIncludePkgHeaderList() == null) {\r
636             return 0;\r
637         }\r
638         return psaRoot.getPackageHeaders().getIncludePkgHeaderList().size();\r
639     }\r
640 \r
641     /**\r
642     Get available package header contents into String array\r
643     \r
644     @param pkgHeader Caller allocated two-dimentional String array\r
645    **/\r
646     public void getSpdPackageHeaders(String[][] pkgHeader) {\r
647         if (psaRoot.getPackageHeaders() == null) {\r
648             return;\r
649         }\r
650         \r
651         List<PackageHeadersDocument.PackageHeaders.IncludePkgHeader> l = psaRoot.getPackageHeaders().getIncludePkgHeaderList();\r
652         int i = 0;\r
653         ListIterator li = l.listIterator();\r
654         while (li.hasNext()) {\r
655             PackageHeadersDocument.PackageHeaders.IncludePkgHeader ih = (PackageHeadersDocument.PackageHeaders.IncludePkgHeader) li.next();\r
656             if (ih.getModuleType() != null) {\r
657                 pkgHeader[i][0] = ih.getModuleType().toString();\r
658             }\r
659 \r
660             pkgHeader[i][1] = ih.getStringValue();\r
661             i++;\r
662         }\r
663     }\r
664 \r
665     /**\r
666     Get the number of GUID declarations from the size of List\r
667     \r
668     @return int\r
669    **/\r
670     public int getSpdGuidDeclarationCount() {\r
671         if (psaRoot.getGuidDeclarations() == null || psaRoot.getGuidDeclarations().getEntryList() == null) {\r
672             return 0;\r
673         }\r
674         return psaRoot.getGuidDeclarations().getEntryList().size();\r
675     }\r
676 \r
677     /**\r
678     Get available Guid declaration contents into String array\r
679     \r
680     @param guid Caller allocated two-dimentional String array\r
681    **/\r
682     public void getSpdGuidDeclarations(String[][] guid) {\r
683         if (psaRoot.getGuidDeclarations() == null) {\r
684             return;\r
685         }\r
686         \r
687         List<GuidDeclarationsDocument.GuidDeclarations.Entry> l = psaRoot.getGuidDeclarations().getEntryList();\r
688         int i = 0;\r
689         ListIterator li = l.listIterator();\r
690         while (li.hasNext()) {\r
691             GuidDeclarationsDocument.GuidDeclarations.Entry e = (GuidDeclarationsDocument.GuidDeclarations.Entry) li\r
692                                                                                                                     .next();\r
693             guid[i][0] = e.getName();\r
694             guid[i][1] = e.getCName();\r
695             if (e.getGuidValue() != null) {\r
696                 guid[i][2] = e.getGuidValue();\r
697             }\r
698             guid[i][3] = e.getHelpText();\r
699             guid[i][4] = listToString(e.getSupArchList());\r
700             guid[i][5] = listToString(e.getSupModuleList());\r
701             guid[i][6] = listToString(e.getGuidTypeList());\r
702             i++;\r
703         }\r
704     }\r
705 \r
706     /**\r
707     Get the number of protocol declarations from the size of List\r
708     \r
709     @return int\r
710    **/\r
711     public int getSpdProtocolDeclarationCount() {\r
712         if (psaRoot.getProtocolDeclarations() == null || psaRoot.getProtocolDeclarations().getEntryList() == null) {\r
713             return 0;\r
714         }\r
715         return psaRoot.getProtocolDeclarations().getEntryList().size();\r
716     }\r
717 \r
718     /**\r
719     Get available protocol declaration contents into String array\r
720     \r
721     @param protocol Caller allocated two-dimentional String array\r
722    **/\r
723     public void getSpdProtocolDeclarations(String[][] protocol) {\r
724         if (psaRoot.getProtocolDeclarations() == null) {\r
725             return;\r
726         }\r
727         \r
728         List<ProtocolDeclarationsDocument.ProtocolDeclarations.Entry> l = psaRoot.getProtocolDeclarations()\r
729                                                                                  .getEntryList();\r
730         int i = 0;\r
731         ListIterator li = l.listIterator();\r
732         while (li.hasNext()) {\r
733             ProtocolDeclarationsDocument.ProtocolDeclarations.Entry e = (ProtocolDeclarationsDocument.ProtocolDeclarations.Entry) li\r
734                                                                                                                                     .next();\r
735             protocol[i][0] = e.getName();\r
736             protocol[i][1] = e.getCName();\r
737             if (e.getGuidValue() != null) {\r
738                 protocol[i][2] = e.getGuidValue();\r
739             }\r
740             protocol[i][3] = e.getHelpText();\r
741             protocol[i][4] = listToString(e.getSupArchList());\r
742             protocol[i][5] = listToString(e.getSupModuleList());\r
743             i++;\r
744         }\r
745     }\r
746 \r
747     /**\r
748     Get the number of Ppi declarations from the size of List\r
749     \r
750     @return int\r
751    **/\r
752     public int getSpdPpiDeclarationCount() {\r
753         if (psaRoot.getPpiDeclarations() == null || psaRoot.getPpiDeclarations().getEntryList() == null) {\r
754             return 0;\r
755         }\r
756         return psaRoot.getPpiDeclarations().getEntryList().size();\r
757     }\r
758 \r
759     /**\r
760     Get available Ppi declaration contents into String array\r
761     \r
762     @param ppi Caller allocated two-dimentional String array\r
763    **/\r
764     public void getSpdPpiDeclarations(String[][] ppi) {\r
765         if (psaRoot.getPpiDeclarations() == null) {\r
766             return;\r
767         }\r
768         \r
769         List<PpiDeclarationsDocument.PpiDeclarations.Entry> l = psaRoot.getPpiDeclarations().getEntryList();\r
770         int i = 0;\r
771         ListIterator li = l.listIterator();\r
772         while (li.hasNext()) {\r
773             PpiDeclarationsDocument.PpiDeclarations.Entry e = (PpiDeclarationsDocument.PpiDeclarations.Entry) li.next();\r
774             ppi[i][0] = e.getName();\r
775             ppi[i][1] = e.getCName();\r
776             if (e.getGuidValue() != null) {\r
777                 ppi[i][2] = e.getGuidValue();\r
778             }\r
779             ppi[i][3] = e.getHelpText();\r
780             ppi[i][4] = listToString(e.getSupArchList());\r
781             ppi[i][5] = listToString(e.getSupModuleList());\r
782 \r
783             i++;\r
784         }\r
785     }\r
786 \r
787     /**\r
788     Get the number of Pcd definitions from the size of List\r
789     \r
790     @return int\r
791    **/\r
792     public int getSpdPcdDefinitionCount() {\r
793         if (psaRoot.getPcdDeclarations() == null || psaRoot.getPcdDeclarations().getPcdEntryList() == null) {\r
794             return 0;\r
795         }\r
796         return psaRoot.getPcdDeclarations().getPcdEntryList().size();\r
797     }\r
798 \r
799     /**\r
800     Get available Pcd definition contents into String array\r
801     \r
802     @param pcd Caller allocated two-dimentional String array\r
803    **/\r
804     public void getSpdPcdDefinitions(String[][] pcd, String pcdUsage[][]) {\r
805         if (psaRoot.getPcdDeclarations() == null) {\r
806             return;\r
807         }\r
808         \r
809         List<PcdDeclarationsDocument.PcdDeclarations.PcdEntry> l = psaRoot.getPcdDeclarations().getPcdEntryList();\r
810         int i = 0;\r
811         while (i < l.size()) {\r
812             PcdDeclarationsDocument.PcdDeclarations.PcdEntry e = (PcdDeclarationsDocument.PcdDeclarations.PcdEntry)l.get(i);\r
813             pcd[i][0] = e.getCName();\r
814             pcd[i][1] = e.getToken() + "";           \r
815             pcd[i][2] = e.getTokenSpaceGuidCName();\r
816             if (e.getDatumType() != null) {\r
817                 pcd[i][3] = e.getDatumType().toString();\r
818             }\r
819             pcd[i][4] = e.getDefaultValue()+"";\r
820             pcd[i][5] = e.getHelpText();\r
821             String archList = listToString(e.getSupArchList());\r
822             if (archList != null) {\r
823                 pcd[i][6] = archList;\r
824             }\r
825             String modTypeList = listToString(e.getSupModuleList());\r
826             if (modTypeList != null) {\r
827                 pcd[i][7] = modTypeList;\r
828             }\r
829             \r
830             int j = 0;\r
831             while (j < e.getValidUsage().size() && j < 5) {\r
832                 pcdUsage[i][j] = (String)e.getValidUsage().get(j);\r
833                 ++j;\r
834             }\r
835             i++;\r
836         }\r
837     }\r
838 \r
839     /**\r
840      Save the processed xml contents to file\r
841      \r
842      @param spdFile The file to save xml contents\r
843      @throws IOException Exceptions during file operation\r
844     **/\r
845     public void saveAs(File spdFile) throws IOException {\r
846 \r
847         XmlOptions options = new XmlOptions();\r
848 \r
849         options.setCharacterEncoding("UTF-8");\r
850         options.setSavePrettyPrint();\r
851         options.setSavePrettyPrintIndent(2);\r
852         try {\r
853             psad.save(spdFile, options);\r
854         } catch (IOException e) {\r
855             e.printStackTrace();\r
856         }\r
857 \r
858     }\r
859 \r
860     /**\r
861      Generate SpdHeader contents using parameters passed in.\r
862      \r
863      @param pkgName PackageName \r
864      @param pkgGuid Guid\r
865      @param pkgVer Version\r
866      @param pkgAbs Abstract\r
867      @param pkgDes Description\r
868      @param pkgCpRight Copyright\r
869      @param pkgLicense License\r
870      @param pkgCreateDate Created\r
871      @param pkgUpdateDate Updated\r
872      @param pkgURL URL\r
873      @param pkgType PackageType\r
874      @param pkgRdOnly ReadOnly\r
875      @param pkgRePkg RePackage\r
876      @param pkgSpec Reserved\r
877      @param pkgOutDir Reserved\r
878     **/\r
879     public void genSpdHeader(String pkgName, String pkgGuid, String pkgVer, String pkgAbs, String pkgDes,\r
880                              String pkgCpRight, String pkgLicense, String pkgCreateDate, String pkgUpdateDate,\r
881                              String pkgURL, String pkgType, String pkgRdOnly, String pkgRePkg, String pkgSpec,\r
882                              String pkgOutDir) {\r
883         if (getSpdHdr() == null) {\r
884             spdHdr = psaRoot.addNewSpdHeader();\r
885         }\r
886 \r
887         setSpdHdrPkgName(pkgName);\r
888         setSpdHdrGuidValue(pkgGuid);\r
889         setSpdHdrVer(pkgVer);\r
890         setSpdHdrAbs(pkgAbs);\r
891         setSpdHdrDescription(pkgDes);\r
892         setSpdHdrCopyright(pkgCpRight);\r
893         setSpdHdrLicense(pkgLicense);\r
894       \r
895 \r
896         setSpdHdrSpec(pkgSpec);\r
897     }\r
898 \r
899     /**\r
900      Generate library class declaration element using parameters passed in\r
901      \r
902      @param libClassBaseName LibraryClass element value\r
903      @param libClassUsage Reserved\r
904      @param incHdrFileName IncludeHeader element value\r
905      @param incHdrAttribGuid Reserved\r
906      @param incHdrAttribArch Reserved\r
907      @param incHdrAttribPath Reserved\r
908      @param incHdrAttribClass Reserved\r
909      @param incHdrAttribVer Reserved\r
910      @param incHdrAttribOverrideID Reserved\r
911      @param incHdrAttribModuleType Reserved\r
912     **/\r
913     public void genSpdLibClassDeclarations(String libClassBaseName, String instanceUsage, String incHdrFileName,\r
914                                            String help, String incHdrAttribArch, String incHdrAttribPath,\r
915                                            String incHdrAttribClass, String incHdrAttribVer,\r
916                                            String incHdrAttribOverrideID, String incHdrAttribModuleType) {\r
917         if (getSpdLibClassDeclarations() == null) {\r
918             spdLibClassDeclarations = psaRoot.addNewLibraryClassDeclarations();\r
919         }\r
920         //\r
921         // add contents under LibraryClassDeclarations tag \r
922         //\r
923         setSpdLibClassDeclaration(libClassBaseName, instanceUsage, incHdrFileName, help, incHdrAttribArch,\r
924                                   incHdrAttribPath, incHdrAttribClass, incHdrAttribVer, incHdrAttribOverrideID,\r
925                                   incHdrAttribModuleType, spdLibClassDeclarations);\r
926     }\r
927 \r
928     /**\r
929      Set library class declaration contents under parent tag\r
930      \r
931      @param clsName LibraryClass element value\r
932      @param clsUsage Reserved\r
933      @param hdrFile IncludeHeader element value\r
934      @param hdrAttribGuid Reserved\r
935      @param hdrAttribArch Reserved\r
936      @param hdrAttribPath Reserved\r
937      @param hdrAttribClass Reserved\r
938      @param hdrAttribVer Reserved\r
939      @param hdrAttribOverID Reserved\r
940      @param hdrAttribModType Reserved\r
941      @param parent The tag under which library class declaration goes to\r
942     **/\r
943     public void setSpdLibClassDeclaration(String clsName, String clsUsage, String hdrFile, String help,\r
944                                           String hdrAttribArch, String hdrAttribPath, String hdrAttribClass,\r
945                                           String instanceVer, String hdrAttribOverID, String hdrAttribModType,\r
946                                           XmlObject parent) {\r
947 \r
948         setSpdLibraryClass(clsName, hdrFile, help, clsUsage, instanceVer, hdrAttribArch, hdrAttribModType, parent);\r
949 \r
950     }\r
951 \r
952     /**\r
953      Set the contents of LibraryClass under parent element\r
954      \r
955      @param clsName LibraryClass element value \r
956      @param clsUsage Reserved\r
957      @param parent The tag under which library class declaration goes to\r
958     **/\r
959     public void setSpdLibraryClass(String clsName, String clsIncludeFile, String help, String clsUsage, String instanceVer, String hdrAttribArch, String hdrAttribModType, XmlObject parent) {\r
960         LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass lc = ((LibraryClassDeclarationsDocument.LibraryClassDeclarations) parent).addNewLibraryClass();\r
961         lc.setName(clsName);\r
962         lc.setIncludeHeader(clsIncludeFile);\r
963         lc.setHelpText(help);\r
964         lc.setRecommendedInstanceGuid(clsUsage);\r
965         lc.setRecommendedInstanceVersion(instanceVer);\r
966         if (hdrAttribArch != null) {\r
967             lc.setSupArchList(stringToList(hdrAttribArch));\r
968         }\r
969         if (hdrAttribModType != null) {\r
970             lc.setSupModuleList(stringToList(hdrAttribModType));\r
971         }\r
972         \r
973     }\r
974 \r
975     /**\r
976      Set contents of IncludeHeader under parent element\r
977      \r
978      @param modType Reserved\r
979      @param hdrFile IncludeHeader element value\r
980      @param hdrAttribGuid Reserved\r
981      @param hdrAttribArch Reserved\r
982      @param hdrAttribPath Reserved\r
983      @param hdrAttribClass Reserved\r
984      @param hdrAttribVer Reserved\r
985      @param hdrAttribOverID Reserved\r
986      @param parent The tag under which library class declaration goes to\r
987     **/\r
988     public void setSpdIncludeHeader(String modType, String hdrFile, String hdrAttribGuid, String hdrAttribArch,\r
989                                     String hdrAttribPath, String hdrAttribClass, String hdrAttribVer,\r
990                                     String hdrAttribOverID, XmlObject parent) {\r
991         \r
992         if (parent instanceof LibraryClassDeclarationsDocument.LibraryClassDeclarations) {\r
993         } else if (parent instanceof PackageHeadersDocument.PackageHeaders) {\r
994             PackageHeadersDocument.PackageHeaders.IncludePkgHeader ih = null;\r
995             ih = ((PackageHeadersDocument.PackageHeaders) parent).addNewIncludePkgHeader();\r
996             ih.setStringValue(hdrFile);\r
997             ih.setModuleType(ModuleTypeDef.Enum.forString(modType));\r
998         } else {\r
999             return;\r
1000         }\r
1001 \r
1002         if (hdrAttribGuid != null) {\r
1003         }\r
1004         if (hdrAttribPath != null) {\r
1005         }\r
1006         if (hdrAttribClass != null) {\r
1007         }\r
1008         if (hdrAttribVer != null) {\r
1009         }\r
1010         if (hdrAttribOverID != null) {\r
1011         }\r
1012 \r
1013     }\r
1014 \r
1015     /**\r
1016      Generate MsaFile element.\r
1017      \r
1018      @param msaFileName MsaFile element value\r
1019      @param archType Reserved\r
1020     **/\r
1021     public void genSpdMsaFiles(String msaFileName, String moduleName, String ver, String guid) {\r
1022         if (getSpdMsaFiles() == null) {\r
1023             spdMsaFiles = psaRoot.addNewMsaFiles();\r
1024         }\r
1025         setSpdMsaFile(msaFileName, moduleName, ver, guid, spdMsaFiles);\r
1026         \r
1027     }\r
1028 \r
1029     /**\r
1030      Set MsaFile contents under parent element.\r
1031      \r
1032      @param msaFileName MsaFile element value\r
1033      @param parent Element under which MsaFile goes to\r
1034     **/\r
1035     public void setSpdMsaFile(String msaFileName, String moduleName, String ver, String guid, XmlObject parent) {\r
1036         MsaFilesDocument.MsaFiles f = (MsaFilesDocument.MsaFiles)parent;\r
1037         f.addNewFilename().setStringValue(msaFileName);\r
1038 //        f.setFilename(msaFileName);\r
1039 //        f.setModuleName(moduleName);\r
1040 //        f.setModuleVersion(ver);\r
1041 //        f.setModuleGuid(guid);\r
1042     }\r
1043 \r
1044     /**\r
1045      Generate PackageHeader element using parameters passed in.\r
1046      \r
1047      @param ModHdrModType ModuleType attribute of IncludeHeader element\r
1048      @param hdrFile IncludeHeader element value\r
1049      @param hdrAttribGuid Reserved\r
1050      @param hdrAttribArch Reserved\r
1051      @param hdrAttribPath Reserved\r
1052      @param hdrAttribClass Reserved\r
1053      @param hdrAttribVer Reserved\r
1054      @param hdrAttribOverID Reserved\r
1055     **/\r
1056     public void genSpdModuleHeaders(String ModHdrModType, String hdrFile, String hdrAttribGuid, String hdrAttribArch,\r
1057                                     String hdrAttribPath, String hdrAttribClass, String hdrAttribVer,\r
1058                                     String hdrAttribOverID) {\r
1059         if (getSpdModHdrs() == null) {\r
1060             spdModHdrs = psaRoot.addNewPackageHeaders();\r
1061         }\r
1062 \r
1063         //\r
1064         // add IncludeHeader under PackageHeaders element\r
1065         //\r
1066         setSpdIncludeHeader(ModHdrModType, hdrFile, hdrAttribGuid, hdrAttribArch, hdrAttribPath, hdrAttribClass,\r
1067                             hdrAttribVer, hdrAttribOverID, spdModHdrs);\r
1068     }\r
1069 \r
1070     /**\r
1071      Generate GUID declaration element using parameters passed in.\r
1072      \r
1073      @param guidDeclEntryName Name attribute of Entry element\r
1074      @param guidDeclCName CName element value\r
1075      @param guidDeclGuid Guid element value\r
1076      @param guidDeclFeatureFlag Reserved\r
1077     **/\r
1078     public void genSpdGuidDeclarations(String guidDeclEntryName, String guidDeclCName, String guidDeclGuid,\r
1079                                        String guidDeclHelp, Vector<String> archList, Vector<String> modTypeList,\r
1080                                        Vector<String> guidTypeList) {\r
1081         if (getSpdGuidDeclarations() == null) {\r
1082             spdGuidDeclarations = psaRoot.addNewGuidDeclarations();\r
1083         }\r
1084 \r
1085         setSpdEntry(guidDeclEntryName, guidDeclCName, guidDeclGuid, guidDeclHelp, archList, modTypeList, guidTypeList, spdGuidDeclarations);\r
1086     }\r
1087 \r
1088     /**\r
1089     Generate protocol declaration element using parameters passed in.\r
1090     \r
1091     @param protocolDeclEntryName Name attribute of Entry element\r
1092     @param protocolDeclCName CName element value\r
1093     @param protocolDeclGuid Guid element value\r
1094     @param protocolDeclFeatureFlag Reserved\r
1095    **/\r
1096     public void genSpdProtocolDeclarations(String protocolDeclEntryName, String protocolDeclCName,\r
1097                                            String protocolDeclGuid, String protocolDeclFeatureFlag,\r
1098                                            Vector<String> archList, Vector<String> modTypeList) {\r
1099         if (getSpdProtocolDeclarations() == null) {\r
1100             spdProtocolDeclarations = psaRoot.addNewProtocolDeclarations();\r
1101         }\r
1102 \r
1103         setSpdEntry(protocolDeclEntryName, protocolDeclCName, protocolDeclGuid, protocolDeclFeatureFlag,\r
1104                     archList, modTypeList, null, spdProtocolDeclarations);\r
1105     }\r
1106 \r
1107     /**\r
1108     Generate PPI declaration element using parameters passed in.\r
1109     \r
1110     @param ppiDeclEntryName Name attribute of Entry element\r
1111     @param ppiDeclCName CName element value\r
1112     @param ppiDeclGuid Guid element value\r
1113     @param ppiDeclFeatureFlag Reserved\r
1114    **/\r
1115     public void genSpdPpiDeclarations(String ppiDeclEntryName, String ppiDeclCName, String ppiDeclGuid,\r
1116                                       String ppiDeclFeatureFlag, Vector<String> archList, Vector<String> modTypeList) {\r
1117         if (getSpdPpiDeclarations() == null) {\r
1118             spdPpiDeclarations = psaRoot.addNewPpiDeclarations();\r
1119         }\r
1120 \r
1121         setSpdEntry(ppiDeclEntryName, ppiDeclCName, ppiDeclGuid, ppiDeclFeatureFlag, archList, modTypeList, null, spdPpiDeclarations);\r
1122     }\r
1123 \r
1124     /**\r
1125      Set Entry contents using parameters passed in\r
1126      \r
1127      @param entryName Name attribute of Entry element\r
1128      @param cName CName element value\r
1129      @param guid Guid element value\r
1130      @param featureFlag Reserved\r
1131      @param parent The tag under which Entry element goes to\r
1132     **/\r
1133     public void setSpdEntry(String entryName, String cName, String guid, String help, \r
1134                             Vector<String> archList, Vector<String> modTypeList,\r
1135                             Vector<String> guidTypeList, XmlObject parent) {\r
1136 \r
1137         if (parent instanceof GuidDeclarationsDocument.GuidDeclarations) {\r
1138             GuidDeclarationsDocument.GuidDeclarations.Entry e = ((GuidDeclarations) parent).addNewEntry();\r
1139             e.setName(entryName);\r
1140             e.setCName(cName);\r
1141             e.setGuidValue(guid);\r
1142             e.setHelpText(help);\r
1143             e.setGuidTypeList(guidTypeList);\r
1144             e.setSupArchList(archList);\r
1145             e.setSupModuleList(modTypeList);\r
1146 //            if (guidTypeList != null && guidTypeList.size() > 0) {\r
1147 //                e.setGuidTypeList(new ArrayList<String>(guidTypeList));\r
1148 //            }\r
1149 //            if (archList != null && archList.size() > 0){\r
1150 //                e.setSupArchList(new ArrayList<String>(archList));\r
1151 //            }\r
1152 //            if (modTypeList != null && modTypeList.size() > 0) {\r
1153 //                e.setSupModuleList(new ArrayList<String>(modTypeList));\r
1154 //            }\r
1155             return;\r
1156         }\r
1157         if (parent instanceof ProtocolDeclarationsDocument.ProtocolDeclarations) {\r
1158             ProtocolDeclarationsDocument.ProtocolDeclarations.Entry pe = ((ProtocolDeclarationsDocument.ProtocolDeclarations) parent)\r
1159                                                                                                                                      .addNewEntry();\r
1160             pe.setName(entryName);\r
1161             pe.setCName(cName);\r
1162             pe.setGuidValue(guid);\r
1163             pe.setHelpText(help);\r
1164             pe.setSupArchList(archList);\r
1165             pe.setSupModuleList(modTypeList);\r
1166 //            if (archList != null && archList.size() > 0){\r
1167 //                pe.setSupArchList(new ArrayList<String>(archList));\r
1168 //            }\r
1169 //            if (modTypeList != null && modTypeList.size() > 0) {\r
1170 //                pe.setSupModuleList(new ArrayList<String>(modTypeList));\r
1171 //            }\r
1172             return;\r
1173         }\r
1174         if (parent instanceof PpiDeclarationsDocument.PpiDeclarations) {\r
1175             PpiDeclarationsDocument.PpiDeclarations.Entry ppe = ((PpiDeclarationsDocument.PpiDeclarations) parent)\r
1176                                                                                                                   .addNewEntry();\r
1177             ppe.setName(entryName);\r
1178             ppe.setCName(cName);\r
1179             ppe.setGuidValue(guid);\r
1180             ppe.setHelpText(help);\r
1181             ppe.setSupArchList(archList);\r
1182             ppe.setSupModuleList(modTypeList);\r
1183 //            if (archList != null && archList.size() > 0){\r
1184 //                ppe.setSupArchList(new ArrayList<String>(archList));\r
1185 //            }\r
1186 //            if (archList != null && modTypeList.size() > 0) {\r
1187 //                ppe.setSupModuleList(new ArrayList<String>(modTypeList));\r
1188 //            }\r
1189             return;\r
1190         }\r
1191 \r
1192         return;\r
1193 \r
1194     }\r
1195 \r
1196     /**\r
1197      Generate Pcd definition using parameters passed in\r
1198      \r
1199      @param pcdItemTypes ItemType attribute of PcdEntry element\r
1200      @param cName C_Name element value\r
1201      @param token Token element value\r
1202      @param dataType DatumType element value\r
1203      @param skuEnable Reserved\r
1204      @param sku Reserved\r
1205      @param maxSku Reserved\r
1206      @param hiiEnable Reserved\r
1207      @param varGuid Reserved\r
1208      @param varName Reserved\r
1209      @param defaultString DefaultString element value\r
1210     **/\r
1211     public void genSpdPcdDefinitions(String cName, String token, String dataType, String pcdItemTypes, \r
1212                                      String spaceGuid, String defaultString, String help, String archList,\r
1213                                      String modTypeList) {\r
1214         if (getSpdPcdDefinitions() == null) {\r
1215             spdPcdDefinitions = psaRoot.addNewPcdDeclarations();\r
1216         }\r
1217 \r
1218         setSpdPcdEntry(pcdItemTypes, cName, token, dataType, spaceGuid, help,\r
1219                        defaultString, archList, modTypeList, spdPcdDefinitions);\r
1220     }\r
1221 \r
1222     /**\r
1223      Set Pcd entry contents under parent tag\r
1224      \r
1225      @param pcdItemTypes ItemType attribute of PcdEntry element\r
1226      @param cName C_Name element value\r
1227      @param token Token element value\r
1228      @param dataType DatumType element value\r
1229      @param spaceGuid Reserved\r
1230      @param help Reserved\r
1231      @param defaultString DefaultString element value\r
1232      @param parent Tag under which PcdEntry goes to\r
1233     **/\r
1234     public void setSpdPcdEntry(String pcdItemTypes, String cName, String token, String dataType, String spaceGuid, String help,\r
1235                                String defaultString, String archList, String modTypeList, XmlObject parent) {\r
1236 \r
1237         PcdDeclarationsDocument.PcdDeclarations.PcdEntry pe = ((PcdDeclarationsDocument.PcdDeclarations) parent).addNewPcdEntry();\r
1238         \r
1239         //ToDo: maybe multiple types in, need parse pcdItemTypes.\r
1240         String usage[] = pcdItemTypes.split("( )+");\r
1241         List<String> l = new ArrayList<String>();\r
1242         for (int i = 0; i < usage.length; ++i) {\r
1243             l.add(usage[i]);  \r
1244         }\r
1245         pe.setValidUsage(l);\r
1246         pe.setCName(cName);\r
1247         pe.setToken(token);\r
1248         pe.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
1249         pe.setDefaultValue(defaultString);\r
1250         pe.setTokenSpaceGuidCName(spaceGuid);\r
1251         pe.setHelpText(help);\r
1252         if (archList != null){\r
1253             pe.setSupArchList(stringToList(archList));\r
1254         }\r
1255         if (modTypeList != null){\r
1256             pe.setSupModuleList(stringToList(modTypeList));\r
1257         }\r
1258     }\r
1259 \r
1260     /**\r
1261      Get PpiDeclarations element\r
1262      \r
1263      @return PpiDeclarationsDocument.PpiDeclarations\r
1264     **/\r
1265     public PpiDeclarationsDocument.PpiDeclarations getSpdPpiDeclarations() {\r
1266         if (spdPpiDeclarations == null) {\r
1267             spdPpiDeclarations = psaRoot.getPpiDeclarations();\r
1268         }\r
1269         return spdPpiDeclarations;\r
1270     }\r
1271 \r
1272     /**\r
1273     Get ProtocolDeclarations element\r
1274     \r
1275     @return ProtocolDeclarationsDocument.ProtocolDeclarations\r
1276     **/\r
1277     public ProtocolDeclarationsDocument.ProtocolDeclarations getSpdProtocolDeclarations() {\r
1278         if (spdProtocolDeclarations == null) {\r
1279             spdProtocolDeclarations = psaRoot.getProtocolDeclarations();\r
1280         }\r
1281         return spdProtocolDeclarations;\r
1282     }\r
1283 \r
1284     /**\r
1285     Get GuidDeclarations element\r
1286     \r
1287     @return GuidDeclarationsDocument.GuidDeclarations\r
1288     **/\r
1289     public GuidDeclarationsDocument.GuidDeclarations getSpdGuidDeclarations() {\r
1290         if (spdGuidDeclarations == null) {\r
1291             spdGuidDeclarations = psaRoot.getGuidDeclarations();\r
1292         }\r
1293         return spdGuidDeclarations;\r
1294     }\r
1295 \r
1296     /**\r
1297      Get PcdDefinitions element\r
1298      \r
1299      @return PcdDefinitionsDocument.PcdDefinitions\r
1300     **/\r
1301     public PcdDeclarationsDocument.PcdDeclarations getSpdPcdDefinitions() {\r
1302         if (spdPcdDefinitions == null) {\r
1303             spdPcdDefinitions = psaRoot.getPcdDeclarations();\r
1304         }\r
1305         return spdPcdDefinitions;\r
1306     }\r
1307 \r
1308     /**\r
1309      Get PackageHeaders element\r
1310      \r
1311      @return PackageHeadersDocument.PackageHeaders\r
1312     **/\r
1313     public PackageHeadersDocument.PackageHeaders getSpdModHdrs() {\r
1314         if (spdModHdrs == null) {\r
1315             spdModHdrs = psaRoot.getPackageHeaders();\r
1316         }\r
1317         return spdModHdrs;\r
1318     }\r
1319 \r
1320     /**\r
1321      Get MsaFiles element\r
1322      \r
1323      @return MsaFilesDocument.MsaFiles\r
1324     **/\r
1325     public MsaFilesDocument.MsaFiles getSpdMsaFiles() {\r
1326         if (spdMsaFiles == null) {\r
1327             spdMsaFiles = psaRoot.getMsaFiles();\r
1328         }\r
1329         return spdMsaFiles;\r
1330     }\r
1331 \r
1332     /**\r
1333      Get LibraryClassDeclarations element\r
1334      \r
1335      @return LibraryClassDeclarationsDocument.LibraryClassDeclarations\r
1336     **/\r
1337     public LibraryClassDeclarationsDocument.LibraryClassDeclarations getSpdLibClassDeclarations() {\r
1338         if (spdLibClassDeclarations == null) {\r
1339             spdLibClassDeclarations = psaRoot.getLibraryClassDeclarations();\r
1340         }\r
1341         return spdLibClassDeclarations;\r
1342     }\r
1343 \r
1344     public PackageDefinitionsDocument.PackageDefinitions getSpdPkgDefs() {\r
1345         if (spdPkgDefs == null) {\r
1346             spdPkgDefs = psaRoot.addNewPackageDefinitions();\r
1347         }\r
1348         return spdPkgDefs;\r
1349     }\r
1350     /**\r
1351      Get SpdHeader element\r
1352      \r
1353      @return SpdHeaderDocument.SpdHeader\r
1354     **/\r
1355     public SpdHeaderDocument.SpdHeader getSpdHdr() {\r
1356         if (spdHdr == null) {\r
1357             spdHdr = psaRoot.addNewSpdHeader();\r
1358         }\r
1359         return spdHdr;\r
1360     }\r
1361 \r
1362     /**\r
1363      Set value to Guid element\r
1364      \r
1365      @param guid The value set to Guid element\r
1366     **/\r
1367     public void setSpdHdrGuidValue(String guid) {\r
1368         getSpdHdr().setGuidValue(guid);\r
1369     }\r
1370 \r
1371     /**\r
1372     Get Version element under SpdHdr\r
1373     \r
1374     @return String\r
1375    **/\r
1376     public String getSpdHdrVer() {\r
1377         return getSpdHdr().getVersion();\r
1378     }\r
1379 \r
1380     /**\r
1381     Set value to Version element\r
1382     \r
1383     @param ver The value set to Version element\r
1384    **/\r
1385     public void setSpdHdrVer(String ver) {\r
1386         getSpdHdr().setVersion(ver);\r
1387     }\r
1388 \r
1389     public String getSpdHdrAbs(){\r
1390         return getSpdHdr().getAbstract();\r
1391         \r
1392     }\r
1393     \r
1394     /**\r
1395      Set value to Abstract element\r
1396      \r
1397      @param abs The value set to Abstract element\r
1398      **/\r
1399     public void setSpdHdrAbs(String abs) {\r
1400 \r
1401         getSpdHdr().setAbstract(abs);\r
1402     }\r
1403     \r
1404     public String getSpdHdrDescription(){\r
1405        return getSpdHdr().getDescription(); \r
1406     }\r
1407     /**\r
1408     Set value to Description element\r
1409     \r
1410     @param des The value set to Description element\r
1411     **/\r
1412     public void setSpdHdrDescription(String des) {\r
1413        getSpdHdr().setDescription(des);\r
1414     }\r
1415     \r
1416     public String getSpdHdrCopyright(){\r
1417         return getSpdHdr().getCopyright();\r
1418     }\r
1419     /**\r
1420      Set value to Copyright element\r
1421      \r
1422      @param cpRit The value set to Copyright element\r
1423      **/\r
1424     public void setSpdHdrCopyright(String cpRit) {\r
1425 \r
1426         getSpdHdr().setCopyright(cpRit);\r
1427 \r
1428     }\r
1429     /**\r
1430      Get License element under SpdHdr\r
1431      \r
1432      @return String\r
1433      **/\r
1434     public String getSpdHdrLicense() {\r
1435         if (getSpdHdr().getLicense() != null) {\r
1436             return getSpdHdr().getLicense().getStringValue();\r
1437         }\r
1438         return null;\r
1439     }\r
1440 \r
1441     /**\r
1442     Set value to License element\r
1443     \r
1444     @param license The value set to License element\r
1445    **/\r
1446     public void setSpdHdrLicense(String license) {\r
1447         if (getSpdHdr().getLicense() == null){\r
1448             getSpdHdr().addNewLicense().setStringValue(license);\r
1449         }\r
1450         else {\r
1451             getSpdHdr().getLicense().setStringValue(license);\r
1452         }\r
1453     }\r
1454     \r
1455     public String getSpdHdrUrl(){\r
1456         if (getSpdHdr().getLicense() != null) {\r
1457             return getSpdHdr().getLicense().getURL();\r
1458         }\r
1459         return null;\r
1460     }\r
1461     \r
1462     public void setSpdHdrUrl(String url){\r
1463         getSpdHdr().getLicense().setURL(url);\r
1464     }\r
1465 \r
1466     /**\r
1467     Get PackageName element under SpdHdr\r
1468     \r
1469     @return String\r
1470    **/\r
1471     public String getSpdHdrPkgName() {\r
1472         \r
1473         return getSpdHdr().getPackageName();\r
1474     }\r
1475 \r
1476     /**\r
1477     Set value to PackageName element\r
1478     \r
1479     @param pkgName The value set to PackageName element\r
1480    **/\r
1481     public void setSpdHdrPkgName(String pkgName) {\r
1482         getSpdHdr().setPackageName(pkgName);\r
1483     }\r
1484 \r
1485     public String getSpdHdrGuidValue(){\r
1486         return getSpdHdr().getGuidValue();\r
1487     }\r
1488     \r
1489     /**\r
1490     Reserved method\r
1491     \r
1492     @return SpecificationDocument.Specification\r
1493    **/\r
1494     public String getSpdHdrSpec() {\r
1495         return "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
1496 //        return getSpdHdr().getSpecification();\r
1497     }\r
1498 \r
1499     /**\r
1500     Reserved method\r
1501     \r
1502     @param spec \r
1503    **/\r
1504     public void setSpdHdrSpec(String spec) {\r
1505         spec = "FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052";\r
1506         getSpdHdr().setSpecification(spec);\r
1507         \r
1508     }\r
1509 \r
1510    public String getSpdPkgDefsRdOnly(){\r
1511         return getSpdPkgDefs().getReadOnly() + "";\r
1512     }\r
1513     /**\r
1514     Set value to ReadOnly element\r
1515     \r
1516     @param rdOnly The value set to ReadOnly element\r
1517    **/\r
1518     public void setSpdPkgDefsRdOnly(String rdOnly) {\r
1519 \r
1520         getSpdPkgDefs().setReadOnly(new Boolean(rdOnly));\r
1521     }\r
1522 \r
1523     public String getSpdPkgDefsRePkg(){\r
1524         return getSpdPkgDefs().getRePackage() + "";\r
1525     }\r
1526     /**\r
1527     Set value to RePackage element\r
1528     \r
1529     @param rePkg The value set to RePackage element\r
1530    **/\r
1531     public void setSpdPkgDefsRePkg(String rePkg) {\r
1532 \r
1533         getSpdPkgDefs().setRePackage(new Boolean(rePkg));\r
1534     }\r
1535 \r
1536     /**\r
1537     Set value to URL element\r
1538     \r
1539     @param url The value set to URL element\r
1540    **/\r
1541 //    public void setSpdHdrURL(String url) {\r
1542 //        getSpdHdr().setURL(url);\r
1543 //    }\r
1544 \r
1545     /**\r
1546      Get xml file\r
1547      \r
1548      @return File\r
1549     **/\r
1550     public File getFile() {\r
1551         return file;\r
1552     }\r
1553 \r
1554     /**\r
1555      Set file\r
1556      \r
1557      @param file File with xml format\r
1558     **/\r
1559     public void setFile(File file) {\r
1560         this.file = file;\r
1561     }\r
1562     \r
1563     private List<String> stringToList(String s){\r
1564         if (s == null || s.length() == 0) {\r
1565             return null;\r
1566         }\r
1567         Vector<String> al = new Vector<String>();\r
1568         String[] sArray = s.split(" ");\r
1569         for(int i = 0; i < sArray.length; ++i){\r
1570             al.add(sArray[i]);\r
1571         }\r
1572         return al; \r
1573     }\r
1574     \r
1575     private String listToString(List l) {\r
1576         if (l == null) {\r
1577             return null;\r
1578         }\r
1579         String s = " ";\r
1580         ListIterator li = l.listIterator();\r
1581         while(li.hasNext()) {\r
1582             s += li.next();\r
1583             s += " ";\r
1584         }\r
1585         return s.trim();\r
1586     }\r
1587 \r
1588 }\r