]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/MigrationTools/org/tianocore/migration/MsaWriter.java
Add MigrationTool.java
[mirror_edk2.git] / Tools / Source / MigrationTools / org / tianocore / migration / MsaWriter.java
CommitLineData
b0282412 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
0dc8c589 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
5ea254f6 23 MsaWriter(String path, String outpath, ModuleInfo moduleinfo, Database database, UI u) {\r
0dc8c589 24 modulepath = path;\r
5ea254f6 25 outputpath = outpath;\r
0dc8c589 26 mi = moduleinfo;\r
27 db = database;\r
fed802b1 28 ui = u;\r
0dc8c589 29 }\r
30\r
31 private String modulepath;\r
5ea254f6 32 private String outputpath;\r
0dc8c589 33 private ModuleInfo mi;\r
34 private Database db;\r
fed802b1 35 private UI ui;\r
0dc8c589 36 \r
37 private ModuleSurfaceAreaDocument msadoc = ModuleSurfaceAreaDocument.Factory.newInstance();\r
38 \r
39 private ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = msadoc.addNewModuleSurfaceArea();\r
40 private MsaHeaderDocument.MsaHeader msaheader = msa.addNewMsaHeader();\r
41 private ModuleDefinitionsDocument.ModuleDefinitions md = msa.addNewModuleDefinitions();\r
42 private SourceFilesDocument.SourceFiles sourcefiles = msa.addNewSourceFiles(); //found local .h files are not written\r
fb840aa8 43 private GuidsDocument.Guids guids;\r
44 private ProtocolsDocument.Protocols protocols;\r
45 private PPIsDocument.PPIs ppis;\r
0dc8c589 46 private PackageDependenciesDocument.PackageDependencies pd = msa.addNewPackageDependencies();\r
47 private LibraryClassDefinitionsDocument.LibraryClassDefinitions libclassdefs = msa.addNewLibraryClassDefinitions();\r
48 private ExternsDocument.Externs externs = msa.addNewExterns();\r
49 \r
50 private String Query (String requirement) throws Exception {\r
51 String answer;\r
52 BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));\r
53 System.out.println(requirement);\r
54 while ((answer = rd.readLine()).length() == 0) ;\r
55 return answer;\r
56 }\r
57 \r
2be54d60 58 private void addSourceFiles (String name) { // furthur modification needed\r
59 List<Enum> arch = new ArrayList<Enum>();\r
60 FilenameDocument.Filename filename;\r
61 filename = sourcefiles.addNewFilename();\r
62 filename.setStringValue(name);\r
63 \r
64 if (name.contains("x64" + File.separator)) { // filename ???\r
65 arch.add(SupportedArchitectures.X_64);\r
66 System.out.println("x64" + File.separator);\r
67 filename.setSupArchList(arch);\r
68 } else if (name.contains("Ia32" + File.separator)) { // filename ???\r
69 arch.add(SupportedArchitectures.IA_32);\r
70 System.out.println("Ia32" + File.separator);\r
71 filename.setSupArchList(arch);\r
72 } else if (name.contains("Ipf" + File.separator)) { // filename ???\r
73 arch.add(SupportedArchitectures.IPF);\r
74 System.out.println("Ipf" + File.separator);\r
75 filename.setSupArchList(arch);\r
76 } else if (name.contains("Ebc" + File.separator)) { // filename ???\r
77 arch.add(SupportedArchitectures.EBC);\r
78 System.out.println("Ebc" + File.separator);\r
79 filename.setSupArchList(arch);\r
80 }\r
81 }\r
82 \r
0dc8c589 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
719cebfe 90 msaheader.setModuleName(mi.modulename = Query("Module Name Not Found! Please Input ModuleName"));\r
0dc8c589 91 }\r
92 if (mi.guidvalue != null) {\r
93 msaheader.setGuidValue(mi.guidvalue);\r
94 } else {\r
719cebfe 95 msaheader.setGuidValue(mi.guidvalue = Query("Guid Value Not Found! Please Input Guid Value"));\r
0dc8c589 96 }\r
97 if (mi.moduletype != null) {\r
98 if (mi.moduletype.contains("PEI")) {\r
99 msaheader.setModuleType(ModuleTypeDef.Enum.forString("PEIM"));\r
100 } else {\r
101 msaheader.setModuleType(ModuleTypeDef.Enum.forString("DXE_DRIVER"));\r
102 }\r
103 } else {\r
719cebfe 104 msaheader.setModuleType(ModuleTypeDef.Enum.forString(mi.moduletype = Query("Guid Value Not Found! Please Input Guid Value")));\r
0dc8c589 105 }\r
fb840aa8 106\r
0dc8c589 107 msaheader.setCopyright("Copyright (c) 2006, Intel Corporation");\r
108 msaheader.setVersion("1.0");\r
109 msaheader.setAbstract("Component name for module " + mi.modulename);\r
90503bad 110 msaheader.setDescription("FIX ME!");\r
0dc8c589 111 msaheader.addNewLicense().setStringValue("All rights reserved.\n" +\r
112 " This software and associated documentation (if any) is furnished\n" +\r
113 " under a license and may only be used or copied in accordance\n" +\r
114 " with the terms of the license. Except as permitted by such\n" +\r
115 " license, no part of this software or documentation may be\n" +\r
116 " reproduced, stored in a retrieval system, or transmitted in any\n" +\r
117 " form or by any means without the express written consent of\n" +\r
118 " Intel Corporation.");\r
fb840aa8 119 msaheader.setSpecification("FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052");\r
0dc8c589 120 \r
121 List<Enum> arch = new ArrayList<Enum>();\r
122 arch.add(SupportedArchitectures.IA_32);\r
123 arch.add(SupportedArchitectures.X_64);\r
124 arch.add(SupportedArchitectures.IPF);\r
125 arch.add(SupportedArchitectures.EBC);\r
126 md.setSupportedArchitectures(arch);\r
127 md.setBinaryModule(false);\r
128 md.setOutputFileBasename(mi.modulename);\r
129 \r
130 pd.addNewPackage().setPackageGuid("5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec");\r
131 externs.addNewSpecification().setStringValue("EFI_SPECIFICATION_VERSION 0x00020000");\r
132 externs.addNewSpecification().setStringValue("EDK_RELEASE_VERSION 0x00020000");\r
133 externs.addNewExtern().setModuleEntryPoint(mi.entrypoint);\r
134 \r
135 it = mi.localmodulesources.iterator();\r
136 while (it.hasNext()) {\r
2be54d60 137 addSourceFiles(it.next());\r
0dc8c589 138 }\r
fb840aa8 139 if (!mi.protocol.isEmpty()) {\r
140 protocols = msa.addNewProtocols();\r
141 it = mi.protocol.iterator();\r
142 while (it.hasNext()) {\r
143 if ((temp = it.next()) != null) {\r
144 ProtocolsDocument.Protocols.Protocol pr = protocols.addNewProtocol();\r
145 pr.setProtocolCName(temp);\r
146 pr.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
147 }\r
0dc8c589 148 }\r
149 }\r
fb840aa8 150 if (!mi.ppi.isEmpty()) {\r
151 ppis = msa.addNewPPIs();\r
152 it = mi.ppi.iterator();\r
153 while (it.hasNext()) {\r
154 if ((temp = it.next()) != null) {\r
155 PPIsDocument.PPIs.Ppi pp = ppis.addNewPpi();\r
156 pp.setPpiCName(temp);\r
157 pp.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
158 }\r
0dc8c589 159 }\r
160 }\r
fb840aa8 161 if (!mi.guid.isEmpty()) {\r
162 guids = msa.addNewGuids();\r
163 it = mi.guid.iterator();\r
164 while (it.hasNext()) {\r
165 if ((temp = it.next()) != null) {\r
166 GuidsDocument.Guids.GuidCNames gcn = guids.addNewGuidCNames();\r
167 gcn.setGuidCName(temp);\r
168 gcn.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
169 }\r
0dc8c589 170 }\r
171 }\r
172 it = mi.hashrequiredr9libs.iterator();\r
173 while (it.hasNext()) {\r
174 if ((temp = it.next()) != null && !temp.matches("%")) {\r
175 LibraryClassDocument.LibraryClass lc = libclassdefs.addNewLibraryClass();\r
176 lc.setKeyword(temp);\r
177 lc.setUsage(UsageTypes.ALWAYS_CONSUMED);\r
178 }\r
179 }\r
180 \r
181 return msadoc;\r
182 }\r
183 \r
184 public void flush() throws Exception {\r
185 XmlOptions options = new XmlOptions();\r
186\r
187 options.setCharacterEncoding("UTF-8");\r
188 options.setSavePrettyPrint();\r
189 options.setSavePrettyPrintIndent(2);\r
190 options.setUseDefaultNamespace();\r
191 \r
5ea254f6 192 BufferedWriter bw = new BufferedWriter(new FileWriter(outputpath + File.separator + "Migration_" + mi.modulename + File.separator + mi.modulename + ".msa"));\r
0dc8c589 193 fulfillMsadoc().save(bw, options);\r
fed802b1 194 //MsaTreeEditor.init(mi, ui, msadoc);\r
0dc8c589 195 bw.flush();\r
196 bw.close();\r
197 }\r
198}\r