Browse Source

* Register paramdefs in JSONRPC handler manager

git-svn-id: trunk@19004 -
michael 14 years ago
parent
commit
9c434ffedf
1 changed files with 38 additions and 1 deletions
  1. 38 1
      packages/fcl-web/src/jsonrpc/fpjsonrpc.pp

+ 38 - 1
packages/fcl-web/src/jsonrpc/fpjsonrpc.pp

@@ -201,24 +201,30 @@ Type
     FAfterCreate: TJSONRPCHandlerEvent;
     FAfterCreate: TJSONRPCHandlerEvent;
     FArgumentCount: Integer;
     FArgumentCount: Integer;
     FBeforeCreate: TBeforeCreateJSONRPCHandlerEvent;
     FBeforeCreate: TBeforeCreateJSONRPCHandlerEvent;
+    FParamDefs: TJSONParamDefs;
     FPClass: TCustomJSONRPCHandlerClass;
     FPClass: TCustomJSONRPCHandlerClass;
     FDataModuleClass : TDataModuleClass;
     FDataModuleClass : TDataModuleClass;
     FHandlerMethodName: TJSONStringType;
     FHandlerMethodName: TJSONStringType;
     FHandlerClassName: TJSONStringType;
     FHandlerClassName: TJSONStringType;
     procedure CheckNames(const AClassName, AMethodName: TJSONStringType);
     procedure CheckNames(const AClassName, AMethodName: TJSONStringType);
+    function GetParamDefs: TJSONParamDefs;
     procedure SetFPClass(const AValue: TCustomJSONRPCHandlerClass);
     procedure SetFPClass(const AValue: TCustomJSONRPCHandlerClass);
     procedure SetHandlerClassName(const AValue: TJSONStringType);
     procedure SetHandlerClassName(const AValue: TJSONStringType);
     procedure SetHandlerMethodName(const AValue: TJSONStringType);
     procedure SetHandlerMethodName(const AValue: TJSONStringType);
+    procedure SetParamDefs(AValue: TJSONParamDefs);
   protected
   protected
     Function CreateInstance(AOwner : TComponent; Out AContainer : TComponent) : TCustomJSONRPCHandler; virtual;
     Function CreateInstance(AOwner : TComponent; Out AContainer : TComponent) : TCustomJSONRPCHandler; virtual;
     Property DataModuleClass : TDataModuleClass Read FDataModuleClass;
     Property DataModuleClass : TDataModuleClass Read FDataModuleClass;
   Public
   Public
+    Destructor Destroy; override;
+    Function HaveParamDefs : Boolean;
     Property HandlerClassName : TJSONStringType Read FHandlerClassName Write SetHandlerClassName;
     Property HandlerClassName : TJSONStringType Read FHandlerClassName Write SetHandlerClassName;
     Property HandlerMethodName : TJSONStringType Read FHandlerMethodName Write SetHandlerMethodName;
     Property HandlerMethodName : TJSONStringType Read FHandlerMethodName Write SetHandlerMethodName;
     Property HandlerClass : TCustomJSONRPCHandlerClass Read FPClass Write SetFPClass;
     Property HandlerClass : TCustomJSONRPCHandlerClass Read FPClass Write SetFPClass;
     Property BeforeCreate : TBeforeCreateJSONRPCHandlerEvent Read FBeforeCreate Write FBeforeCreate;
     Property BeforeCreate : TBeforeCreateJSONRPCHandlerEvent Read FBeforeCreate Write FBeforeCreate;
     Property AfterCreate : TJSONRPCHandlerEvent Read FAfterCreate Write FAfterCreate;
     Property AfterCreate : TJSONRPCHandlerEvent Read FAfterCreate Write FAfterCreate;
     Property ArgumentCount : Integer Read FArgumentCount Write FArgumentCount;
     Property ArgumentCount : Integer Read FArgumentCount Write FArgumentCount;
+    Property ParamDefs : TJSONParamDefs Read GetParamDefs Write SetParamDefs;
   end;
   end;
 
 
   { TJSONRPCHandlerDefs }
   { TJSONRPCHandlerDefs }
@@ -976,7 +982,8 @@ begin
   FPClass:=AValue;
   FPClass:=AValue;
 end;
 end;
 
 
-procedure TJSONRPCHandlerDef.CheckNames(Const AClassName,AMethodName : TJSONStringType);
+procedure TJSONRPCHandlerDef.CheckNames(const AClassName,
+  AMethodName: TJSONStringType);
 
 
 Var
 Var
   I : Integer;
   I : Integer;
@@ -993,6 +1000,13 @@ begin
     end;
     end;
 end;
 end;
 
 
+function TJSONRPCHandlerDef.GetParamDefs: TJSONParamDefs;
+begin
+  IF (FParamDefs=Nil) then
+    FParamDefs:=TJSONParamDefs.Create(TJSONParamDef);
+  Result:=FParamDefs;
+end;
+
 procedure TJSONRPCHandlerDef.SetHandlerClassName(const AValue: TJSONStringType);
 procedure TJSONRPCHandlerDef.SetHandlerClassName(const AValue: TJSONStringType);
 begin
 begin
   if FHandlerClassName=AValue then exit;
   if FHandlerClassName=AValue then exit;
@@ -1008,6 +1022,17 @@ begin
   FHandlerMethodName:=AValue;
   FHandlerMethodName:=AValue;
 end;
 end;
 
 
+procedure TJSONRPCHandlerDef.SetParamDefs(AValue: TJSONParamDefs);
+begin
+  if FParamDefs=AValue then Exit;
+  IF (FParamDefs=Nil) then
+    FParamDefs:=TJSONParamDefs.Create(TJSONParamDef);
+  if (AValue<>Nil) then
+    FParamDefs.Assign(AValue)
+  else
+    FreeAndNil(FParamDefs);
+end;
+
 function TJSONRPCHandlerDef.CreateInstance(AOwner: TComponent; out
 function TJSONRPCHandlerDef.CreateInstance(AOwner: TComponent; out
   AContainer: TComponent): TCustomJSONRPCHandler;
   AContainer: TComponent): TCustomJSONRPCHandler;
 
 
@@ -1048,6 +1073,17 @@ begin
     FAfterCreate(Self,Result);
     FAfterCreate(Self,Result);
 end;
 end;
 
 
+destructor TJSONRPCHandlerDef.Destroy;
+begin
+  FreeAndNil(FParamDefs);
+  inherited Destroy;
+end;
+
+function TJSONRPCHandlerDef.HaveParamDefs: Boolean;
+begin
+  Result:=Assigned(FParamDefs);
+end;
+
 { TJSONRPCHandlerDefs }
 { TJSONRPCHandlerDefs }
 
 
 function TJSONRPCHandlerDefs.GetH(Index: Integer): TJSONRPCHandlerDef;
 function TJSONRPCHandlerDefs.GetH(Index: Integer): TJSONRPCHandlerDef;
@@ -1158,6 +1194,7 @@ begin
              JSONRPCError(SErrDuplicateRPCCLassMethodHandler,[CN,C.Name]);
              JSONRPCError(SErrDuplicateRPCCLassMethodHandler,[CN,C.Name]);
           D:=AddHandlerDef(CN,C.Name);
           D:=AddHandlerDef(CN,C.Name);
           D.ArgumentCount:=TCustomJSONRPCHandler(C).ParamDefs.Count;
           D.ArgumentCount:=TCustomJSONRPCHandler(C).ParamDefs.Count;
+          D.ParamDefs:=TCustomJSONRPCHandler(C).ParamDefs;
           {$ifdef wmdebug}SendDebug('Registering provider '+C.Name);{$endif}
           {$ifdef wmdebug}SendDebug('Registering provider '+C.Name);{$endif}
           D.FDataModuleClass:=TDataModuleClass(DM.ClassType);
           D.FDataModuleClass:=TDataModuleClass(DM.ClassType);
           end;
           end;