]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/MigrationTools/org/tianocore/migration/MsaWriter.java
1. Fix EDKT303: Give warning if no library instances that support the required the...
[mirror_edk2.git] / Tools / Java / Source / MigrationTools / org / tianocore / migration / MsaWriter.java
... / ...
CommitLineData
1/** @file\r
2 \r
3 Copyright (c) 2006, Intel Corporation\r
4 All rights reserved. This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8 \r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11 \r
12 **/\r
13package org.tianocore.migration;\r
14\r
15import java.io.*;\r
16import java.util.*;\r
17\r
18import org.tianocore.*;\r
19import org.tianocore.SupportedArchitectures.Enum;\r
20import org.apache.xmlbeans.*;\r
21\r
22public class MsaWriter {\r
23 MsaWriter(ModuleInfo moduleinfo) {\r
24 mi = moduleinfo;\r
25 }\r
26 \r
27 private ModuleInfo mi;\r
28 private ModuleSurfaceAreaDocument msadoc = ModuleSurfaceAreaDocument.Factory.newInstance();\r
29 \r
30 private ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = msadoc.addNewModuleSurfaceArea();\r
31 private MsaHeaderDocument.MsaHeader msaheader = msa.addNewMsaHeader();\r
32 private ModuleDefinitionsDocument.ModuleDefinitions md = msa.addNewModuleDefinitions();\r
33 private SourceFilesDocument.SourceFiles sourcefiles = msa.addNewSourceFiles(); //found local .h files are not written\r
34 private GuidsDocument.Guids guids;\r
35 private ProtocolsDocument.Protocols protocols;\r
36 private PPIsDocument.PPIs ppis;\r
37 private PackageDependenciesDocument.PackageDependencies pd = msa.addNewPackageDependencies();\r
38 private LibraryClassDefinitionsDocument.LibraryClassDefinitions libclassdefs = msa.addNewLibraryClassDefinitions();\r
39 private ExternsDocument.Externs externs = msa.addNewExterns();\r
40 \r
41 private String Query (String requirement) throws Exception {\r
42 String answer;\r
43 BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));\r
44 System.out.println(requirement);\r
45 while ((answer = rd.readLine()).length() == 0) ;\r
46 return answer;\r
47 }\r
48 \r
49 private void addSourceFiles (String name) { // furthur modification needed\r
50 List<Enum> arch = new ArrayList<Enum>();\r
51 FilenameDocument.Filename filename;\r
52 filename = sourcefiles.addNewFilename();\r
53 filename.setStringValue(name);\r
54 \r
55 if (name.contains("x64" + File.separator)) { // filename ???\r
56 arch.add(SupportedArchitectures.X_64);\r
57 System.out.println("x64" + File.separator);\r
58 filename.setSupArchList(arch);\r
59 } else if (name.contains("Ia32" + File.separator)) { // filename ???\r
60 arch.add(SupportedArchitectures.IA_32);\r
61 System.out.println("Ia32" + File.separator);\r
62 filename.setSupArchList(arch);\r
63 } else if (name.contains("Ipf" + File.separator)) { // filename ???\r
64 arch.add(SupportedArchitectures.IPF);\r
65 System.out.println("Ipf" + File.separator);\r
66 filename.setSupArchList(arch);\r
67 } else if (name.contains("Ebc" + File.separator)) { // filename ???\r
68 arch.add(SupportedArchitectures.EBC);\r
69 System.out.println("Ebc" + File.separator);\r
70 filename.setSupArchList(arch);\r
71 }\r
72 }\r
73 private void addWrapper() {\r
74 XmlCursor cursor = msa.newCursor();\r
75 String uri = "http://www.TianoCore.org/2006/Edk2.0";\r
76 cursor.push();\r
77 cursor.toNextToken();\r
78 cursor.insertNamespace("", uri);\r
79 cursor.insertNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");\r
80 cursor.pop();\r
81 msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)cursor.getObject();\r
82 }\r
83 private ModuleSurfaceAreaDocument fulfillMsadoc() throws Exception {\r
84 Iterator<String> it;\r
85 String temp;\r
86 \r
87 if (mi.modulename != null) {\r
88 msaheader.setModuleName(mi.modulename);\r
89 } else {\r
90 msaheader.setModuleName(mi.modulename = Query("Module Name Not Found! Please Input ModuleName"));\r
91 }\r
92 if (mi.guidvalue == null) {\r
93 mi.guidvalue = UUID.randomUUID().toString();\r
94 MigrationTool.ui.println ("Guid value can not be retrieved from inf file. Generate " + mi.guidvalue + " at random!"); \r
95 } \r
96 msaheader.setGuidValue(mi.guidvalue);\r
97 if (mi.moduletype != null) {\r
98 msaheader.setModuleType(ModuleTypeDef.Enum.forString(mi.getModuleType()));\r
99 } else {\r
100 msaheader.setModuleType(ModuleTypeDef.Enum.forString(mi.moduletype = Query("Guid Value Not Found! Please Input Guid Value")));\r
101 }\r
102\r
103 msaheader.setCopyright("Copyright (c) 2006, Intel Corporation");\r
104 msaheader.setVersion("1.0");\r
105 msaheader.setAbstract("Component name for module " + mi.modulename);\r
106 msaheader.setDescription("FIX ME!");\r
107 msaheader.addNewLicense().setStringValue("All rights reserved.\n" +\r
108 " This software and associated documentation (if any) is furnished\n" +\r
109 " under a license and may only be used or copied in accordance\n" +\r
110 " with the terms of the license. Except as permitted by such\n" +\r
111 " license, no part of this software or documentation may be\n" +\r
112 " reproduced, stored in a retrieval system, or transmitted in any\n" +\r
113 " form or by any means without the express written consent of\n" +\r
114 " Intel Corporation.");\r
115 msaheader.setSpecification("FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052");\r
116 \r
117 List<Enum> arch = new ArrayList<Enum>();\r
118 arch.add(SupportedArchitectures.IA_32);\r
119 arch.add(SupportedArchitectures.X_64);\r
120 arch.add(SupportedArchitectures.IPF);\r
121 arch.add(SupportedArchitectures.EBC);\r
122 md.setSupportedArchitectures(arch);\r
123 md.setBinaryModule(false);\r
124 md.setOutputFileBasename(mi.modulename);\r
125 \r
126 pd.addNewPackage().setPackageGuid("5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec");\r
127 pd.addNewPackage().setPackageGuid("68169ab0-d41b-4009-9060-292c253ac43d");\r
128 externs.addNewSpecification().setStringValue("EFI_SPECIFICATION_VERSION 0x00020000");\r
129 externs.addNewSpecification().setStringValue("EDK_RELEASE_VERSION 0x00020000");\r
130 if (mi.entrypoint != null) {\r
131 externs.addNewExtern().setModuleEntryPoint(mi.entrypoint);\r
132 org.tianocore.ModuleTypeDef.Enum moduleType = msaheader.getModuleType();\r
133 if (moduleType == ModuleTypeDef.PEIM) {\r
134 mi.hashrequiredr9libs.add("PeimEntryPoint");\r
135 } else {\r
136 mi.hashrequiredr9libs.add("UefiDriverEntryPoint");\r
137 }\r
138 }\r
139 \r
140 it = mi.localmodulesources.iterator();\r
141 while (it.hasNext()) {\r
142 addSourceFiles(it.next());\r
143 }\r
144 if (!mi.protocols.isEmpty()) {\r
145 protocols = msa.addNewProtocols();\r
146 it = mi.protocols.iterator();\r
147 while (it.hasNext()) {\r
148 if ((temp = it.next()) != null) {\r
149 ProtocolsDocument.Protocols.Protocol pr = protocols.addNewProtocol();\r
150 pr.setProtocolCName(temp);\r
151 pr.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
152 }\r
153 }\r
154 }\r
155 if (!mi.ppis.isEmpty()) {\r
156 ppis = msa.addNewPPIs();\r
157 it = mi.ppis.iterator();\r
158 while (it.hasNext()) {\r
159 if ((temp = it.next()) != null) {\r
160 PPIsDocument.PPIs.Ppi pp = ppis.addNewPpi();\r
161 pp.setPpiCName(temp);\r
162 pp.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
163 }\r
164 }\r
165 }\r
166 if (!mi.guids.isEmpty()) {\r
167 guids = msa.addNewGuids();\r
168 it = mi.guids.iterator();\r
169 while (it.hasNext()) {\r
170 if ((temp = it.next()) != null) {\r
171 GuidsDocument.Guids.GuidCNames gcn = guids.addNewGuidCNames();\r
172 gcn.setGuidCName(temp);\r
173 gcn.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
174 }\r
175 }\r
176 }\r
177 it = mi.hashrequiredr9libs.iterator();\r
178 while (it.hasNext()) {\r
179 if ((temp = it.next()) != null && !temp.matches("%") && !temp.matches("n/a")) {\r
180 LibraryClassDocument.LibraryClass lc = libclassdefs.addNewLibraryClass();\r
181 lc.setKeyword(temp);\r
182 lc.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
183 }\r
184 }\r
185 addWrapper();\r
186 msadoc.setModuleSurfaceArea(msa);\r
187 return msadoc;\r
188 }\r
189 \r
190 public void flush() throws Exception {\r
191 XmlOptions options = new XmlOptions();\r
192\r
193 options.setCharacterEncoding("UTF-8");\r
194 options.setSavePrettyPrint();\r
195 options.setSavePrettyPrintIndent(2);\r
196 options.setUseDefaultNamespace();\r
197\r
198 BufferedWriter bw = new BufferedWriter(new FileWriter(MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator + mi.modulename + ".msa"));\r
199 fulfillMsadoc().save(bw, options);\r
200 //MsaTreeEditor.init(mi, ui, msadoc);\r
201 bw.flush();\r
202 bw.close();\r
203 }\r
204\r
205 private static void flush(String path, ModuleSurfaceAreaDocument msadoc) throws Exception {\r
206 XmlOptions options = new XmlOptions();\r
207\r
208 options.setCharacterEncoding("UTF-8");\r
209 options.setSavePrettyPrint();\r
210 options.setSavePrettyPrintIndent(2);\r
211 options.setUseDefaultNamespace();\r
212\r
213 BufferedWriter bw = new BufferedWriter(new FileWriter(path));\r
214 msadoc.save(bw, options);\r
215 bw.flush();\r
216 bw.close();\r
217 }\r
218\r
219 public static final void parse(String msafile) throws Exception {\r
220 ModuleSurfaceAreaDocument msadoc = ModuleSurfaceAreaDocument.Factory.parse(msafile);\r
221 flush("c:\\temp.msa", msadoc);\r
222 }\r
223}\r