home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 October / PCWorld_2000-10_cd2.bin / Borland / interbase / IBConsole_src.ZIP / ibconsole / frmuBackupAliasProperties.pas < prev    next >
Pascal/Delphi Source File  |  2000-07-24  |  13KB  |  366 lines

  1. {
  2.  * The contents of this file are subject to the InterBase Public License
  3.  * Version 1.0 (the "License"); you may not use this file except in
  4.  * compliance with the License.
  5.  * 
  6.  * You may obtain a copy of the License at http://www.Inprise.com/IPL.html.
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS IS"
  9.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  10.  * the License for the specific language governing rights and limitations
  11.  * under the License.  The Original Code was created by Inprise
  12.  * Corporation and its predecessors.
  13.  * 
  14.  * Portions created by Inprise Corporation are Copyright (C) Inprise
  15.  * Corporation. All Rights Reserved.
  16.  * 
  17.  * Contributor(s): ______________________________________.
  18. }
  19.  
  20. {****************************************************************
  21. *
  22. *  f r m u B a c k u p A l i a s P r o p e r t i e s
  23. *
  24. ****************************************************************
  25. *  Author: The Client Server Factory Inc.
  26. *  Date:   March 1, 1999
  27. *
  28. *  Description:  This unit provides an interface for editing
  29. *                backup alias properties
  30. *
  31. *****************************************************************
  32. * Revisions:
  33. *
  34. *****************************************************************}
  35. unit frmuBackupAliasProperties;
  36.  
  37. interface
  38.  
  39. uses
  40.   Forms, ExtCtrls, StdCtrls, Classes, Controls, zluibcClasses, ComCtrls,
  41.   SysUtils, Grids, Dialogs, Registry, Windows, Messages, frmuDlgClass;
  42.  
  43. type
  44.   TfrmBackupAliasProperties = class(TDialog)
  45.     lblServerName: TLabel;
  46.     stxServerName: TStaticText;
  47.     lblAliasName: TLabel;
  48.     bvlLine1: TBevel;
  49.     edtAliasName: TEdit;
  50.     sgBackupFiles: TStringGrid;
  51.     lblDBServer: TLabel;
  52.     cbDBServer: TComboBox;
  53.     lblDBAlias: TLabel;
  54.     cbDBAlias: TComboBox;
  55.     btnApply: TButton;
  56.     btnOK: TButton;
  57.     Button1: TButton;
  58.     function FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
  59.     procedure FormCreate(Sender: TObject);
  60.     procedure btnApplyClick(Sender: TObject);
  61.     procedure btnOKClick(Sender: TObject);
  62.     procedure cbDBServerChange(Sender: TObject);
  63.     procedure sgBackupFilesKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  64.     procedure edtAliasNameChange(Sender: TObject);
  65.     procedure sgBackupFilesSetEditText(Sender: TObject; ACol,
  66.       ARow: Integer; const Value: String);
  67.     procedure FormShow(Sender: TObject);
  68.     procedure Button1Click(Sender: TObject);
  69.   private
  70.     { Private declarations }
  71.     FApplyChanges: boolean;
  72.     FCurrSelServer : TibcServerNode;
  73.     FPreviousKeyName : String;
  74.     function VerifyInputData() : boolean;
  75.     procedure WMNCLButtonDown( var Message: TWMNCLBUTTONDOWN ); message WM_NCLBUTTONDOWN ;
  76.   public
  77.     { Public declarations }
  78.     FBackupAliasNode: TibcBackupAliasNode;
  79.     FSourceServerNode: TibcServerNode;    
  80.   end;
  81.  
  82. function EditBackupAliasProperties(const SourceServerNode: TibcServerNode;
  83.                                    var BackupAliasNode: TibcBackupAliasNode): integer;
  84.  
  85. implementation
  86.  
  87. uses
  88.   zluGlobal, zluUtility, frmuMain, frmuMessage, zluContextHelp;
  89.  
  90. {$R *.DFM}
  91.  
  92. {****************************************************************
  93. *
  94. *  E d i t B a c k u p A l i a s P r o p e r t i e s ( )
  95. *
  96. ****************************************************************
  97. *  Author: The Client Server Factory Inc.
  98. *  Date:   March 1, 1999
  99. *
  100. *  Input:   SourceServerNode - currently selected server
  101. *           BackupAliasNode  - currently selected backup alias
  102. *
  103. *  Return:  Integer - specifies whether or not backup alias
  104. *                     properties where modified
  105. *
  106. *  Description: Displays backup alias properties as well as
  107. *               capturing new properties.  This function will
  108. *               apply the new changes, if any.
  109. *
  110. *****************************************************************
  111. * Revisions:
  112. *
  113. *****************************************************************}
  114. function EditBackupAliasProperties(const SourceServerNode: TibcServerNode;
  115.   var BackupAliasNode: TibcBackupAliasNode): integer;
  116. var
  117.   frmBackupAliasProperties: TfrmBackupAliasProperties;
  118.   i: integer;
  119.   lCurrBackupAliasNode: TTreeNode;
  120.   lTmp,
  121.   lCurrLine: string;
  122. begin
  123.   frmBackupAliasProperties := TfrmBackupAliasProperties.Create(Application);
  124.   try
  125.     // set server name and backup alias
  126.     frmBackupAliasProperties.FBackupAliasNode := BackupAliasNode;
  127.     frmBackupAliasProperties.FSourceServerNode:= SourceServerNode;
  128.     frmBackupAliasProperties.stxServerName.Caption := SourceServerNode.NodeName;
  129.     frmBackupAliasProperties.edtAliasName.Text := BackupAliasNode.NodeName;
  130.  
  131.     frmBackupAliasProperties.FCurrSelServer := SourceServerNode;
  132.     frmBackupAliasProperties.FPreviousKeyName := BackupAliasNode.NodeName;
  133.     lCurrBackupAliasNode := frmMain.tvMain.Items.GetNode(SourceServerNode.DatabasesID);
  134.  
  135.     // get list of server aliases and place in dbserver combo box
  136.     for i := 1 to TibcTreeNode(frmMain.tvMain.Items[0].Data).ObjectList.Count - 1 do
  137.     begin
  138.       lTmp := TibcTreeNode(frmMain.tvMain.Items[0].Data).ObjectList.Strings[i];
  139.       lTmp := GetNextField(lTmp, DEL);
  140.       frmBackupAliasProperties.cbDBServer.Items.AddObject(lTmp,
  141.       TibcServerNode(TTreeNode(TibcTreeNode(frmMain.tvMain.Items[0].Data).ObjectList.Objects[i]).Data));
  142.     end;
  143.  
  144.     // get list of database aliases on currently selected server and place in dbalias combo box
  145.     for i := 1 to TibcTreeNode(lCurrBackupAliasNode.Data).ObjectList.Count - 1 do
  146.     begin
  147.       lTmp := TibcDatabaseNode(lCurrBackupAliasNode.Data).ObjectList.Strings[i];
  148.       lTmp := GetNextField(lTmp, DEL);
  149.       frmBackupAliasProperties.cbDBAlias.Items.AddObject(lTmp,
  150.       TibcDatabaseNode(TTreeNode(TibcTreeNode(lCurrBackupAliasNode.Data).ObjectList.Objects[i]).Data));
  151.     end;
  152.  
  153.     // show server and alias in combo boxes
  154.     frmBackupAliasProperties.cbDBServer.ItemIndex := frmBackupAliasProperties.cbDBServer.Items.IndexOf(BackupAliasNode.SourceDBServer);
  155.     frmBackupAliasProperties.cbDBAlias.ItemIndex := frmBackupAliasProperties.cbDBAlias.Items.IndexOf(BackupAliasNode.SourceDBAlias);
  156.  
  157.     // clear stringgrid
  158.     for i := 1 to frmBackupAliasProperties.sgBackupFiles.RowCount do
  159.     begin
  160.       frmBackupAliasProperties.sgBackupFiles.Cells[0,i] := '';
  161.       frmBackupAliasProperties.sgBackupFiles.Cells[1,i] := '';
  162.     end;
  163.  
  164.     // fill in string grid with filename(s) of backup file(s)
  165.     for i := 1 to BackupAliasNode.BackupFiles.Count do
  166.     begin
  167.       lCurrLine := BackupAliasNode.BackupFiles.Strings[i-1];
  168.       frmBackupAliasProperties.sgBackupFiles.Cells[0,i] := zluUtility.GetNextField(lCurrLine,'=');
  169.       frmBackupAliasProperties.sgBackupFiles.RowCount := frmBackupAliasProperties.sgBackupFiles.RowCount + 1;
  170.     end;
  171.  
  172.     // show form
  173.     frmBackupAliasProperties.ShowModal;
  174.     result := SUCCESS;
  175.   finally
  176.     // deallocate memory
  177.     frmBackupAliasProperties.Free;
  178.   end;
  179. end;
  180.  
  181. function TfrmBackupAliasProperties.FormHelp(Command: Word; Data: Integer;
  182.   var CallHelp: Boolean): Boolean;
  183. begin
  184.   CallHelp := False;
  185.   Result := WinHelp(WindowHandle,CONTEXT_HELP_FILE,HELP_CONTEXT,BACKUP_CONFIGURATION_PROPERTIES);
  186. end;
  187.  
  188. procedure TfrmBackupAliasProperties.FormCreate(Sender: TObject);
  189. begin
  190.   inherited;
  191.   FApplyChanges := false;
  192.   sgBackupFiles.Cells[0,0] := 'Backup Filename(s)';
  193. end;
  194.  
  195. procedure TfrmBackupAliasProperties.btnApplyClick(Sender: TObject);
  196. var
  197.   j: integer;
  198.   lRegistry: TRegistry;
  199.  
  200. begin
  201.   if VerifyInputData() then
  202.   begin
  203.     // set new backup alias properties
  204.     Screen.Cursor := crHourGlass;    
  205.     lRegistry := TRegistry.Create;
  206.     FBackupAliasNode.NodeName := edtAliasName.Text;
  207.     FBackupAliasNode.SourceDBServer := cbDBServer.Text;
  208.     FBackupAliasNode.SourceDBAlias := cbDBAlias.Text;
  209.  
  210.     // clear all backup files associated with the current backup alias
  211.     FBackupAliasNode.BackupFiles.Clear;
  212.     for j := 1 to sgBackupFiles.RowCount - 1 do
  213.     begin
  214.       // specify new backup files from stringgrid
  215.       if sgBackupFiles.Cells[0,j] <> '' then
  216.       begin
  217.         if not (IsValidDBName(sgBackupFiles.Cells[0,j])) then
  218.           DisplayMsg(WAR_REMOTE_FILENAME, Format('File: %s', [sgBackupFiles.Cells[0,j]]));
  219.         FBackupAliasNode.BackupFiles.Add(sgBackupFiles.Cells[0,j]);
  220.       end;
  221.     end;
  222.  
  223.     // update registry
  224.     if lRegistry.OpenKey(Format('%s%s\Backup Files\%s',[gRegServersKey,FSourceServerNode.Nodename,FPreviousKeyName]),false) then
  225.     begin
  226.       lRegistry.WriteString('SourceDBServer',FBackupAliasNode.SourceDBServer);
  227.       lRegistry.WriteString('SourceDBAlias',FBackupAliasNode.SourceDBAlias);
  228.       lRegistry.WriteString('BackupFiles',FBackupAliasNode.BackupFiles.Text);
  229.  
  230.       lRegistry.MoveKey(Format('%s%s\Backup Files\%s',[gRegServersKey,FSourceServerNode.Nodename,FPreviousKeyName]),
  231.         Format('%s%s\Backup Files\%s',[gRegServersKey,FSourceServerNode.Nodename,edtAliasName.Text]), true);
  232.  
  233.       lRegistry.CloseKey();
  234.       lRegistry.Free;
  235.       FPreviousKeyName := edtAliasName.Text;
  236.     end;
  237.  
  238.     // update backup alias in treenode
  239.     FBackupAliasNode.NodeName := edtAliasName.Text;
  240.     frmMain.RenameTreeNode(FBackupAliasNode,FBackupAliasNode.NodeName);
  241.     Screen.Cursor := crDefault;    
  242.   end;
  243. end;
  244.  
  245. procedure TfrmBackupAliasProperties.btnOKClick(Sender: TObject);
  246. begin
  247.   if btnApply.enabled then
  248.     btnApply.Click;
  249.   ModalResult := mrOK;
  250. end;
  251.  
  252. procedure TfrmBackupAliasProperties.cbDBServerChange(Sender: TObject);
  253. var
  254.   i: integer;
  255.   lCurrDBAliasesNode: TTreeNode;
  256. begin
  257.   cbDBAlias.Items.Clear;
  258.   lCUrrDBAliasesNode := Nil;
  259.  
  260.   if cbDBServer.ItemIndex <> -1 then
  261.     lCurrDBAliasesNode := frmMain.tvMain.Items.GetNode(TibcServerNode(cbDBServer.Items.Objects[cbDBServer.ItemIndex]).BackupFilesID);
  262.  
  263.   if Assigned(lCurrDBAliasesNode) then
  264.   begin
  265.     for i := 1 to TibcServerNode(lCurrDBAliasesNode.Data).ObjectList.Count - 1 do
  266.     begin
  267.       cbDBAlias.Items.AddObject(TibcTreeNode(lCurrDBAliasesNode.Data).ObjectList.Strings[i],
  268.         TibcBackupAliasNode(TTreeNode(TibcTreeNode(lCurrDBAliasesNode.Data).ObjectList.Objects[i]).Data));
  269.     end;
  270.   end;
  271.   btnApply.Enabled := true;
  272. end;
  273.  
  274. procedure TfrmBackupAliasProperties.sgBackupFilesKeyDown(Sender: TObject;
  275.   var Key: Word; Shift: TShiftState);
  276. begin
  277.   // if ctrl-tab is pressed
  278.   if (Key = VK_TAB) and (ssCtrl in Shift) then
  279.   begin
  280.     if sgBackupFiles.Col < sgBackupFiles.ColCount - 1 then
  281.     begin                              // select next field in stringgrid
  282.       sgBackupFiles.Col := sgBackupFiles.Col + 1;
  283.     end
  284.     else                               // if at end of grid then
  285.     begin                              // add a new row
  286.       if sgBackupFiles.Row = sgBackupFiles.RowCount - 1 then
  287.         sgBackupFiles.RowCount := sgBackupFiles.RowCount + 1;
  288.       sgBackupFiles.Col := 0;
  289.       sgBackupFiles.Row := sgBackupFiles.Row + 1;
  290.     end;
  291.   end;
  292. end;
  293.  
  294. function TfrmBackupAliasProperties.VerifyInputData() : boolean;
  295. var
  296.   lCurrParentNode, lCurrChildNode: TTreeNode;
  297. begin
  298.   result := true;
  299.  
  300.   lCurrParentNode := frmMain.tvMain.Items.GetNode(FCurrSelServer.BackupFilesID);
  301.   lCurrChildNode := lCurrParentNode.GetFirstChild();
  302.   while (lCurrChildNode <> nil) do
  303.   begin
  304.     if (edtAliasName.Text = lCurrChildNode.Text) and (FPreviousKeyName <> lCurrChildNode.Text) then
  305.     begin
  306.       DisplayMsg(WAR_DUPLICATE_DB_ALIAS, '');
  307.       edtAliasName.SetFocus;
  308.       Result := false;
  309.       Exit;
  310.     end;
  311.     lCurrChildNode := lCurrParentNode.GetNextChild(lCurrChildNode);
  312.   end;
  313.  
  314.   if (edtAliasName.Text = '') or (edtAliasName.Text = ' ') then
  315.   begin
  316.     DisplayMsg(ERR_BACKUP_ALIAS, '');
  317.     edtAliasName.SetFocus;
  318.     Result := false;
  319.     Exit;
  320.   end;
  321. end;
  322.  
  323. procedure TfrmBackupAliasProperties.WMNCLButtonDown( var Message: TWMNCLButtonDown );
  324. var
  325.   ScreenPt: TPoint;
  326.   ClientPt: TPoint;
  327. begin
  328.   ScreenPt.X := Message.XCursor;
  329.   ScreenPt.Y := Message.YCursor;
  330.   ClientPt := ScreenToClient( ScreenPt );
  331.   if( ClientPt.X > Width-45 )and (ClientPt.X < Width-29) then
  332.    begin
  333.     WinHelp(WindowHandle,CONTEXT_HELP_FILE,HELP_CONTEXT,BACKUP_CONFIGURATION_PROPERTIES);
  334.     Message.Result := 0;
  335.   end else
  336.    inherited;
  337. end;
  338.  
  339. procedure TfrmBackupAliasProperties.edtAliasNameChange(Sender: TObject);
  340. begin
  341.   inherited;
  342.   btnApply.Enabled := true;
  343. end;
  344.  
  345. procedure TfrmBackupAliasProperties.sgBackupFilesSetEditText(
  346.   Sender: TObject; ACol, ARow: Integer; const Value: String);
  347. begin
  348.   inherited;
  349.   if not btnApply.Enabled then
  350.     btnApply.Enabled := true;
  351. end;
  352.  
  353. procedure TfrmBackupAliasProperties.FormShow(Sender: TObject);
  354. begin
  355.   inherited;
  356.   btnApply.Enabled := false;
  357. end;
  358.  
  359. procedure TfrmBackupAliasProperties.Button1Click(Sender: TObject);
  360. begin
  361.   inherited;
  362.   ModalResult := mrCancel;
  363. end;
  364.  
  365. end.
  366.