Ignore:
Timestamp:
Apr 2, 2012, 3:59:58 PM (13 years ago)
Author:
chronos
Message:
  • Added: Unfinished installable module management.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Client/USystem.pas

    r46 r51  
    1111
    1212const
     13  SystemModuleObject = 'SystemModule';
    1314  ObjectGroupTable = 'ObjectGroup';
    1415  ObjectTable = 'Object';
     
    3637  vtTime, vtDate, vtColor, vtHyperlink, vtRelationOne, vtRelationMany, vtPassword);
    3738
    38   TChronisType = class;
    3939  TChronisObject = class;
    4040  TChronisBase = class;
     
    8888  end;
    8989
    90   TChronisType = class
    91   private
    92     ParentId: Integer;
    93   public
    94     Id: Integer;
    95     DbType: string;
    96     TypeIndex: Integer;
    97   end;
    98 
    99   { TChronisTypeList }
    100 
    101   TChronisTypeList = class(TListObject)
    102     function FindById(Id: Integer): TChronisType;
    103     function FindByTypeIndex(Id: Integer): TChronisType;
     90  { TChronisModuleList }
     91
     92  TChronisModuleList = class(TListObject) // TListObject<TChronisModule>
     93    Base: TChronisBase;
     94    procedure UpdateList;
     95    procedure Install;
     96    procedure Uninstall;
    10497  end;
    10598
     
    113106    Types: TChronisTypeList;
    114107    Client: TChronisClient;
    115     Modules: TListObject; // TListObject<TChronisModule>
     108    Modules: TChronisModuleList;
    116109    ModuleSystem: TChronisModule;
    117110    procedure RegisterModule(ModuleClass: TChronisModuleClass);
     
    168161end;
    169162
    170 { TChronisTypeList }
    171 
    172 function TChronisTypeList.FindById(Id: Integer): TChronisType;
    173 var
    174   I: Integer;
    175 begin
    176   I := 0;
    177   while (I < Count) and (TChronisType(Items[I]).Id <> Id) do Inc(I);
    178   if I < Count then Result := TChronisType(Items[I])
    179     else Result := nil;
    180 end;
    181 
    182 function TChronisTypeList.FindByTypeIndex(Id: Integer): TChronisType;
    183 var
    184   I: Integer;
    185 begin
    186   I := 0;
    187   while (I < Count) and (TChronisType(Items[I]).TypeIndex <> Id) do Inc(I);
    188   if I < Count then Result := TChronisType(Items[I])
    189     else Result := nil;
    190 end;
    191 
    192163{ TReportLine }
    193164
     
    277248    Client.Connect;
    278249    if Client.Connected then begin
    279       if IsDatabaseEmpty then ModuleSystem.Install;
     250      if not ModuleSystem.IsInstalled then ModuleSystem.Install;
    280251      LoadTypes;
    281252    end else FActive := False;
     
    697668begin
    698669  Types := TChronisTypeList.Create;
    699   Modules := TListObject.Create;
     670  Modules := TChronisModuleList.Create;
     671  Modules.Base := Self;
    700672end;
    701673
     
    775747end;
    776748
     749{ TChronisModuleList }
     750
     751procedure TChronisModuleList.UpdateList;
     752var
     753  I: Integer;
     754  NewObject: TObjectProxy;
     755  List: TListProxy;
     756begin
     757  List := TListProxy.Create;
     758  List.Client := Base.Client;
     759  List.SchemaName := Base.Client.Schema;
     760  NewObject := TObjectProxy.Create;
     761  NewObject.Client := Base.Client;
     762  for I := 0 to Count - 1 do
     763  with TChronisModule(Items[I]) do begin
     764    List.Condition := 'SysName="' + SysName + '"';
     765    List.Load;
     766    if List.Objects.Count > 0 then
     767      NewObject.Id := StrToInt(TObjectProxy(List.Objects[0]).Properties.Values['Id'])
     768      else NewObject.Id := 0;
     769    NewObject.SchemaName := Base.Client.Schema;
     770    NewObject.ObjectName := SystemModuleObject;
     771    NewObject.Properties.Add('SysName', SysName);
     772    NewObject.Properties.Add('Name', Name);
     773    NewObject.Properties.Add('Version', Version);
     774    NewObject.Properties.Add('License', License);
     775    NewObject.Properties.Add('Creator', Creator);
     776    NewObject.Properties.Add('HomePage', HomePage);
     777    NewObject.Save;
     778  end;
     779  NewObject.Free;
     780  List.Free;
     781end;
     782
     783procedure TChronisModuleList.Install;
     784var
     785  NewType: TChronisType;
     786begin
     787  NewType := TChronisType.Create;
     788  NewType.Client := Base.Client;
     789  NewType.Name := SystemModuleObject;
     790  NewType.Properties.Add('SysName', 'String');
     791  NewType.Properties.Add('Name', 'String');
     792  NewType.Properties.Add('Version', 'String');
     793  NewType.Properties.Add('License', 'String');
     794  NewType.Properties.Add('Creator', 'String');
     795  NewType.Properties.Add('HomePage', 'String');
     796  NewType.Properties.Add('Installed', 'Boolean');
     797  NewType.Define;
     798end;
     799
     800procedure TChronisModuleList.Uninstall;
     801var
     802  NewType: TChronisType;
     803begin
     804  NewType := TChronisType.Create;
     805  NewType.Client := Base.Client;
     806  NewType.Name := SystemModuleObject;
     807  NewType.Undefine;
     808end;
     809
     810
    777811end.
    778812
Note: See TracChangeset for help on using the changeset viewer.