fpc/packages/googleapi/src/googlescript.pp
michael 300db70983 * Updated from latest service descriptions
git-svn-id: trunk@33777 -
2016-05-24 08:35:58 +00:00

810 lines
22 KiB
ObjectPascal

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.