convertedmx.pp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. program convertedmx;
  2. uses
  3. classes, sysutils, csdl2pas, custapp, restcodegen,
  4. edmx2pas, odatacodegen, cgs;
  5. Type
  6. { TConvertEDMXApplication }
  7. TConvertEDMXApplication = Class(TCustomApplication)
  8. private
  9. procedure Usage(Msg: String);
  10. Protected
  11. Procedure DoRun; override;
  12. public
  13. Procedure DoMyLog(Sender: TObject; LogType: TCodegenLogType; Const Msg: String);
  14. end;
  15. { TConvertEDMXApplication }
  16. procedure TConvertEDMXApplication.Usage(Msg : String);
  17. begin
  18. If (Msg<>'') then
  19. Writeln('Error: ',Msg);
  20. Writeln('Usage : ',ExtractFileName(ParamStr(0)),' [options]');
  21. Writeln('Where options is one or more of:');
  22. Writeln('-a --aliases=aliases Schema aliases as comma-separated name=value pairs.');
  23. Writeln(' The form @aliases reads from file "aliases", one alias per line.');
  24. Writeln('-b --basename=classname Name of class to use as base class.');
  25. Writeln('-d --odata=version OData version to use: v2 or v4.');
  26. Writeln('-e --extraunits=extraunits Comma-separated list of unit names to add.');
  27. Writeln('-h --help This message.');
  28. Writeln('-i --input=filename Name of the file to use as input. Mandatory');
  29. Writeln('-o --output=filename Name of the file to use as output.');
  30. Writeln(' (default: input file with extension changed to .pas)');
  31. Writeln('-p --prefix=fieldprefix Text to use as field prefix (default: F)');
  32. Writeln('-u --enumerations=mode How to treat enumerations. Possible values: scoped, prefixtypename, plain');
  33. Writeln('-x --servicesuffix=string When constructing type names, add this to schema name. Default is _');
  34. Writeln('-v --verbose Output some diagnostic messages');
  35. Halt(Ord(Msg<>''));
  36. end;
  37. procedure TConvertEDMXApplication.DoRun;
  38. Var
  39. FConverter : TODataCodeGenerator;
  40. S,FInput,FOutput : String;
  41. begin
  42. StopOnException:=True;
  43. S:=CheckOptions('a:hd:i:o:nb:p:u:vx',['aliases','help','odata:','input:','output:','namespace','basename:','prefix:','verbose','enumerations','servicesuffix'],True);
  44. if (S<>'') then
  45. Usage(S);
  46. if HasOption('h','help') then
  47. Usage('');
  48. FInput:=GetOptionValue('i','input');
  49. FOutput:=GetOptionValue('o','output');
  50. if (FInput='') then
  51. Usage('Need input filename');
  52. if (FOutput='') then
  53. FOutput:=ChangeFileExt(FInput,'.pas');
  54. Case lowercase(GetOptionValue('d','odata')) of
  55. 'v2' : FConverter:=csdl2pas.TEDMX2PasConverter.Create(Self);
  56. 'v4' : FConverter:=edmx2pas.TEDMX2PasConverter.Create(Self);
  57. else
  58. Usage('Unknown OData version :'+GetOptionValue('d','odata'));
  59. end;
  60. try
  61. if HasOption('x','servicesuffix') then
  62. FConverter.ServiceSuffix:=GetOptionValue('x','servicesuffix');
  63. if HasOption('a','aliases') then
  64. begin
  65. S:=GetOptionValue('a','aliases');
  66. if S<>'' then
  67. if S[1]='@' then
  68. FConverter.Aliases.LoadFromFile(Copy(S,2,Length(S)-1))
  69. else
  70. FConverter.Aliases.CommaText:=S;
  71. end;
  72. if HasOption('b','basename') then
  73. FConverter.BaseClassName:=GetOptionValue('b','basename');
  74. FConverter.ExtraUnits:=GetOptionValue('e','extraunits');
  75. if HasOption('p','prefix') then
  76. FConverter.FieldPrefix:=GetOptionValue('p','prefix');
  77. if HasOption('u','enumerations') then
  78. Case lowercase(GetOptionValue('u','enumerations')) of
  79. 'plain' : FConverter.EnumerationMode:=emPlain;
  80. 'scoped' : FConverter.EnumerationMode:=emScoped;
  81. 'prefixtypename' : FConverter.EnumerationMode:=emPrefixTypeName;
  82. else
  83. Usage('Unknown enumeration mode :'+GetOptionValue('u','enumerations'));
  84. end;
  85. if HasOption('v','verbose') then
  86. FConverter.OnLog:=@DoMyLog;
  87. // Go ahead
  88. FConverter.LoadFromFile(FInput);
  89. FConverter.OutputUnitName:=ChangeFileExt(ExtractFileName(Foutput),'');
  90. FConverter.Execute;
  91. FConverter.SaveToFile(FOutput);
  92. finally
  93. FConverter.Free;
  94. end;
  95. Terminate;
  96. end;
  97. Procedure TConvertEDMXApplication.DoMyLog(Sender: TObject;
  98. LogType: TCodegenLogType; Const Msg: String);
  99. begin
  100. Writeln('[',LogType,'] ',Msg);
  101. end;
  102. begin
  103. With TConvertEDMXApplication.Create(Nil) do
  104. try
  105. Initialize;
  106. Run;
  107. finally
  108. Free;
  109. end;
  110. end.