fpc/packages/odata/utils/convertedmx.pp
michael 9115dc2521 * OData and Office365 REST API support
git-svn-id: trunk@34097 -
2016-07-11 14:39:59 +00:00

125 lines
4.2 KiB
ObjectPascal

program convertedmx;
uses
classes, sysutils, csdl2pas, custapp, restcodegen,
edmx2pas, odatacodegen, cgs;
Type
{ TConvertEDMXApplication }
TConvertEDMXApplication = Class(TCustomApplication)
private
procedure Usage(Msg: String);
Protected
Procedure DoRun; override;
public
Procedure DoMyLog(Sender: TObject; LogType: TCodegenLogType; Const Msg: String);
end;
{ TConvertEDMXApplication }
procedure TConvertEDMXApplication.Usage(Msg : String);
begin
If (Msg<>'') then
Writeln('Error: ',Msg);
Writeln('Usage : ',ExtractFileName(ParamStr(0)),' [options]');
Writeln('Where options is one or more of:');
Writeln('-a --aliases=aliases Schema aliases as comma-separated name=value pairs.');
Writeln(' The form @aliases reads from file "aliases", one alias per line.');
Writeln('-b --basename=classname Name of class to use as base class.');
Writeln('-d --odata=version OData version to use: v2 or v4.');
Writeln('-e --extraunits=extraunits Comma-separated list of unit names to add.');
Writeln('-h --help This message.');
Writeln('-i --input=filename Name of the file to use as input. Mandatory');
Writeln('-o --output=filename Name of the file to use as output.');
Writeln(' (default: input file with extension changed to .pas)');
Writeln('-p --prefix=fieldprefix Text to use as field prefix (default: F)');
Writeln('-u --enumerations=mode How to treat enumerations. Possible values: scoped, prefixtypename, plain');
Writeln('-x --servicesuffix=string When constructing type names, add this to schema name. Default is _');
Writeln('-v --verbose Output some diagnostic messages');
Halt(Ord(Msg<>''));
end;
procedure TConvertEDMXApplication.DoRun;
Var
FConverter : TODataCodeGenerator;
S,FInput,FOutput : String;
begin
StopOnException:=True;
S:=CheckOptions('a:hd:i:o:nb:p:u:vx',['aliases','help','odata:','input:','output:','namespace','basename:','prefix:','verbose','enumerations','servicesuffix'],True);
if (S<>'') then
Usage(S);
if HasOption('h','help') then
Usage('');
FInput:=GetOptionValue('i','input');
FOutput:=GetOptionValue('o','output');
if (FInput='') then
Usage('Need input filename');
if (FOutput='') then
FOutput:=ChangeFileExt(FInput,'.pas');
Case lowercase(GetOptionValue('d','odata')) of
'v2' : FConverter:=csdl2pas.TEDMX2PasConverter.Create(Self);
'v4' : FConverter:=edmx2pas.TEDMX2PasConverter.Create(Self);
else
Usage('Unknown OData version :'+GetOptionValue('d','odata'));
end;
try
if HasOption('x','servicesuffix') then
FConverter.ServiceSuffix:=GetOptionValue('x','servicesuffix');
if HasOption('a','aliases') then
begin
S:=GetOptionValue('a','aliases');
if S<>'' then
if S[1]='@' then
FConverter.Aliases.LoadFromFile(Copy(S,2,Length(S)-1))
else
FConverter.Aliases.CommaText:=S;
end;
if HasOption('b','basename') then
FConverter.BaseClassName:=GetOptionValue('b','basename');
FConverter.ExtraUnits:=GetOptionValue('e','extraunits');
if HasOption('p','prefix') then
FConverter.FieldPrefix:=GetOptionValue('p','prefix');
if HasOption('u','enumerations') then
Case lowercase(GetOptionValue('u','enumerations')) of
'plain' : FConverter.EnumerationMode:=emPlain;
'scoped' : FConverter.EnumerationMode:=emScoped;
'prefixtypename' : FConverter.EnumerationMode:=emPrefixTypeName;
else
Usage('Unknown enumeration mode :'+GetOptionValue('u','enumerations'));
end;
if HasOption('v','verbose') then
FConverter.OnLog:=@DoMyLog;
// Go ahead
FConverter.LoadFromFile(FInput);
FConverter.OutputUnitName:=ChangeFileExt(ExtractFileName(Foutput),'');
FConverter.Execute;
FConverter.SaveToFile(FOutput);
finally
FConverter.Free;
end;
Terminate;
end;
Procedure TConvertEDMXApplication.DoMyLog(Sender: TObject;
LogType: TCodegenLogType; Const Msg: String);
begin
Writeln('[',LogType,'] ',Msg);
end;
begin
With TConvertEDMXApplication.Create(Nil) do
try
Initialize;
Run;
finally
Free;
end;
end.