]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaParser.java
added the support for new schema and old schema at the same time
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / global / SurfaceAreaParser.java
1 /** @file
2 SurfaceAreaParser class.
3
4 SurfaceAreaParser class is used to parse module surface area include both
5 driver and library.
6
7 Copyright (c) 2006, Intel Corporation
8 All rights reserved. This program and the accompanying materials
9 are licensed and made available under the terms and conditions of the BSD License
10 which accompanies this distribution. The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php
12
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 **/
16 package org.tianocore.build.global;
17
18 import java.io.File;
19 import java.util.HashMap;
20 import java.util.Map;
21
22 import org.apache.tools.ant.BuildException;
23 import org.apache.xmlbeans.XmlObject;
24 import org.tianocore.LibraryModuleBuildDescriptionDocument;
25 import org.tianocore.LibraryModuleSurfaceAreaDocument;
26 import org.tianocore.ModuleBuildDescriptionDocument;
27 import org.tianocore.ModuleSurfaceAreaDocument;
28
29 /**
30 This class is used to parse module surface area (MSA & MBD) include both
31 driver and library.
32
33 @since GenBuild 1.0
34 **/
35 public class SurfaceAreaParser {
36
37 /**
38 Using XmlBeans to parse and valid surface area file.
39
40 @param surfaceAreaFile the surface area file to parse
41 @return top level elements and its value mapping information
42 @throws BuildException
43 If surface area is not well-formed or invalid
44 **/
45 public Map<String, XmlObject> parseFile(File surfaceAreaFile) throws BuildException {
46 Map<String, XmlObject> map = new HashMap<String, XmlObject>();
47 try {
48 XmlObject sadoc = XmlObject.Factory.parse(surfaceAreaFile);
49 // Validate File if they obey XML Schema
50
51 if ( ! sadoc.validate()){
52 throw new BuildException("Surface Area file [" + surfaceAreaFile.getPath() + "] is invalid.");
53 }
54 if (sadoc instanceof ModuleSurfaceAreaDocument){
55 parseFile((ModuleSurfaceAreaDocument) sadoc, map);
56 }
57 else if(sadoc instanceof ModuleBuildDescriptionDocument){
58 parseFile((ModuleBuildDescriptionDocument) sadoc, map);
59 }
60 else if(sadoc instanceof LibraryModuleSurfaceAreaDocument){
61 parseFile((LibraryModuleSurfaceAreaDocument) sadoc, map);
62 }
63 else if(sadoc instanceof LibraryModuleBuildDescriptionDocument){
64 parseFile((LibraryModuleBuildDescriptionDocument) sadoc, map);
65 }
66 }
67 catch (Exception ex){
68 throw new BuildException(ex.getMessage());
69 }
70 return map;
71 }
72
73
74 /**
75 Parse MSA.
76
77 @param doc top level surface area XML document
78 @param msaMap the map to store the result
79 **/
80 private void parseFile(ModuleSurfaceAreaDocument doc, Map<String, XmlObject> msaMap) {
81 msaMap.put("MsaHeader", doc.getModuleSurfaceArea().getMsaHeader());
82 msaMap.put("LibraryClassDefinitions", doc.getModuleSurfaceArea()
83 .getLibraryClassDefinitions());
84 msaMap.put("SourceFiles", doc.getModuleSurfaceArea().getSourceFiles());
85 msaMap.put("Includes", doc.getModuleSurfaceArea().getIncludes());
86 msaMap.put("PackageDependencies", doc.getModuleSurfaceArea().getPackageDependencies());
87 msaMap.put("Protocols", doc.getModuleSurfaceArea().getProtocols());
88
89 msaMap.put("Events", doc.getModuleSurfaceArea().getEvents());
90 msaMap.put("Hobs", doc.getModuleSurfaceArea().getHobs());
91 msaMap.put("PPIs", doc.getModuleSurfaceArea().getPPIs());
92 msaMap.put("Variables", doc.getModuleSurfaceArea().getVariables());
93 msaMap.put("BootModes", doc.getModuleSurfaceArea().getBootModes());
94
95 msaMap.put("SystemTables", doc.getModuleSurfaceArea().getSystemTables());
96 msaMap.put("DataHubs", doc.getModuleSurfaceArea().getDataHubs());
97 msaMap.put("Formsets", doc.getModuleSurfaceArea().getFormsets());
98 msaMap.put("Guids", doc.getModuleSurfaceArea().getGuids());
99 msaMap.put("Externs", doc.getModuleSurfaceArea().getExterns());
100
101 msaMap.put("PcdCoded", doc.getModuleSurfaceArea().getPcdCoded());
102 msaMap.put("BuildOptions", doc.getModuleSurfaceArea().getBuildOptions());
103 }
104
105 /**
106 Parse MBD.
107
108 @param doc top level surface area XML document
109 @param msaMap the map to store the result
110 **/
111 private void parseFile(ModuleBuildDescriptionDocument doc, Map<String, XmlObject> mbdMap) {
112 mbdMap.put("MbdHeader", doc.getModuleBuildDescription().getMbdHeader());
113 mbdMap.put("Libraries", doc.getModuleBuildDescription().getLibraries());
114 mbdMap.put("SourceFiles", doc.getModuleBuildDescription()
115 .getSourceFiles());
116 mbdMap.put("Includes", doc.getModuleBuildDescription().getIncludes());
117 mbdMap.put("Protocols", doc.getModuleBuildDescription().getProtocols());
118
119 mbdMap.put("Events", doc.getModuleBuildDescription().getEvents());
120 mbdMap.put("Hobs", doc.getModuleBuildDescription().getHobs());
121 mbdMap.put("PPIs", doc.getModuleBuildDescription().getPPIs());
122 mbdMap.put("Variables", doc.getModuleBuildDescription().getVariables());
123 mbdMap.put("BootModes", doc.getModuleBuildDescription().getBootModes());
124
125 mbdMap.put("SystemTables", doc.getModuleBuildDescription()
126 .getSystemTables());
127 mbdMap.put("DataHubs", doc.getModuleBuildDescription().getDataHubs());
128 mbdMap.put("Formsets", doc.getModuleBuildDescription().getFormsets());
129 mbdMap.put("Guids", doc.getModuleBuildDescription().getGuids());
130 mbdMap.put("Externs", doc.getModuleBuildDescription().getExterns());
131
132 mbdMap.put("BuildOptions", doc.getModuleBuildDescription()
133 .getBuildOptions());
134 }
135 /**
136 Parse Library MSA.
137
138 @param doc top level surface area XML document
139 @param msaMap the map to store the result
140 **/
141 private void parseFile(LibraryModuleSurfaceAreaDocument doc, Map<String, XmlObject> msaMap) {
142 msaMap.put("MsaLibHeader", doc.getLibraryModuleSurfaceArea()
143 .getMsaLibHeader());
144 msaMap.put("LibraryClassDefinitions", doc.getLibraryModuleSurfaceArea()
145 .getLibraryClassDefinitions());
146 msaMap.put("SourceFiles", doc.getLibraryModuleSurfaceArea()
147 .getSourceFiles());
148 msaMap.put("Includes", doc.getLibraryModuleSurfaceArea().getIncludes());
149 msaMap.put("Protocols", doc.getLibraryModuleSurfaceArea()
150 .getProtocols());
151
152 msaMap.put("Events", doc.getLibraryModuleSurfaceArea().getEvents());
153 msaMap.put("Hobs", doc.getLibraryModuleSurfaceArea().getHobs());
154 msaMap.put("PPIs", doc.getLibraryModuleSurfaceArea().getPPIs());
155 msaMap.put("Variables", doc.getLibraryModuleSurfaceArea()
156 .getVariables());
157 msaMap.put("BootModes", doc.getLibraryModuleSurfaceArea()
158 .getBootModes());
159
160 msaMap.put("SystemTables", doc.getLibraryModuleSurfaceArea()
161 .getSystemTables());
162 msaMap.put("DataHubs", doc.getLibraryModuleSurfaceArea().getDataHubs());
163 msaMap.put("Formsets", doc.getLibraryModuleSurfaceArea().getFormsets());
164 msaMap.put("Guids", doc.getLibraryModuleSurfaceArea().getGuids());
165 msaMap.put("Externs", doc.getLibraryModuleSurfaceArea().getExterns());
166
167 msaMap.put("PcdCoded", doc.getLibraryModuleSurfaceArea().getPcdCoded());
168 msaMap.put("BuildOptions", doc.getLibraryModuleSurfaceArea()
169 .getBuildOptions());
170 }
171
172 /**
173 Parse Library MBD.
174
175 @param doc top level surface area XML document
176 @param msaMap the map to store the result
177 **/
178 private void parseFile(LibraryModuleBuildDescriptionDocument doc, Map<String, XmlObject> mbdMap) {
179 mbdMap.put("MbdLibHeader", doc.getLibraryModuleBuildDescription()
180 .getMbdLibHeader());
181 mbdMap.put("Libraries", doc.getLibraryModuleBuildDescription()
182 .getLibraries());
183 mbdMap.put("SourceFiles", doc.getLibraryModuleBuildDescription()
184 .getSourceFiles());
185 mbdMap.put("Includes", doc.getLibraryModuleBuildDescription()
186 .getIncludes());
187 mbdMap.put("Protocols", doc.getLibraryModuleBuildDescription()
188 .getProtocols());
189
190 mbdMap
191 .put("Events", doc.getLibraryModuleBuildDescription()
192 .getEvents());
193 mbdMap.put("Hobs", doc.getLibraryModuleBuildDescription().getHobs());
194 mbdMap.put("PPIs", doc.getLibraryModuleBuildDescription().getPPIs());
195 mbdMap.put("Variables", doc.getLibraryModuleBuildDescription()
196 .getVariables());
197 mbdMap.put("BootModes", doc.getLibraryModuleBuildDescription()
198 .getBootModes());
199
200 mbdMap.put("SystemTables", doc.getLibraryModuleBuildDescription()
201 .getSystemTables());
202 mbdMap.put("DataHubs", doc.getLibraryModuleBuildDescription()
203 .getDataHubs());
204 mbdMap.put("Formsets", doc.getLibraryModuleBuildDescription()
205 .getFormsets());
206 mbdMap.put("Guids", doc.getLibraryModuleBuildDescription().getGuids());
207 mbdMap.put("Externs", doc.getLibraryModuleBuildDescription()
208 .getExterns());
209
210 mbdMap.put("BuildOptions", doc.getLibraryModuleBuildDescription()
211 .getBuildOptions());
212 }
213 }