Ignore:
Timestamp:
May 30, 2015, 1:02:36 PM (9 years ago)
Author:
chronos
Message:
  • Added: New test form where general functionality of selected backend can be tested.
  • Added: Basic git backend implementation.
  • Added: Project group form and ability to open/save group of projects as configuration to XML file.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Units/UProject.pas

    r9 r13  
    66
    77uses
    8   Classes, SysUtils, UVCS, UBackend;
     8  Classes, SysUtils, UVCS, UBackend, Contnrs, DOM, XMLRead, XMLWrite, UXMLUtils,
     9  FileUtil;
    910
    1011type
     
    2223  public
    2324    WorkingCopy: TWorkingCopy;
     25    Repository: TRepository;
    2426    procedure Open(Directory: string);
    2527    constructor Create;
    2628    destructor Destroy; override;
     29    procedure LoadXMLNOde(Node: TDOMNode);
     30    procedure SaveXMLNOde(Node: TDOMNode);
    2731    property Backend: TBackend read FBackend write SetBackend;
    2832    property Directory: string read GetDirectory write SetDirectory;
     
    3034  end;
    3135
     36  { TProjects }
     37
     38  TProjects = class(TObjectList)
     39    procedure LoadXMLNode(Node: TDOMNode);
     40    procedure SaveXMLNode(Node: TDOMNode);
     41  end;
     42
     43  { TProjectGroup }
     44
     45  TProjectGroup = class
     46    FileName: string;
     47    Projects: TProjects;
     48    constructor Create;
     49    destructor Destroy; override;
     50    procedure LoadFromFile(FileName: string);
     51    procedure SaveToFile(FileName: string);
     52  end;
     53
    3254
    3355implementation
    3456
    35 uses
    36   USubversion;
     57resourcestring
     58  SWrongFileFormat = 'Wrong file format';
     59
     60{ TProjects }
     61
     62procedure TProjects.LoadXMLNode(Node: TDOMNode);
     63var
     64  NewProject: TProject;
     65  Node2: TDOMNode;
     66begin
     67  Node2 := Node.FirstChild;
     68  while Assigned(Node2) and (Node2.NodeName = 'Project') do begin
     69    NewProject := TProject.Create;
     70    NewProject.LoadXMLNode(Node2);
     71    Add(NewProject);
     72    Node2 := Node2.NextSibling;
     73  end;
     74end;
     75
     76procedure TProjects.SaveXMLNode(Node: TDOMNode);
     77var
     78  I: Integer;
     79  NewNode: TDOMNode;
     80begin
     81  for I := 0 to Count - 1 do begin;
     82    NewNode := Node.OwnerDocument.CreateElement('Project');
     83    Node.AppendChild(NewNode);
     84    TProject(Items[I]).SaveXMLNode(NewNode);
     85  end;
     86end;
     87
     88
     89{ TProjectGroup }
     90
     91constructor TProjectGroup.Create;
     92begin
     93  Projects := TProjects.Create;
     94end;
     95
     96destructor TProjectGroup.Destroy;
     97begin
     98  Projects.Free;
     99  inherited Destroy;
     100end;
     101
     102procedure TProjectGroup.LoadFromFile(FileName: string);
     103var
     104  Doc: TXMLDocument;
     105  RootNode: TDOMNode;
     106  Node: TDOMNode;
     107  Node2: TDOMNode;
     108begin
     109  Self.FileName := FileName;
     110  ReadXMLFile(Doc, UTF8Decode(FileName));
     111  with Doc do try
     112    if Doc.DocumentElement.NodeName <> 'ProjectGroup' then
     113      raise Exception.Create(SWrongFileFormat);
     114    RootNode := Doc.DocumentElement;
     115    with RootNode do begin
     116      Node := FindNode('Projects');
     117      if Assigned(Node) then Projects.LoadXMLNode(Node);
     118    end;
     119  finally
     120    Doc.Free;
     121  end;
     122end;
     123
     124procedure TProjectGroup.SaveToFile(FileName: string);
     125var
     126  NewNode: TDOMNode;
     127  Doc: TXMLDocument;
     128  RootNode: TDOMNode;
     129begin
     130  if FileName = '' then Exit;
     131  Self.FileName := FileName;
     132  Doc := TXMLDocument.Create;
     133  with Doc do try
     134    RootNode := CreateElement('ProjectGroup');
     135    AppendChild(RootNode);
     136    with RootNode do begin
     137      NewNode := OwnerDocument.CreateElement('Projects');
     138      AppendChild(NewNode);
     139      Projects.SaveXMLNode(NewNode);
     140    end;
     141    ForceDirectoriesUTF8(ExtractFileDir(FileName));
     142    WriteXMLFile(Doc, UTF8Decode(FileName));
     143  finally
     144    Doc.Free;
     145  end;
     146end;
    37147
    38148{ TProject }
     
    44154  FreeAndNil(WorkingCopy);
    45155  WorkingCopy := AValue.WorkingCopyClass.Create;
     156  FreeAndNil(Repository);
     157  Repository := AValue.RepositoryClass.Create;
    46158end;
    47159
     
    64176begin
    65177  WorkingCopy.RepositoryURL := AValue;
     178  Repository.Path := AValue;
    66179end;
    67180
     
    74187begin
    75188  WorkingCopy := TWorkingCopy.Create;
     189  Repository := TRepository.Create;
    76190end;
    77191
     
    79193begin
    80194  WorkingCopy.Free;
     195  Repository.Free;
    81196  inherited Destroy;
    82197end;
    83198
     199procedure TProject.LoadXMLNOde(Node: TDOMNode);
     200begin
     201  RepositoryURL := ReadString(Node, 'RepositoryURL', '');
     202  Directory := ReadString(Node, 'Directory', '');
     203end;
     204
     205procedure TProject.SaveXMLNOde(Node: TDOMNode);
     206begin
     207  WriteString(Node, 'RepositoryURL', RepositoryURL);
     208  WriteString(Node, 'Directory', Directory);
     209end;
     210
    84211end.
    85212
Note: See TracChangeset for help on using the changeset viewer.