PageRenderTime 49ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Xsd2Code/Trunk/Xsd2Code.Console/EntryPoint.cs

#
C# | 407 lines | 324 code | 50 blank | 33 comment | 26 complexity | a2b9dc141761bd66083518b33443f095 MD5 | raw file
Possible License(s): LGPL-2.1
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using Xsd2Code.Library;
  5. using Xsd2Code.Library.Helpers;
  6. using Xsd2Code.Properties;
  7. namespace Xsd2Code
  8. {
  9. /// <summary>
  10. /// Entry point class
  11. /// </summary>
  12. /// <remarks>
  13. /// Revision history:
  14. ///
  15. /// Modified 2009-02-20 by Ruslan Urban
  16. /// Changed parsing of command-line arguments
  17. ///
  18. /// Modified 2009-03-12 By Ruslan Urban
  19. /// Enabled GenerateDataContracts option
  20. ///
  21. /// </remarks>
  22. internal class EntryPoint
  23. {
  24. [STAThread]
  25. static private void Main(string[] args)
  26. {
  27. // Display hekp when no parameters have been specified
  28. if (args.Length < 1)
  29. {
  30. DisplayApplicationInfo();
  31. DisplayHelp();
  32. return;
  33. }
  34. DisplayApplicationInfo();
  35. // Create new instance of GeneratorParams, which contains all generation parameters
  36. var xsdFilePath = args[0];
  37. var generatorParams = new GeneratorParams { InputFilePath = xsdFilePath };
  38. // When only the XSD file name is specified,
  39. // try to locate generated Designer file and load output parameters from the file header
  40. if (args.Length == 1)
  41. {
  42. string outputFilePath;
  43. var tempGeneratorParams = GeneratorParams.LoadFromFile(xsdFilePath, out outputFilePath);
  44. if (tempGeneratorParams != null)
  45. {
  46. generatorParams = tempGeneratorParams;
  47. generatorParams.InputFilePath = xsdFilePath;
  48. if (!string.IsNullOrEmpty(outputFilePath))
  49. generatorParams.OutputFilePath = outputFilePath;
  50. }
  51. }
  52. // Second command-line parameter that is not a switch is the generated code namespace
  53. if (args.Length > 1 && !args[1].StartsWith("/"))
  54. {
  55. generatorParams.NameSpace = args[1];
  56. // Third command-line parameter that is not a switch is the generated code namespace
  57. if (args.Length > 2 && !args[2].StartsWith("/"))
  58. generatorParams.OutputFilePath = args[2];
  59. }
  60. // Process command-line parameter switches
  61. for (int i = 1; i < args.Length; i++)
  62. {
  63. switch (args[i].Trim().ToLower())
  64. {
  65. case "/n":
  66. case "/ns":
  67. case "/namespace":
  68. if (i < args.Length - 1)
  69. {
  70. generatorParams.NameSpace = args[i + 1];
  71. i++;
  72. }
  73. break;
  74. case "/o":
  75. case "/out":
  76. case "/output":
  77. if (i < args.Length - 1)
  78. {
  79. generatorParams.OutputFilePath = args[i + 1];
  80. i++;
  81. }
  82. break;
  83. case "/l":
  84. case "/lang":
  85. case "/language":
  86. if (i < args.Length - 1)
  87. {
  88. generatorParams.Language = Utility.GetGenerationLanguage(args[i + 1]);
  89. i++;
  90. }
  91. break;
  92. case "/c":
  93. case "/col":
  94. case "/collection":
  95. case "/collectionbase":
  96. if (i < args.Length - 1)
  97. {
  98. generatorParams.CollectionObjectType = Utility.ToEnum<CollectionType>(args[i + 1]);
  99. i++;
  100. }
  101. break;
  102. //Duplicate with /pl
  103. case "/cb":
  104. case "/codebase":
  105. if (i < args.Length - 1)
  106. {
  107. Console.WriteLine("Warning: /cb /codebase is obsolete please use /pl[atform] <Platform> - Generated code target platform (Net20|Net30|Net35|Silverlight20). Default: Net20");
  108. generatorParams.TargetFramework = Utility.ToEnum<TargetFramework>(args[i + 1]);
  109. i++;
  110. }
  111. break;
  112. case "/cu":
  113. case "/customusings":
  114. if (i < args.Length - 1)
  115. {
  116. //generatorParams.CustomUsingsString = args[i + 1];
  117. foreach (string item in args[i + 1].Split(','))
  118. {
  119. generatorParams.CustomUsings.Add(new NamespaceParam { NameSpace = item });
  120. }
  121. i++;
  122. }
  123. break;
  124. case "/lf":
  125. case "/lfm":
  126. if (i < args.Length - 1)
  127. {
  128. generatorParams.Serialization.LoadFromFileMethodName = args[i + 1];
  129. i++;
  130. }
  131. break;
  132. case "/sm":
  133. if (i < args.Length - 1)
  134. {
  135. generatorParams.Serialization.SerializeMethodName = args[i + 1];
  136. i++;
  137. }
  138. break;
  139. case "/sf":
  140. case "/sfm":
  141. if (i < args.Length - 1)
  142. {
  143. generatorParams.Serialization.SaveToFileMethodName = args[i + 1];
  144. i++;
  145. }
  146. break;
  147. case "/p":
  148. case "/pl":
  149. case "/tp":
  150. case "/tpl":
  151. case "/platform":
  152. if (i < args.Length - 1)
  153. {
  154. generatorParams.TargetFramework = Utility.GetTargetPlatform(args[i + 1]);
  155. i++;
  156. }
  157. break;
  158. case "/u":
  159. case "/us":
  160. case "/using":
  161. if (i < args.Length - 1)
  162. {
  163. var nsList = args[i + 1].Split(',');
  164. foreach (var ns in nsList)
  165. generatorParams.CustomUsings.Add(new NamespaceParam { NameSpace = ns });
  166. i++;
  167. }
  168. break;
  169. case "/dbg":
  170. case "/dbg+":
  171. case "/debug":
  172. case "/debug+":
  173. generatorParams.Miscellaneous.DisableDebug = false;
  174. break;
  175. case "/dbg-":
  176. case "/debug-":
  177. generatorParams.Miscellaneous.DisableDebug = true;
  178. break;
  179. case "/db":
  180. case "/db+":
  181. generatorParams.EnableDataBinding = true;
  182. break;
  183. case "/db-":
  184. generatorParams.EnableDataBinding = false;
  185. break;
  186. case "/dc":
  187. case "/dc+":
  188. generatorParams.GenerateDataContracts = true;
  189. break;
  190. case "/dc-":
  191. generatorParams.GenerateDataContracts = false;
  192. break;
  193. case "/ap":
  194. case "/ap+":
  195. generatorParams.PropertyParams.AutomaticProperties = true;
  196. break;
  197. case "/ap-":
  198. generatorParams.PropertyParams.AutomaticProperties = false;
  199. break;
  200. case "/if":
  201. case "/if+":
  202. generatorParams.EnableInitializeFields = true;
  203. break;
  204. case "/if-":
  205. generatorParams.EnableInitializeFields = false;
  206. break;
  207. case "/eit":
  208. case "/eit+":
  209. generatorParams.Miscellaneous.ExcludeIncludedTypes = true;
  210. break;
  211. case "/eit-":
  212. generatorParams.Miscellaneous.ExcludeIncludedTypes = false;
  213. break;
  214. case "/gbc":
  215. case "/gbc+":
  216. generatorParams.GenericBaseClass.Enabled = true;
  217. break;
  218. case "/gbc-":
  219. generatorParams.GenericBaseClass.Enabled = false;
  220. break;
  221. case "/ggbc":
  222. case "/ggbc+":
  223. generatorParams.GenericBaseClass.GenerateBaseClass = true;
  224. break;
  225. case "/ggbc-":
  226. generatorParams.GenericBaseClass.GenerateBaseClass = false;
  227. break;
  228. case "/sc":
  229. case "/sc+":
  230. generatorParams.Miscellaneous.EnableSummaryComment = true;
  231. break;
  232. case "/sc-":
  233. case "/sum-":
  234. generatorParams.Miscellaneous.EnableSummaryComment = false;
  235. break;
  236. case "/xa":
  237. case "/xa+":
  238. generatorParams.Serialization.GenerateXmlAttributes = true;
  239. break;
  240. case "/xa-":
  241. generatorParams.Serialization.GenerateXmlAttributes = false;
  242. break;
  243. case "/cl":
  244. case "/cl+":
  245. generatorParams.GenerateCloneMethod = true;
  246. break;
  247. case "/cl-":
  248. generatorParams.GenerateCloneMethod = false;
  249. break;
  250. case "/hp":
  251. case "/hp+":
  252. generatorParams.Miscellaneous.HidePrivateFieldInIde = true;
  253. break;
  254. case "/hp-":
  255. generatorParams.Miscellaneous.HidePrivateFieldInIde = false;
  256. break;
  257. case "/tc":
  258. case "/tc+":
  259. generatorParams.TrackingChanges.Enabled = true;
  260. break;
  261. case "/tc-":
  262. generatorParams.TrackingChanges.Enabled = false;
  263. break;
  264. case "/tcc":
  265. case "/tcc+":
  266. generatorParams.TrackingChanges.GenerateTrackingClasses = true;
  267. break;
  268. case "/tcc-":
  269. generatorParams.TrackingChanges.GenerateTrackingClasses = false;
  270. break;
  271. case "/ssp":
  272. case "/ssp+":
  273. generatorParams.PropertyParams.GenerateShouldSerializeProperty = true;
  274. break;
  275. case "/ssp-":
  276. generatorParams.PropertyParams.GenerateShouldSerializeProperty = false;
  277. break;
  278. case "/s":
  279. case "/s+":
  280. case "/is":
  281. case "/is+":
  282. generatorParams.Serialization.Enabled = true;
  283. break;
  284. case "/s-":
  285. case "/is-":
  286. generatorParams.Serialization.Enabled = false;
  287. break;
  288. case "/lic":
  289. case "/license":
  290. DisplayLicense();
  291. return;
  292. case "/?":
  293. case "/h":
  294. case "/hlp":
  295. case "/help":
  296. DisplayHelp();
  297. return;
  298. }
  299. }
  300. // Auto-generate missing output file path
  301. if (string.IsNullOrEmpty(generatorParams.OutputFilePath))
  302. {
  303. generatorParams.OutputFilePath =
  304. Utility.GetOutputFilePath(generatorParams.InputFilePath,
  305. generatorParams.Language);
  306. }
  307. // Auto-generate missing generated code namespace
  308. if (string.IsNullOrEmpty(generatorParams.NameSpace))
  309. generatorParams.NameSpace = Path.GetFileNameWithoutExtension(generatorParams.InputFilePath);
  310. // Create an instance of Generator
  311. var generator = new GeneratorFacade(generatorParams);
  312. // Generate code
  313. var result = generator.Generate();
  314. if (!result.Success)
  315. {
  316. // Display the error and wait for user confirmation
  317. Console.WriteLine();
  318. Console.WriteLine(result.Messages.ToString());
  319. Console.WriteLine();
  320. Console.WriteLine("Press ENTER to continue...");
  321. Console.ReadLine();
  322. return;
  323. }
  324. Console.WriteLine("Generated code has been saved into the file {0}.", result.Entity);
  325. Console.WriteLine();
  326. Console.WriteLine("Finished");
  327. Console.WriteLine();
  328. }
  329. static private void DisplayApplicationInfo()
  330. {
  331. var currentAssembly = Assembly.GetExecutingAssembly();
  332. var currentAssemblyName = currentAssembly.GetName();
  333. Console.WriteLine();
  334. Console.WriteLine("Xsd2Code Version {0}", currentAssemblyName.Version);
  335. Console.WriteLine("Code generation utility from XML schema files.");
  336. Console.WriteLine();
  337. }
  338. /// <summary>
  339. /// Display contents of the help file ~/Resources/Help.txt
  340. /// </summary>
  341. static private void DisplayHelp()
  342. {
  343. Console.WriteLine();
  344. Console.WriteLine(Resources.Help);
  345. Console.WriteLine();
  346. }
  347. /// <summary>
  348. /// Display contents of the help file ~/Resources/Help.txt
  349. /// </summary>
  350. static private void DisplayLicense()
  351. {
  352. Console.WriteLine();
  353. Console.WriteLine(Resources.License);
  354. Console.WriteLine();
  355. }
  356. }
  357. }