diff options
Diffstat (limited to 'packages/googleapi/src/googlescript.pp')
-rw-r--r-- | packages/googleapi/src/googlescript.pp | 809 |
1 files changed, 809 insertions, 0 deletions
diff --git a/packages/googleapi/src/googlescript.pp b/packages/googleapi/src/googlescript.pp new file mode 100644 index 0000000000..63e9d2a7f7 --- /dev/null +++ b/packages/googleapi/src/googlescript.pp @@ -0,0 +1,809 @@ +unit googlescript; +{$MODE objfpc} +{$H+} + +interface + +uses sysutils, classes, googleservice, restbase, googlebase; + +type + + //Top-level schema types + TExecutionRequest = Class; + TOperation = Class; + TStatus = Class; + TExecutionError = Class; + TScriptStackTraceElement = Class; + TExecutionResponse = Class; + TExecutionRequestArray = Array of TExecutionRequest; + TOperationArray = Array of TOperation; + TStatusArray = Array of TStatus; + TExecutionErrorArray = Array of TExecutionError; + TScriptStackTraceElementArray = Array of TScriptStackTraceElement; + TExecutionResponseArray = Array of TExecutionResponse; + //Anonymous types, using auto-generated names + TOperationTypemetadata = Class; + TOperationTyperesponse = Class; + TStatusTypedetailsItem = Class; + TStatusTypedetailsArray = Array of TStatusTypedetailsItem; + TExecutionErrorTypescriptStackTraceElementsArray = Array of TScriptStackTraceElement; + + { -------------------------------------------------------------------- + TExecutionRequest + --------------------------------------------------------------------} + + TExecutionRequest = Class(TGoogleBaseObject) + Private + F_function : String; + Fparameters : TTJSONSchemaArray; + FsessionState : String; + FdevMode : boolean; + Protected + Class Function ExportPropertyName(Const AName : String) : string; override; + //Property setters + Procedure Set_function(AIndex : Integer; const AValue : String); virtual; + Procedure Setparameters(AIndex : Integer; const AValue : TTJSONSchemaArray); virtual; + Procedure SetsessionState(AIndex : Integer; const AValue : String); virtual; + Procedure SetdevMode(AIndex : Integer; const AValue : boolean); virtual; + //2.6.4. bug workaround + {$IFDEF VER2_6} + Procedure SetArrayLength(Const AName : String; ALength : Longint); override; + {$ENDIF VER2_6} + Public + Published + Property _function : String Index 0 Read F_function Write Set_function; + Property parameters : TTJSONSchemaArray Index 8 Read Fparameters Write Setparameters; + Property sessionState : String Index 16 Read FsessionState Write SetsessionState; + Property devMode : boolean Index 24 Read FdevMode Write SetdevMode; + end; + TExecutionRequestClass = Class of TExecutionRequest; + + { -------------------------------------------------------------------- + TOperationTypemetadata + --------------------------------------------------------------------} + + TOperationTypemetadata = Class(TGoogleBaseObject) + Private + Protected + //Property setters + Public + Class Function AllowAdditionalProperties : Boolean; override; + Published + end; + TOperationTypemetadataClass = Class of TOperationTypemetadata; + + { -------------------------------------------------------------------- + TOperationTyperesponse + --------------------------------------------------------------------} + + TOperationTyperesponse = Class(TGoogleBaseObject) + Private + Protected + //Property setters + Public + Class Function AllowAdditionalProperties : Boolean; override; + Published + end; + TOperationTyperesponseClass = Class of TOperationTyperesponse; + + { -------------------------------------------------------------------- + TOperation + --------------------------------------------------------------------} + + TOperation = Class(TGoogleBaseObject) + Private + Fname : String; + Fmetadata : TOperationTypemetadata; + Fdone : boolean; + Ferror : TStatus; + Fresponse : TOperationTyperesponse; + Protected + //Property setters + Procedure Setname(AIndex : Integer; const AValue : String); virtual; + Procedure Setmetadata(AIndex : Integer; const AValue : TOperationTypemetadata); virtual; + Procedure Setdone(AIndex : Integer; const AValue : boolean); virtual; + Procedure Seterror(AIndex : Integer; const AValue : TStatus); virtual; + Procedure Setresponse(AIndex : Integer; const AValue : TOperationTyperesponse); virtual; + Public + Published + Property name : String Index 0 Read Fname Write Setname; + Property metadata : TOperationTypemetadata Index 8 Read Fmetadata Write Setmetadata; + Property done : boolean Index 16 Read Fdone Write Setdone; + Property error : TStatus Index 24 Read Ferror Write Seterror; + Property response : TOperationTyperesponse Index 32 Read Fresponse Write Setresponse; + end; + TOperationClass = Class of TOperation; + + { -------------------------------------------------------------------- + TStatusTypedetailsItem + --------------------------------------------------------------------} + + TStatusTypedetailsItem = Class(TGoogleBaseObject) + Private + Protected + //Property setters + Public + Class Function AllowAdditionalProperties : Boolean; override; + Published + end; + TStatusTypedetailsItemClass = Class of TStatusTypedetailsItem; + + { -------------------------------------------------------------------- + TStatus + --------------------------------------------------------------------} + + TStatus = Class(TGoogleBaseObject) + Private + Fcode : integer; + Fmessage : String; + Fdetails : TStatusTypedetailsArray; + Protected + //Property setters + Procedure Setcode(AIndex : Integer; const AValue : integer); virtual; + Procedure Setmessage(AIndex : Integer; const AValue : String); virtual; + Procedure Setdetails(AIndex : Integer; const AValue : TStatusTypedetailsArray); virtual; + //2.6.4. bug workaround + {$IFDEF VER2_6} + Procedure SetArrayLength(Const AName : String; ALength : Longint); override; + {$ENDIF VER2_6} + Public + Published + Property code : integer Index 0 Read Fcode Write Setcode; + Property message : String Index 8 Read Fmessage Write Setmessage; + Property details : TStatusTypedetailsArray Index 16 Read Fdetails Write Setdetails; + end; + TStatusClass = Class of TStatus; + + { -------------------------------------------------------------------- + TExecutionError + --------------------------------------------------------------------} + + TExecutionError = Class(TGoogleBaseObject) + Private + FscriptStackTraceElements : TExecutionErrorTypescriptStackTraceElementsArray; + FerrorMessage : String; + FerrorType : String; + Protected + //Property setters + Procedure SetscriptStackTraceElements(AIndex : Integer; const AValue : TExecutionErrorTypescriptStackTraceElementsArray); virtual; + Procedure SeterrorMessage(AIndex : Integer; const AValue : String); virtual; + Procedure SeterrorType(AIndex : Integer; const AValue : String); virtual; + //2.6.4. bug workaround + {$IFDEF VER2_6} + Procedure SetArrayLength(Const AName : String; ALength : Longint); override; + {$ENDIF VER2_6} + Public + Published + Property scriptStackTraceElements : TExecutionErrorTypescriptStackTraceElementsArray Index 0 Read FscriptStackTraceElements Write SetscriptStackTraceElements; + Property errorMessage : String Index 8 Read FerrorMessage Write SeterrorMessage; + Property errorType : String Index 16 Read FerrorType Write SeterrorType; + end; + TExecutionErrorClass = Class of TExecutionError; + + { -------------------------------------------------------------------- + TScriptStackTraceElement + --------------------------------------------------------------------} + + TScriptStackTraceElement = Class(TGoogleBaseObject) + Private + F_function : String; + FlineNumber : integer; + Protected + Class Function ExportPropertyName(Const AName : String) : string; override; + //Property setters + Procedure Set_function(AIndex : Integer; const AValue : String); virtual; + Procedure SetlineNumber(AIndex : Integer; const AValue : integer); virtual; + Public + Published + Property _function : String Index 0 Read F_function Write Set_function; + Property lineNumber : integer Index 8 Read FlineNumber Write SetlineNumber; + end; + TScriptStackTraceElementClass = Class of TScriptStackTraceElement; + + { -------------------------------------------------------------------- + TExecutionResponse + --------------------------------------------------------------------} + + TExecutionResponse = Class(TGoogleBaseObject) + Private + Fresult : TJSONSchema; + Protected + //Property setters + Procedure Setresult(AIndex : Integer; const AValue : TJSONSchema); virtual; + Public + Published + Property result : TJSONSchema Index 0 Read Fresult Write Setresult; + end; + TExecutionResponseClass = Class of TExecutionResponse; + + { -------------------------------------------------------------------- + TScriptsResource + --------------------------------------------------------------------} + + TScriptsResource = Class(TGoogleResource) + Public + Class Function ResourceName : String; override; + Class Function DefaultAPI : TGoogleAPIClass; override; + Function Run(scriptId: string; aExecutionRequest : TExecutionRequest) : TOperation; + end; + + + { -------------------------------------------------------------------- + TScriptAPI + --------------------------------------------------------------------} + + TScriptAPI = Class(TGoogleAPI) + Private + FScriptsInstance : TScriptsResource; + Function GetScriptsInstance : TScriptsResource;virtual; + Public + //Override class functions with API info + Class Function APIName : String; override; + Class Function APIVersion : String; override; + Class Function APIRevision : String; override; + Class Function APIID : String; override; + Class Function APITitle : String; override; + Class Function APIDescription : String; override; + Class Function APIOwnerDomain : String; override; + Class Function APIOwnerName : String; override; + Class Function APIIcon16 : String; override; + Class Function APIIcon32 : String; override; + Class Function APIdocumentationLink : String; override; + Class Function APIrootUrl : string; override; + Class Function APIbasePath : string;override; + Class Function APIbaseURL : String;override; + Class Function APIProtocol : string;override; + Class Function APIservicePath : string;override; + Class Function APIbatchPath : String;override; + Class Function APIAuthScopes : TScopeInfoArray;override; + Class Function APINeedsAuth : Boolean;override; + Class Procedure RegisterAPIResources; override; + //Add create function for resources + Function CreateScriptsResource(AOwner : TComponent) : TScriptsResource;virtual;overload; + Function CreateScriptsResource : TScriptsResource;virtual;overload; + //Add default on-demand instances for resources + Property ScriptsResource : TScriptsResource Read GetScriptsInstance; + end; + +implementation + + +{ -------------------------------------------------------------------- + TExecutionRequest + --------------------------------------------------------------------} + + +Procedure TExecutionRequest.Set_function(AIndex : Integer; const AValue : String); + +begin + If (F_function=AValue) then exit; + F_function:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TExecutionRequest.Setparameters(AIndex : Integer; const AValue : TTJSONSchemaArray); + +begin + If (Fparameters=AValue) then exit; + Fparameters:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TExecutionRequest.SetsessionState(AIndex : Integer; const AValue : String); + +begin + If (FsessionState=AValue) then exit; + FsessionState:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TExecutionRequest.SetdevMode(AIndex : Integer; const AValue : boolean); + +begin + If (FdevMode=AValue) then exit; + FdevMode:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Class Function TExecutionRequest.ExportPropertyName(Const AName : String) :String; + +begin + Case AName of + '_function' : Result:='function'; + else + Result:=Inherited ExportPropertyName(AName); + end; +end; + +//2.6.4. bug workaround +{$IFDEF VER2_6} +Procedure TExecutionRequest.SetArrayLength(Const AName : String; ALength : Longint); + +begin + Case AName of + 'parameters' : SetLength(Fparameters,ALength); + else + Inherited SetArrayLength(AName,ALength); + end; +end; +{$ENDIF VER2_6} + + + + +{ -------------------------------------------------------------------- + TOperationTypemetadata + --------------------------------------------------------------------} + + +Class Function TOperationTypemetadata.AllowAdditionalProperties : Boolean; + +begin + Result:=True; +end; + + + +{ -------------------------------------------------------------------- + TOperationTyperesponse + --------------------------------------------------------------------} + + +Class Function TOperationTyperesponse.AllowAdditionalProperties : Boolean; + +begin + Result:=True; +end; + + + +{ -------------------------------------------------------------------- + TOperation + --------------------------------------------------------------------} + + +Procedure TOperation.Setname(AIndex : Integer; const AValue : String); + +begin + If (Fname=AValue) then exit; + Fname:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TOperation.Setmetadata(AIndex : Integer; const AValue : TOperationTypemetadata); + +begin + If (Fmetadata=AValue) then exit; + Fmetadata:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TOperation.Setdone(AIndex : Integer; const AValue : boolean); + +begin + If (Fdone=AValue) then exit; + Fdone:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TOperation.Seterror(AIndex : Integer; const AValue : TStatus); + +begin + If (Ferror=AValue) then exit; + Ferror:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TOperation.Setresponse(AIndex : Integer; const AValue : TOperationTyperesponse); + +begin + If (Fresponse=AValue) then exit; + Fresponse:=AValue; + MarkPropertyChanged(AIndex); +end; + + + + + +{ -------------------------------------------------------------------- + TStatusTypedetailsItem + --------------------------------------------------------------------} + + +Class Function TStatusTypedetailsItem.AllowAdditionalProperties : Boolean; + +begin + Result:=True; +end; + + + +{ -------------------------------------------------------------------- + TStatus + --------------------------------------------------------------------} + + +Procedure TStatus.Setcode(AIndex : Integer; const AValue : integer); + +begin + If (Fcode=AValue) then exit; + Fcode:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TStatus.Setmessage(AIndex : Integer; const AValue : String); + +begin + If (Fmessage=AValue) then exit; + Fmessage:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TStatus.Setdetails(AIndex : Integer; const AValue : TStatusTypedetailsArray); + +begin + If (Fdetails=AValue) then exit; + Fdetails:=AValue; + MarkPropertyChanged(AIndex); +end; + + +//2.6.4. bug workaround +{$IFDEF VER2_6} +Procedure TStatus.SetArrayLength(Const AName : String; ALength : Longint); + +begin + Case AName of + 'details' : SetLength(Fdetails,ALength); + else + Inherited SetArrayLength(AName,ALength); + end; +end; +{$ENDIF VER2_6} + + + + +{ -------------------------------------------------------------------- + TExecutionError + --------------------------------------------------------------------} + + +Procedure TExecutionError.SetscriptStackTraceElements(AIndex : Integer; const AValue : TExecutionErrorTypescriptStackTraceElementsArray); + +begin + If (FscriptStackTraceElements=AValue) then exit; + FscriptStackTraceElements:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TExecutionError.SeterrorMessage(AIndex : Integer; const AValue : String); + +begin + If (FerrorMessage=AValue) then exit; + FerrorMessage:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TExecutionError.SeterrorType(AIndex : Integer; const AValue : String); + +begin + If (FerrorType=AValue) then exit; + FerrorType:=AValue; + MarkPropertyChanged(AIndex); +end; + + +//2.6.4. bug workaround +{$IFDEF VER2_6} +Procedure TExecutionError.SetArrayLength(Const AName : String; ALength : Longint); + +begin + Case AName of + 'scriptstacktraceelements' : SetLength(FscriptStackTraceElements,ALength); + else + Inherited SetArrayLength(AName,ALength); + end; +end; +{$ENDIF VER2_6} + + + + +{ -------------------------------------------------------------------- + TScriptStackTraceElement + --------------------------------------------------------------------} + + +Procedure TScriptStackTraceElement.Set_function(AIndex : Integer; const AValue : String); + +begin + If (F_function=AValue) then exit; + F_function:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Procedure TScriptStackTraceElement.SetlineNumber(AIndex : Integer; const AValue : integer); + +begin + If (FlineNumber=AValue) then exit; + FlineNumber:=AValue; + MarkPropertyChanged(AIndex); +end; + + + +Class Function TScriptStackTraceElement.ExportPropertyName(Const AName : String) :String; + +begin + Case AName of + '_function' : Result:='function'; + else + Result:=Inherited ExportPropertyName(AName); + end; +end; + + + + +{ -------------------------------------------------------------------- + TExecutionResponse + --------------------------------------------------------------------} + + +Procedure TExecutionResponse.Setresult(AIndex : Integer; const AValue : TJSONSchema); + +begin + If (Fresult=AValue) then exit; + Fresult:=AValue; + MarkPropertyChanged(AIndex); +end; + + + + + +{ -------------------------------------------------------------------- + TScriptsResource + --------------------------------------------------------------------} + + +Class Function TScriptsResource.ResourceName : String; + +begin + Result:='scripts'; +end; + +Class Function TScriptsResource.DefaultAPI : TGoogleAPIClass; + +begin + Result:=TscriptAPI; +end; + +Function TScriptsResource.Run(scriptId: string; aExecutionRequest : TExecutionRequest) : TOperation; + +Const + _HTTPMethod = 'POST'; + _Path = 'v1/scripts/{scriptId}:run'; + _Methodid = 'script.scripts.run'; + +Var + _P : String; + +begin + _P:=SubstitutePath(_Path,['scriptId',scriptId]); + Result:=ServiceCall(_HTTPMethod,_P,'',aExecutionRequest,TOperation) as TOperation; +end; + + + +{ -------------------------------------------------------------------- + TScriptAPI + --------------------------------------------------------------------} + +Class Function TScriptAPI.APIName : String; + +begin + Result:='script'; +end; + +Class Function TScriptAPI.APIVersion : String; + +begin + Result:='v1'; +end; + +Class Function TScriptAPI.APIRevision : String; + +begin + Result:='20160426'; +end; + +Class Function TScriptAPI.APIID : String; + +begin + Result:='script:v1'; +end; + +Class Function TScriptAPI.APITitle : String; + +begin + Result:='Google Apps Script Execution API'; +end; + +Class Function TScriptAPI.APIDescription : String; + +begin + Result:='Executes Google Apps Script projects.'; +end; + +Class Function TScriptAPI.APIOwnerDomain : String; + +begin + Result:='google.com'; +end; + +Class Function TScriptAPI.APIOwnerName : String; + +begin + Result:='Google'; +end; + +Class Function TScriptAPI.APIIcon16 : String; + +begin + Result:='http://www.google.com/images/icons/product/search-16.gif'; +end; + +Class Function TScriptAPI.APIIcon32 : String; + +begin + Result:='http://www.google.com/images/icons/product/search-32.gif'; +end; + +Class Function TScriptAPI.APIdocumentationLink : String; + +begin + Result:='https://developers.google.com/apps-script/execution/rest/v1/scripts/run'; +end; + +Class Function TScriptAPI.APIrootUrl : string; + +begin + Result:='https://script.googleapis.com/'; +end; + +Class Function TScriptAPI.APIbasePath : string; + +begin + Result:=''; +end; + +Class Function TScriptAPI.APIbaseURL : String; + +begin + Result:='https://script.googleapis.com/'; +end; + +Class Function TScriptAPI.APIProtocol : string; + +begin + Result:='rest'; +end; + +Class Function TScriptAPI.APIservicePath : string; + +begin + Result:=''; +end; + +Class Function TScriptAPI.APIbatchPath : String; + +begin + Result:='batch'; +end; + +Class Function TScriptAPI.APIAuthScopes : TScopeInfoArray; + +begin + SetLength(Result,11); + Result[0].Name:='https://mail.google.com/'; + Result[0].Description:='View and manage your mail'; + Result[1].Name:='https://www.google.com/calendar/feeds'; + Result[1].Description:='Manage your calendars'; + Result[2].Name:='https://www.google.com/m8/feeds'; + Result[2].Description:='Manage your contacts'; + Result[3].Name:='https://www.googleapis.com/auth/admin.directory.group'; + Result[3].Description:='View and manage the provisioning of groups on your domain'; + Result[4].Name:='https://www.googleapis.com/auth/admin.directory.user'; + Result[4].Description:='View and manage the provisioning of users on your domain'; + Result[5].Name:='https://www.googleapis.com/auth/drive'; + Result[5].Description:='View and manage the files in your Google Drive'; + Result[6].Name:='https://www.googleapis.com/auth/forms'; + Result[6].Description:='View and manage your forms in Google Drive'; + Result[7].Name:='https://www.googleapis.com/auth/forms.currentonly'; + Result[7].Description:='View and manage forms that this application has been installed in'; + Result[8].Name:='https://www.googleapis.com/auth/groups'; + Result[8].Description:='View and manage your Google Groups'; + Result[9].Name:='https://www.googleapis.com/auth/spreadsheets'; + Result[9].Description:='View and manage your spreadsheets in Google Drive'; + Result[10].Name:='https://www.googleapis.com/auth/userinfo.email'; + Result[10].Description:='View your email address'; + +end; + +Class Function TScriptAPI.APINeedsAuth : Boolean; + +begin + Result:=True; +end; + +Class Procedure TScriptAPI.RegisterAPIResources; + +begin + TExecutionRequest.RegisterObject; + TOperationTypemetadata.RegisterObject; + TOperationTyperesponse.RegisterObject; + TOperation.RegisterObject; + TStatusTypedetailsItem.RegisterObject; + TStatus.RegisterObject; + TExecutionError.RegisterObject; + TScriptStackTraceElement.RegisterObject; + TExecutionResponse.RegisterObject; +end; + + +Function TScriptAPI.GetScriptsInstance : TScriptsResource; + +begin + if (FScriptsInstance=Nil) then + FScriptsInstance:=CreateScriptsResource; + Result:=FScriptsInstance; +end; + +Function TScriptAPI.CreateScriptsResource : TScriptsResource; + +begin + Result:=CreateScriptsResource(Self); +end; + + +Function TScriptAPI.CreateScriptsResource(AOwner : TComponent) : TScriptsResource; + +begin + Result:=TScriptsResource.Create(AOwner); + Result.API:=Self.API; +end; + + + +initialization + TScriptAPI.RegisterAPI; +end. |