* SQLDB REst bridge CSV Client demo

git-svn-id: trunk@60646 -
This commit is contained in:
michael 2019-03-10 11:02:28 +00:00
parent f31e481ae1
commit 0f6b74697b
7 changed files with 1027 additions and 0 deletions

6
.gitattributes vendored
View File

@ -1703,6 +1703,12 @@ components/fpweb/demo/bufclient/bufclient.lpr svneol=native#text/plain
components/fpweb/demo/bufclient/bufclient.res -text
components/fpweb/demo/bufclient/frmmain.lfm svneol=native#text/plain
components/fpweb/demo/bufclient/frmmain.pp svneol=native#text/plain
components/fpweb/demo/csvclient/csvclient.ico -text
components/fpweb/demo/csvclient/csvclient.lpi svneol=native#text/plain
components/fpweb/demo/csvclient/csvclient.lpr svneol=native#text/plain
components/fpweb/demo/csvclient/csvclient.res -text
components/fpweb/demo/csvclient/frmmain.lfm svneol=native#text/plain
components/fpweb/demo/csvclient/frmmain.pp svneol=native#text/plain
components/fpweb/demo/jsonclient/frmmain.lfm svneol=native#text/plain
components/fpweb/demo/jsonclient/frmmain.pp svneol=native#text/plain
components/fpweb/demo/jsonclient/jsonclient.ico -text

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="11"/>
<General>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="csvclient"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<XPManifest>
<DpiAware Value="True"/>
</XPManifest>
<Icon Value="0"/>
</General>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="0"/>
</RunParams>
<RequiredPackages Count="4">
<Item1>
<PackageName Value="SynEdit"/>
</Item1>
<Item2>
<PackageName Value="weblaz"/>
</Item2>
<Item3>
<PackageName Value="FCL"/>
</Item3>
<Item4>
<PackageName Value="LCL"/>
</Item4>
</RequiredPackages>
<Units Count="2">
<Unit0>
<Filename Value="csvclient.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="frmmain.pp"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="csvclient"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Linking>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,22 @@
program csvclient;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, frmmain
{ you can add units after this };
{$R *.res}
begin
RequireDerivedFormResource:=True;
Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

Binary file not shown.

View File

@ -0,0 +1,728 @@
object MainForm: TMainForm
Left = 489
Height = 368
Top = 180
Width = 600
ActiveControl = PCData
Caption = 'SQLDB REST Bridge BufDataset client'
ClientHeight = 368
ClientWidth = 600
Constraints.MinWidth = 600
SessionProperties = 'EPasword.Text;EURL.Text;EUserName.Text;Height;Left;Top;Width'
LCLVersion = '2.1.0.0'
object GBServer: TGroupBox
Left = 0
Height = 96
Top = 0
Width = 600
Align = alTop
Caption = 'Server Connection'
ClientHeight = 78
ClientWidth = 598
TabOrder = 0
object EURL: TEdit
Left = 88
Height = 27
Top = 8
Width = 497
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
Text = 'http://localhost:3000/'
TextHint = 'URL for SQLDB Rest bridge server'
end
object LEURL: TLabel
Left = 8
Height = 24
Top = 8
Width = 69
Alignment = taRightJustify
AutoSize = False
Caption = 'Base URL'
FocusControl = EURL
Layout = tlCenter
ParentColor = False
end
object LUserName: TLabel
Left = 0
Height = 27
Top = 40
Width = 77
Alignment = taRightJustify
AutoSize = False
Caption = 'Username'
FocusControl = EUserName
Layout = tlCenter
ParentColor = False
end
object EUserName: TEdit
Left = 88
Height = 27
Top = 40
Width = 120
TabOrder = 1
TextHint = 'User name'
end
object LPassword: TLabel
Left = 208
Height = 22
Top = 42
Width = 64
Alignment = taRightJustify
AutoSize = False
Caption = 'Password'
Layout = tlCenter
ParentColor = False
end
object EPassword: TEdit
Left = 288
Height = 27
Top = 40
Width = 136
EchoMode = emPassword
PasswordChar = '*'
TabOrder = 2
TextHint = 'Password'
end
object BGetresources: TButton
Left = 449
Height = 25
Top = 42
Width = 136
Anchors = [akTop, akRight]
Caption = 'Get Resource list'
OnClick = BGetresourcesClick
TabOrder = 3
end
end
object LBResources: TListBox
Left = 0
Height = 272
Top = 96
Width = 100
Align = alLeft
ItemHeight = 0
ScrollWidth = 98
TabOrder = 1
TopIndex = -1
end
object PResource: TPanel
Left = 100
Height = 272
Top = 96
Width = 500
Align = alClient
BevelOuter = bvNone
ClientHeight = 272
ClientWidth = 500
TabOrder = 2
object PData: TPanel
Left = 0
Height = 39
Top = 0
Width = 500
Align = alTop
BevelOuter = bvNone
ClientHeight = 39
ClientWidth = 500
TabOrder = 0
object NavResource: TDBNavigator
Left = 8
Height = 25
Top = 8
Width = 241
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsScaleChilds
ChildSizing.EnlargeVertical = crsScaleChilds
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 100
ClientHeight = 25
ClientWidth = 241
DataSource = DSResource
Options = []
TabOrder = 0
end
object BFetchResource: TButton
Left = 355
Height = 25
Top = 8
Width = 131
Anchors = [akTop, akRight]
Caption = 'Get Resource data'
OnClick = BFetchResourceClick
TabOrder = 1
end
end
object PCData: TPageControl
Left = 0
Height = 233
Top = 39
Width = 500
ActivePage = TSGrid
Align = alClient
TabIndex = 0
TabOrder = 1
object TSGrid: TTabSheet
Caption = 'Grid view'
ClientHeight = 198
ClientWidth = 494
object GResource: TDBGrid
Left = 0
Height = 198
Top = 0
Width = 494
Align = alClient
Color = clWindow
Columns = <>
DataSource = DSResource
TabOrder = 0
end
end
object TSRaw: TTabSheet
Caption = 'Raw Data'
ClientHeight = 198
ClientWidth = 494
inline SERawData: TSynEdit
Left = 0
Height = 198
Top = 0
Width = 494
Align = alClient
Font.Height = 13
Font.Name = 'DejaVu Sans Mono'
Font.Pitch = fpFixed
Font.Quality = fqNonAntialiased
ParentColor = False
ParentFont = False
TabOrder = 0
Gutter.Width = 57
Gutter.MouseActions = <>
RightGutter.Width = 0
RightGutter.MouseActions = <>
Highlighter = SHXML
Keystrokes = <
item
Command = ecUp
ShortCut = 38
end
item
Command = ecSelUp
ShortCut = 8230
end
item
Command = ecScrollUp
ShortCut = 16422
end
item
Command = ecDown
ShortCut = 40
end
item
Command = ecSelDown
ShortCut = 8232
end
item
Command = ecScrollDown
ShortCut = 16424
end
item
Command = ecLeft
ShortCut = 37
end
item
Command = ecSelLeft
ShortCut = 8229
end
item
Command = ecWordLeft
ShortCut = 16421
end
item
Command = ecSelWordLeft
ShortCut = 24613
end
item
Command = ecRight
ShortCut = 39
end
item
Command = ecSelRight
ShortCut = 8231
end
item
Command = ecWordRight
ShortCut = 16423
end
item
Command = ecSelWordRight
ShortCut = 24615
end
item
Command = ecPageDown
ShortCut = 34
end
item
Command = ecSelPageDown
ShortCut = 8226
end
item
Command = ecPageBottom
ShortCut = 16418
end
item
Command = ecSelPageBottom
ShortCut = 24610
end
item
Command = ecPageUp
ShortCut = 33
end
item
Command = ecSelPageUp
ShortCut = 8225
end
item
Command = ecPageTop
ShortCut = 16417
end
item
Command = ecSelPageTop
ShortCut = 24609
end
item
Command = ecLineStart
ShortCut = 36
end
item
Command = ecSelLineStart
ShortCut = 8228
end
item
Command = ecEditorTop
ShortCut = 16420
end
item
Command = ecSelEditorTop
ShortCut = 24612
end
item
Command = ecLineEnd
ShortCut = 35
end
item
Command = ecSelLineEnd
ShortCut = 8227
end
item
Command = ecEditorBottom
ShortCut = 16419
end
item
Command = ecSelEditorBottom
ShortCut = 24611
end
item
Command = ecToggleMode
ShortCut = 45
end
item
Command = ecCopy
ShortCut = 16429
end
item
Command = ecPaste
ShortCut = 8237
end
item
Command = ecDeleteChar
ShortCut = 46
end
item
Command = ecCut
ShortCut = 8238
end
item
Command = ecDeleteLastChar
ShortCut = 8
end
item
Command = ecDeleteLastChar
ShortCut = 8200
end
item
Command = ecDeleteLastWord
ShortCut = 16392
end
item
Command = ecUndo
ShortCut = 32776
end
item
Command = ecRedo
ShortCut = 40968
end
item
Command = ecLineBreak
ShortCut = 13
end
item
Command = ecSelectAll
ShortCut = 16449
end
item
Command = ecCopy
ShortCut = 16451
end
item
Command = ecBlockIndent
ShortCut = 24649
end
item
Command = ecLineBreak
ShortCut = 16461
end
item
Command = ecInsertLine
ShortCut = 16462
end
item
Command = ecDeleteWord
ShortCut = 16468
end
item
Command = ecBlockUnindent
ShortCut = 24661
end
item
Command = ecPaste
ShortCut = 16470
end
item
Command = ecCut
ShortCut = 16472
end
item
Command = ecDeleteLine
ShortCut = 16473
end
item
Command = ecDeleteEOL
ShortCut = 24665
end
item
Command = ecUndo
ShortCut = 16474
end
item
Command = ecRedo
ShortCut = 24666
end
item
Command = ecGotoMarker0
ShortCut = 16432
end
item
Command = ecGotoMarker1
ShortCut = 16433
end
item
Command = ecGotoMarker2
ShortCut = 16434
end
item
Command = ecGotoMarker3
ShortCut = 16435
end
item
Command = ecGotoMarker4
ShortCut = 16436
end
item
Command = ecGotoMarker5
ShortCut = 16437
end
item
Command = ecGotoMarker6
ShortCut = 16438
end
item
Command = ecGotoMarker7
ShortCut = 16439
end
item
Command = ecGotoMarker8
ShortCut = 16440
end
item
Command = ecGotoMarker9
ShortCut = 16441
end
item
Command = ecSetMarker0
ShortCut = 24624
end
item
Command = ecSetMarker1
ShortCut = 24625
end
item
Command = ecSetMarker2
ShortCut = 24626
end
item
Command = ecSetMarker3
ShortCut = 24627
end
item
Command = ecSetMarker4
ShortCut = 24628
end
item
Command = ecSetMarker5
ShortCut = 24629
end
item
Command = ecSetMarker6
ShortCut = 24630
end
item
Command = ecSetMarker7
ShortCut = 24631
end
item
Command = ecSetMarker8
ShortCut = 24632
end
item
Command = ecSetMarker9
ShortCut = 24633
end
item
Command = EcFoldLevel1
ShortCut = 41009
end
item
Command = EcFoldLevel2
ShortCut = 41010
end
item
Command = EcFoldLevel3
ShortCut = 41011
end
item
Command = EcFoldLevel4
ShortCut = 41012
end
item
Command = EcFoldLevel5
ShortCut = 41013
end
item
Command = EcFoldLevel6
ShortCut = 41014
end
item
Command = EcFoldLevel7
ShortCut = 41015
end
item
Command = EcFoldLevel8
ShortCut = 41016
end
item
Command = EcFoldLevel9
ShortCut = 41017
end
item
Command = EcFoldLevel0
ShortCut = 41008
end
item
Command = EcFoldCurrent
ShortCut = 41005
end
item
Command = EcUnFoldCurrent
ShortCut = 41003
end
item
Command = EcToggleMarkupWord
ShortCut = 32845
end
item
Command = ecNormalSelect
ShortCut = 24654
end
item
Command = ecColumnSelect
ShortCut = 24643
end
item
Command = ecLineSelect
ShortCut = 24652
end
item
Command = ecTab
ShortCut = 9
end
item
Command = ecShiftTab
ShortCut = 8201
end
item
Command = ecMatchBracket
ShortCut = 24642
end
item
Command = ecColSelUp
ShortCut = 40998
end
item
Command = ecColSelDown
ShortCut = 41000
end
item
Command = ecColSelLeft
ShortCut = 40997
end
item
Command = ecColSelRight
ShortCut = 40999
end
item
Command = ecColSelPageDown
ShortCut = 40994
end
item
Command = ecColSelPageBottom
ShortCut = 57378
end
item
Command = ecColSelPageUp
ShortCut = 40993
end
item
Command = ecColSelPageTop
ShortCut = 57377
end
item
Command = ecColSelLineStart
ShortCut = 40996
end
item
Command = ecColSelLineEnd
ShortCut = 40995
end
item
Command = ecColSelEditorTop
ShortCut = 57380
end
item
Command = ecColSelEditorBottom
ShortCut = 57379
end>
MouseActions = <>
MouseTextActions = <>
MouseSelActions = <>
Lines.Strings = (
''
)
VisibleSpecialChars = [vscSpace, vscTabAtLast]
SelectedColor.BackPriority = 50
SelectedColor.ForePriority = 50
SelectedColor.FramePriority = 50
SelectedColor.BoldPriority = 50
SelectedColor.ItalicPriority = 50
SelectedColor.UnderlinePriority = 50
SelectedColor.StrikeOutPriority = 50
BracketHighlightStyle = sbhsBoth
BracketMatchColor.Background = clNone
BracketMatchColor.Foreground = clNone
BracketMatchColor.Style = [fsBold]
FoldedCodeColor.Background = clNone
FoldedCodeColor.Foreground = clGray
FoldedCodeColor.FrameColor = clGray
MouseLinkColor.Background = clNone
MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone
inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterMarks1: TSynGutterMarks
Width = 24
MouseActions = <>
end
object SynGutterLineNumber1: TSynGutterLineNumber
Width = 17
MouseActions = <>
MarkupInfo.Background = clBtnFace
MarkupInfo.Foreground = clNone
DigitCount = 2
ShowOnlyLineNumbersMultiplesOf = 1
ZeroStart = False
LeadingZeros = False
end
object SynGutterChanges1: TSynGutterChanges
Width = 4
MouseActions = <>
ModifiedColor = 59900
SavedColor = clGreen
end
object SynGutterSeparator1: TSynGutterSeparator
Width = 2
MouseActions = <>
MarkupInfo.Background = clWhite
MarkupInfo.Foreground = clGray
end
object SynGutterCodeFolding1: TSynGutterCodeFolding
MouseActions = <>
MarkupInfo.Background = clNone
MarkupInfo.Foreground = clGray
MouseActionsExpanded = <>
MouseActionsCollapsed = <>
end
end
end
end
end
end
object DSResource: TDataSource
DataSet = CSVResource
left = 341
top = 207
end
object PSMain: TIniPropStorage
StoredValues = <>
OnSaveProperties = PSMainSaveProperties
OnRestoreProperties = PSMainRestoreProperties
left = 521
top = 113
end
object HTCResource: TFPHTTPClient
KeepConnection = False
IOTimeout = 0
HTTPversion = '1.1'
AllowRedirect = False
left = 389
top = 96
end
object SHXML: TSynXMLSyn
DefaultFilter = 'XML Document (*.xml,*.xsd,*.xsl,*.xslt,*.dtd)|*.xml;*.xsd;*.xsl;*.xslt;*.dtd'
Enabled = False
WantBracesParsed = False
left = 269
top = 189
end
object CSVResource: TCSVDataset
FieldDefs = <>
CSVOptions.FirstLineAsFieldNames = True
CSVOptions.DefaultFieldLength = 255
CSVOptions.Delimiter = ','
CSVOptions.QuoteChar = '"'
CSVOptions.LineEnding = #10
CSVOptions.IgnoreOuterWhitespace = False
CSVOptions.QuoteOuterWhitespace = True
left = 184
top = 240
end
end

View File

@ -0,0 +1,185 @@
unit frmmain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, db, BufDataset, fphttpclient, Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DBGrids, IniPropStorage, ComCtrls,
fpJSON, SynEdit, SynHighlighterXML, XMLDatapacketReader, csvdataset;
type
{ TMainForm }
TMainForm = class(TForm)
BGetresources: TButton;
BFetchResource: TButton;
CSVResource: TCSVDataset;
DSResource: TDataSource;
GResource: TDBGrid;
HTCResource: TFPHTTPClient;
NavResource: TDBNavigator;
EURL: TEdit;
EUserName: TEdit;
EPassword: TEdit;
GBServer: TGroupBox;
PCData: TPageControl;
PSMain: TIniPropStorage;
LEURL: TLabel;
LUserName: TLabel;
LPassword: TLabel;
LBResources: TListBox;
PResource: TPanel;
PData: TPanel;
SERawData: TSynEdit;
SHXML: TSynXMLSyn;
TSGrid: TTabSheet;
TSRaw: TTabSheet;
procedure BFetchResourceClick(Sender: TObject);
procedure BGetresourcesClick(Sender: TObject);
procedure PSMainRestoreProperties(Sender: TObject);
procedure PSMainSaveProperties(Sender: TObject);
private
function ConfigConnection: String;
procedure DisplayResources(J: TJSONObject);
procedure GetResourceData;
procedure GetResources;
public
end;
var
MainForm: TMainForm;
implementation
uses strutils,httpprotocol, jsonparser, URIParser;
{$R *.lfm}
{ TMainForm }
Function TMainForm.ConfigConnection : String;
Var
P : String;
begin
HTCResource.UserName:=EUserName.Text;
HTCResource.Password:=EPassword.Text;
Result:=EURL.Text;
if (Result='') then
Raise Exception.Create('Need a URL to perform request');
P:=LowerCase(ParseUri(Result,False).Protocol);
if (P<>'http') and (P<>'https') then
Result:='http://'+Result;
Result:=IncludeHTTPPathDelimiter(Result);
end;
procedure TMainForm.DisplayResources(J : TJSONObject);
Var
A : TJSONArray;
I : Integer;
R : TJSONObject;
N : String;
begin
LBResources.Items.Clear;
A:=J.Get('data',TJSONArray(Nil));
if not assigned(A) then
exit;
For I:=0 to A.Count-1 do
begin
R:=A.Objects[i];
N:=R.Get('name','');
if N<>'' then
LBResources.Items.Add(N);
end;
end;
procedure TMainForm.GetResources;
Var
S : TMemoryStream;
URL : String;
D : TJSONData;
J : TJSONObject absolute D;
begin
URL:=ConfigConnection;
S:=TMemoryStream.Create;
try
HTCResource.Get(URL+'metadata/?fmt=json&humanreadable=0',S);
S.Position:=0;
D:=GetJSON(S);
if D is TJSONObject then
DisplayResources(J);
finally
S.Free;
end;
end;
procedure TMainForm.GetResourceData;
Var
S : TMemoryStream;
URL : String;
begin
URL:=ConfigConnection;
if LBResources.ItemIndex<>-1 then
URL:=URL+LBResources.Items[LBResources.ItemIndex];
S:=TMemoryStream.Create;
try
// Metadata=1 enables fieldnames in 1st line
HTCResource.Get(URL+'?fmt=csv&metadata=1',S);
S.Position:=0;
SERawData.Lines.LoadFromStream(S);
S.Position:=0;
CSVResource.LoadFromStream(S);
finally
S.Free;
end;
end;
procedure TMainForm.BGetresourcesClick(Sender: TObject);
begin
GetResources;
end;
procedure TMainForm.PSMainRestoreProperties(Sender: TObject);
Var
S: String;
begin
S:=PSMAin.ReadString('pwd','');
if (S<>'') then
EPassword.Text:=XorDecode('secret',S)
else
EPassword.Clear;
end;
procedure TMainForm.PSMainSaveProperties(Sender: TObject);
Var
S: String;
begin
S:=EPassword.Text;
If (S<>'') then
PSMAin.WriteString('pwd',XorEncode('secret',S));
end;
procedure TMainForm.BFetchResourceClick(Sender: TObject);
begin
GetResourceData;
end;
end.