PageRenderTime 55ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/demos/bom/person_bom.pas

https://github.com/graemeg/tiopf-mapper
Pascal | 740 lines | 601 code | 102 blank | 37 comment | 18 complexity | 78fca04e801bc1db3d2eb442d1de145e MD5 | raw file
  1. unit person_bom;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. SysUtils
  8. ,tiObject
  9. ,typinfo
  10. ,tiAutoMap
  11. ,tiOPFManager
  12. ,tiVisitorDB
  13. ,tiVisitorCriteria
  14. ,tiCriteria
  15. ,tiSQLParser
  16. ,mapper
  17. ;
  18. type
  19. // Enumerations
  20. TGenderType = (gtFemale = 0
  21. ,gtMale = 1);
  22. TPersonType = (ptEmployee
  23. ,ptCustomer
  24. ,ptVendor);
  25. // ---------------------------------------------
  26. // Generated Classes
  27. // ---------------------------------------------
  28. { Generated Class: TPerson}
  29. TPerson = class(TtiObject)
  30. protected
  31. FActiveDate: TDateTime;
  32. FAge: Integer;
  33. FEmail: String;
  34. FFirstName: String;
  35. FGender: TGenderType;
  36. FIsActive: Boolean;
  37. FLastName: String;
  38. FPersonType: TPersonType;
  39. procedure SetActiveDate(const AValue: TDateTime); virtual;
  40. procedure SetAge(const AValue: Integer); virtual;
  41. procedure SetEmail(const AValue: String); virtual;
  42. procedure SetFirstName(const AValue: String); virtual;
  43. procedure SetGender(const AValue: TGenderType); virtual;
  44. procedure SetIsActive(const AValue: Boolean); virtual;
  45. procedure SetLastName(const AValue: String); virtual;
  46. procedure SetPersonType(const AValue: TPersonType); virtual;
  47. public
  48. procedure Read; override;
  49. procedure Save; override;
  50. function IsValid(const AErrors: TtiObjectErrors): boolean; overload; override;
  51. published
  52. property ActiveDate: TDateTime read FActiveDate write SetActiveDate;
  53. property Age: Integer read FAge write SetAge;
  54. property Email: String read FEmail write SetEmail;
  55. property FirstName: String read FFirstName write SetFirstName;
  56. property Gender: TGenderType read FGender write SetGender;
  57. property IsActive: Boolean read FIsActive write SetIsActive;
  58. property LastName: String read FLastName write SetLastName;
  59. property PersonType: TPersonType read FPersonType write SetPersonType;
  60. end;
  61. { List of TPerson. TtiMappedFilteredObjectList descendant. }
  62. TPersonList = class(TtiMappedFilteredObjectList)
  63. protected
  64. procedure SetItems(i: integer; const AValue: TPerson); reintroduce;
  65. function GetItems(i: integer): TPerson; reintroduce;
  66. public
  67. property Items[i:integer] : TPerson read GetItems write SetItems;
  68. procedure Add(AObject: TPerson); reintroduce;
  69. procedure Read; override;
  70. procedure Save; override;
  71. { Return count (1) if successful. }
  72. function FindByOID(const AOID: string): integer;
  73. { Returns Number of objects retrieved. }
  74. function FindByGender(const AGender: enum): integer;
  75. { Returns Number of objects retrieved. }
  76. function FindByFirstNameMatch(const AName: String): integer;
  77. end;
  78. { Read Visitor for TPerson }
  79. TPerson_Read = class(TtiVisitorSelect)
  80. protected
  81. function AcceptVisitor: Boolean; override;
  82. procedure Init; override;
  83. procedure SetupParams; override;
  84. procedure MapRowToObject; override;
  85. end;
  86. { Create Visitor for TPerson }
  87. TPerson_Create = class(TtiVisitorUpdate)
  88. protected
  89. function AcceptVisitor: Boolean; override;
  90. procedure Init; override;
  91. procedure SetupParams; override;
  92. end;
  93. { Update Visitor for TPerson }
  94. TPerson_Save = class(TtiVisitorUpdate)
  95. protected
  96. function AcceptVisitor: Boolean; override;
  97. procedure Init; override;
  98. procedure SetupParams; override;
  99. end;
  100. { Delete Visitor for TPerson }
  101. TPerson_Delete = class(TtiVisitorUpdate)
  102. protected
  103. function AcceptVisitor: Boolean; override;
  104. procedure Init; override;
  105. procedure SetupParams; override;
  106. end;
  107. { List Read Visitor for TPersonList }
  108. TPersonList_Read = class(TtiVisitorSelect)
  109. protected
  110. function AcceptVisitor: Boolean; override;
  111. procedure Init; override;
  112. procedure MapRowToObject; override;
  113. end;
  114. { List Create Visitor for TPersonList }
  115. TPersonList_Create = class(TtiVisitorUpdate)
  116. protected
  117. function AcceptVisitor: Boolean; override;
  118. procedure Init; override;
  119. procedure SetupParams; override;
  120. end;
  121. { List Update Visitor for TPersonList }
  122. TPersonList_Save = class(TtiVisitorUpdate)
  123. protected
  124. function AcceptVisitor: Boolean; override;
  125. procedure Init; override;
  126. procedure SetupParams; override;
  127. end;
  128. { List Delete Visitor for TPersonList }
  129. TPersonList_Delete = class(TtiVisitorUpdate)
  130. protected
  131. function AcceptVisitor: Boolean; override;
  132. procedure Init; override;
  133. procedure SetupParams; override;
  134. end;
  135. { TPersonList_FindByGenderVis }
  136. TPersonList_FindByGenderVis = class(TtiMapParameterListReadVisitor)
  137. protected
  138. function AcceptVisitor: Boolean; override;
  139. procedure MapRowToObject; override;
  140. procedure SetupParams; override;
  141. end;
  142. { TPersonList_FindByFirstNameMatchVis }
  143. TPersonList_FindByFirstNameMatchVis = class(TtiMapParameterListReadVisitor)
  144. protected
  145. function AcceptVisitor: Boolean; override;
  146. procedure MapRowToObject; override;
  147. procedure SetupParams; override;
  148. end;
  149. { Visitor Manager Registrations }
  150. procedure RegisterVisitors;
  151. { Register Auto Mappings }
  152. procedure RegisterMappings;
  153. implementation
  154. procedure RegisterMappings;
  155. begin
  156. { Automap registrations for TPerson }
  157. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  158. 'person', 'OID', 'OID', [pktDB]);
  159. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  160. 'person','FirstName', 'first_name');
  161. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  162. 'person','LastName', 'last_name');
  163. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  164. 'person','Age', 'age');
  165. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  166. 'person','Gender', 'gender');
  167. GTIOPFManager.ClassDBMappingMgr.RegisterMapping(TPerson,
  168. 'person','PersonType', 'person_type');
  169. GTIOPFManager.ClassDBMappingMgr.RegisterCollection(TPersonList, TPerson);
  170. end;
  171. procedure RegisterVisitors;
  172. begin
  173. { Register Visitors for TPerson }
  174. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_listread', TPersonList_Read);
  175. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_listsave', TPersonList_Create);
  176. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_listsave', TPersonList_Save);
  177. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_listsave', TPersonList_Delete);
  178. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonread', TPerson_Read);
  179. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonsave', TPerson_Save);
  180. GTIOPFManager.VisitorManager.RegisterVisitor('TPersondelete', TPerson_Delete);
  181. GTIOPFManager.VisitorManager.RegisterVisitor('TPersoncreate', TPerson_Create);
  182. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_FindByGenderVis', TPersonList_FindByGenderVis);
  183. GTIOPFManager.VisitorManager.RegisterVisitor('TPersonList_FindByFirstNameMatchVis', TPersonList_FindByFirstNameMatchVis);
  184. end;
  185. procedure TPerson.SetActiveDate(const AValue: TDateTime);
  186. begin
  187. if FActiveDate <> AValue then
  188. FActiveDate := AValue;
  189. end;
  190. procedure TPerson.SetAge(const AValue: Integer);
  191. begin
  192. if FAge <> AValue then
  193. FAge := AValue;
  194. end;
  195. procedure TPerson.SetEmail(const AValue: String);
  196. begin
  197. if FEmail <> AValue then
  198. FEmail := AValue;
  199. end;
  200. procedure TPerson.SetFirstName(const AValue: String);
  201. begin
  202. if FFirstName <> AValue then
  203. FFirstName := AValue;
  204. end;
  205. procedure TPerson.SetGender(const AValue: TGenderType);
  206. begin
  207. if FGender <> AValue then
  208. FGender := AValue;
  209. end;
  210. procedure TPerson.SetIsActive(const AValue: Boolean);
  211. begin
  212. if FIsActive <> AValue then
  213. FIsActive := AValue;
  214. end;
  215. procedure TPerson.SetLastName(const AValue: String);
  216. begin
  217. if FLastName <> AValue then
  218. FLastName := AValue;
  219. end;
  220. procedure TPerson.SetPersonType(const AValue: TPersonType);
  221. begin
  222. if FPersonType <> AValue then
  223. FPersonType := AValue;
  224. end;
  225. procedure TPerson.Read;
  226. begin
  227. GTIOPFManager.VisitorManager.Execute(ClassName + 'read', self);
  228. end;
  229. procedure TPerson.Save;
  230. begin
  231. Case ObjectState of
  232. posDelete: GTIOPFManager.VisitorManager.Execute('TPersondelete', self);
  233. posUpdate: GTIOPFManager.VisitorManager.Execute('TPersonsave', self);
  234. posCreate: GTIOPFManager.VisitorManager.Execute('TPersoncreate', self);
  235. end;
  236. end;
  237. function TPerson.IsValid(const AErrors: TtiObjectErrors): boolean;
  238. var
  239. lMsg: string;
  240. begin
  241. Result := inherited IsValid(AErrors);
  242. if not result then exit;
  243. if Age < 18 then
  244. begin
  245. lMsg := ValidatorStringClass.CreateGreaterOrEqualValidatorMsg(self, 'Age', Age);
  246. AErrors.AddError(lMsg);
  247. end;
  248. if FirstName = '' then
  249. begin
  250. lMsg := ValidatorStringClass.CreateRequiredValidatorMsg(self, 'FirstName');
  251. AErrors.AddError(lMsg);
  252. end;
  253. if LastName = '' then
  254. begin
  255. lMsg := ValidatorStringClass.CreateRequiredValidatorMsg(self, 'LastName');
  256. AErrors.AddError(lMsg);
  257. end;
  258. result := AErrors.Count = 0;
  259. end;
  260. {TPersonList }
  261. procedure TPersonList.Add(AObject: TPerson);
  262. begin
  263. inherited Add(AObject);
  264. end;
  265. function TPersonList.GetItems(i: integer): TPerson;
  266. begin
  267. result := inherited GetItems(i) as TPerson;
  268. end;
  269. procedure TPersonList.Read;
  270. begin
  271. GTIOPFManager.VisitorManager.Execute('TPersonList_listread', self);
  272. end;
  273. procedure TPersonList.Save;
  274. begin
  275. GTIOPFManager.VisitorManager.Execute('TPersonList_listsave', self);
  276. end;
  277. procedure TPersonList.SetItems(i: integer; const AValue: TPerson);
  278. begin
  279. inherited SetItems(i, AValue);
  280. end;
  281. function TPersonList.FindByOID(const AOID: string): integer;
  282. begin
  283. if self.Count > 0 then
  284. self.Clear;
  285. Criteria.ClearAll;
  286. Criteria.AddEqualTo('OID', AOID);
  287. Read;
  288. result := Count;
  289. end;
  290. function TPersonList.FindByGender(const AGender: enum): integer;
  291. begin
  292. if self.Count > 0 then
  293. self.Clear;
  294. Params.Clear;
  295. AddParam('AGender', 'gender_type', ptEnum, AGender);
  296. self.SQL :=
  297. ' ' +
  298. ' SELECT ' +
  299. ' PERSON.OID , PERSON.FIRST_NAME, PERSON.LAST_NAME, PERSON.AGE, PERSON.GENDER, PERSON.PERSON_TYPE ' +
  300. ' FROM ' +
  301. ' PERSON ' +
  302. ' WHERE ' +
  303. ' PERSON.GENDER = :gender_type ' +
  304. ' ';
  305. GTIOPFManager.VisitorManager.Execute('TPersonList_FindByGenderVis', self);
  306. result := self.Count;
  307. end;
  308. function TPersonList.FindByFirstNameMatch(const AName: String): integer;
  309. begin
  310. if self.Count > 0 then
  311. self.Clear;
  312. Params.Clear;
  313. AddParam('AName', 'user_first', ptString, AName);
  314. self.SQL :=
  315. ' ' +
  316. ' SELECT ' +
  317. ' PERSON.OID , PERSON.FIRST_NAME, PERSON.LAST_NAME, PERSON.AGE, PERSON.GENDER, PERSON.PERSON_TYPE ' +
  318. ' FROM ' +
  319. ' PERSON ' +
  320. ' WHERE ' +
  321. ' PERSON.FIRST_NAME STARTING WITH :USER_FIRST ' +
  322. ' ORDER BY ' +
  323. ' PERSON.FIRST_NAME, ' +
  324. ' PERSON.LAST_NAME ' +
  325. ' ';
  326. GTIOPFManager.VisitorManager.Execute('TPersonList_FindByFirstNameMatchVis', self);
  327. result := self.Count;
  328. end;
  329. { TPerson_Create }
  330. function TPerson_Create.AcceptVisitor: Boolean;
  331. begin
  332. result := Visited.ObjectState = posCreate;
  333. end;
  334. procedure TPerson_Create.Init;
  335. begin
  336. Query.SQLText :=
  337. 'INSERT INTO person(' +
  338. ' OID, ' +
  339. ' first_name, ' +
  340. ' last_name, ' +
  341. ' age, ' +
  342. ' gender, ' +
  343. ' person_type' +
  344. ') VALUES (' +
  345. ' :OID, ' +
  346. ' :first_name, ' +
  347. ' :last_name, ' +
  348. ' :age, ' +
  349. ' :gender, ' +
  350. ' :person_type' +
  351. ') ';
  352. end;
  353. procedure TPerson_Create.SetupParams;
  354. var
  355. lObj: TPerson;
  356. begin
  357. lObj := TPerson(Visited);
  358. lObj.OID.AssignToTIQuery('OID',Query);
  359. Query.ParamAsString['first_name'] := lObj.FirstName;
  360. Query.ParamAsString['last_name'] := lObj.LastName;
  361. Query.ParamAsInteger['age'] := lObj.Age;
  362. Query.ParamAsInteger['gender'] := Integer(lObj.Gender);
  363. Query.ParamAsInteger['person_type'] := Integer(lObj.PersonType);
  364. end;
  365. { TPerson_Save }
  366. function TPerson_Save.AcceptVisitor: Boolean;
  367. begin
  368. result := Visited.ObjectState = posUpdate;
  369. end;
  370. procedure TPerson_Save.Init;
  371. begin
  372. Query.SQLText :=
  373. 'UPDATE person SET ' +
  374. ' first_name = :first_name, ' +
  375. ' last_name = :last_name, ' +
  376. ' age = :age, ' +
  377. ' gender = :gender, ' +
  378. ' person_type = :person_type ' +
  379. 'WHERE OID = :OID' ;
  380. end;
  381. procedure TPerson_Save.SetupParams;
  382. var
  383. lObj: TPerson;
  384. begin
  385. lObj := TPerson(Visited);
  386. lObj.OID.AssignToTIQuery('OID',Query);
  387. Query.ParamAsString['first_name'] := lObj.FirstName;
  388. Query.ParamAsString['last_name'] := lObj.LastName;
  389. Query.ParamAsInteger['age'] := lObj.Age;
  390. Query.ParamAsInteger['gender'] := Integer(lObj.Gender);
  391. Query.ParamAsInteger['person_type'] := Integer(lObj.PersonType);
  392. end;
  393. { TPerson_Read }
  394. function TPerson_Read.AcceptVisitor: Boolean;
  395. begin
  396. result := (Visited.ObjectState = posPK) OR (Visited.ObjectState = posClean);
  397. end;
  398. procedure TPerson_Read.Init;
  399. begin
  400. Query.SQLText :=
  401. 'SELECT ' +
  402. ' OID, ' +
  403. ' first_name, ' +
  404. ' last_name, ' +
  405. ' age, ' +
  406. ' gender, ' +
  407. ' person_type ' +
  408. 'FROM person WHERE OID = :OID' ;
  409. end;
  410. procedure TPerson_Read.SetupParams;
  411. var
  412. lObj: TPerson;
  413. begin
  414. lObj := TPerson(Visited);
  415. lObj.OID.AssignToTIQuery('OID',Query);
  416. end;
  417. procedure TPerson_Read.MapRowToObject;
  418. var
  419. lObj: TPerson;
  420. begin
  421. lObj := TPerson(Visited);
  422. lObj.OID.AssignFromTIQuery('OID',Query);
  423. lObj.FirstName := Query.FieldAsString['first_name'];
  424. lObj.LastName := Query.FieldAsString['last_name'];
  425. lObj.Age := Query.FieldAsInteger['age'];
  426. lObj.Gender := TGenderType(Query.FieldAsInteger['gender']);
  427. lObj.PersonType := TPersonType(Query.FieldAsInteger['person_type']);
  428. end;
  429. { TPerson_Delete }
  430. function TPerson_Delete.AcceptVisitor: Boolean;
  431. begin
  432. result := Visited.ObjectState = posDelete;
  433. end;
  434. procedure TPerson_Delete.Init;
  435. begin
  436. Query.SQLText :=
  437. 'DELETE FROM person ' +
  438. 'WHERE OID = :OID';
  439. end;
  440. procedure TPerson_Delete.SetupParams;
  441. var
  442. lObj: TPerson;
  443. begin
  444. lObj := TPerson(Visited);
  445. lObj.OID.AssignToTIQuery('OID',Query);
  446. end;
  447. { TPersonList_Read }
  448. function TPersonList_Read.AcceptVisitor: Boolean;
  449. begin
  450. result := (Visited.ObjectState = posEmpty);
  451. end;
  452. procedure TPersonList_Read.Init;
  453. var
  454. lFiltered: ItiFiltered;
  455. lWhere: string;
  456. lOrder: string;
  457. lSQL: string;
  458. begin
  459. if Supports(Visited, ItiFiltered, lFiltered) then
  460. begin
  461. if lFiltered.GetCriteria.HasCriteria then
  462. lWhere := ' WHERE ' + tiCriteriaAsSQL(lFiltered.GetCriteria)
  463. else
  464. lWhere := '';
  465. if lFiltered.GetCriteria.hasOrderBy then
  466. lOrder := tiCriteriaOrderByAsSQL(lFiltered.GetCriteria)
  467. else
  468. lOrder := '';
  469. end;
  470. lSQL :=
  471. 'SELECT ' +
  472. ' OID, ' +
  473. ' first_name, ' +
  474. ' last_name, ' +
  475. ' age, ' +
  476. ' gender, ' +
  477. ' person_type ' +
  478. 'FROM person %s %s ;';
  479. Query.SQLText := gFormatSQL(Format(lSQL, [lWhere, lOrder]), TPerson);
  480. end;
  481. procedure TPersonList_Read.MapRowToObject;
  482. var
  483. lObj: TPerson;
  484. begin
  485. lObj := TPerson.Create;
  486. lObj.OID.AssignFromTIQuery('OID',Query);
  487. lObj.FirstName := Query.FieldAsString['first_name'];
  488. lObj.LastName := Query.FieldAsString['last_name'];
  489. lObj.Age := Query.FieldAsInteger['age'];
  490. lObj.Gender := TGenderType(Query.FieldAsInteger['gender']);
  491. lObj.PersonType := TPersonType(Query.FieldAsInteger['person_type']);
  492. lObj.ObjectState := posClean;
  493. TtiObjectList(Visited).Add(lObj);
  494. end;
  495. { TPersonList_Create }
  496. function TPersonList_Create.AcceptVisitor: Boolean;
  497. begin
  498. result := Visited.ObjectState = posCreate;
  499. end;
  500. procedure TPersonList_Create.Init;
  501. begin
  502. Query.SQLText :=
  503. 'INSERT INTO person(' +
  504. ' OID, ' +
  505. ' first_name, ' +
  506. ' last_name, ' +
  507. ' age, ' +
  508. ' gender, ' +
  509. ' person_type' +
  510. ') VALUES (' +
  511. ' :OID, ' +
  512. ' :first_name, ' +
  513. ' :last_name, ' +
  514. ' :age, ' +
  515. ' :gender, ' +
  516. ' :person_type' +
  517. ') ';
  518. end;
  519. procedure TPersonList_Create.SetupParams;
  520. var
  521. lObj: TPerson;
  522. begin
  523. lObj := TPerson(Visited);
  524. lObj.OID.AssignToTIQuery('OID',Query);
  525. Query.ParamAsString['first_name'] := lObj.FirstName;
  526. Query.ParamAsString['last_name'] := lObj.LastName;
  527. Query.ParamAsInteger['age'] := lObj.Age;
  528. Query.ParamAsInteger['gender'] := Integer(lObj.Gender);
  529. Query.ParamAsInteger['person_type'] := Integer(lObj.PersonType);
  530. end;
  531. { TPersonList_Delete }
  532. function TPersonList_Delete.AcceptVisitor: Boolean;
  533. begin
  534. result := Visited.ObjectState = posDelete;
  535. end;
  536. procedure TPersonList_Delete.Init;
  537. begin
  538. Query.SQLText :=
  539. 'DELETE FROM person ' +
  540. 'WHERE OID = :OID';
  541. end;
  542. procedure TPersonList_Delete.SetupParams;
  543. var
  544. lObj: TPerson;
  545. begin
  546. lObj := TPerson(Visited);
  547. lObj.OID.AssignToTIQuery('OID',Query);
  548. end;
  549. { TPersonList_Save }
  550. function TPersonList_Save.AcceptVisitor: Boolean;
  551. begin
  552. result := Visited.ObjectState = posUpdate;
  553. end;
  554. procedure TPersonList_Save.Init;
  555. begin
  556. Query.SQLText :=
  557. 'UPDATE person SET ' +
  558. ' first_name = :first_name, ' +
  559. ' last_name = :last_name, ' +
  560. ' age = :age, ' +
  561. ' gender = :gender, ' +
  562. ' person_type = :person_type ' +
  563. 'WHERE OID = :OID' ;
  564. end;
  565. procedure TPersonList_Save.SetupParams;
  566. var
  567. lObj: TPerson;
  568. begin
  569. lObj := TPerson(Visited);
  570. lObj.OID.AssignToTIQuery('OID',Query);
  571. Query.ParamAsString['first_name'] := lObj.FirstName;
  572. Query.ParamAsString['last_name'] := lObj.LastName;
  573. Query.ParamAsInteger['age'] := lObj.Age;
  574. Query.ParamAsInteger['gender'] := Integer(lObj.Gender);
  575. Query.ParamAsInteger['person_type'] := Integer(lObj.PersonType);
  576. end;
  577. { TPersonList_FindByGenderVis }
  578. function TPersonList_FindByGenderVis.AcceptVisitor: Boolean;
  579. begin
  580. result := (Visited.ObjectState = posEmpty);
  581. end;
  582. procedure TPersonList_FindByGenderVis.MapRowToObject;
  583. var
  584. lObj: TPerson;
  585. begin
  586. lObj := TPerson.Create;
  587. lObj.OID.AssignFromTIQuery('OID',Query);
  588. lObj.FirstName := Query.FieldAsString['first_name'];
  589. lObj.LastName := Query.FieldAsString['last_name'];
  590. lObj.Age := Query.FieldAsInteger['age'];
  591. lObj.Gender := TGenderType(Query.FieldAsInteger['gender']);
  592. lObj.PersonType := TPersonType(Query.FieldAsInteger['person_type']);
  593. lObj.ObjectState := posClean;
  594. TtiObjectList(Visited).Add(lObj);
  595. end;
  596. procedure TPersonList_FindByGenderVis.SetupParams;
  597. var
  598. lCtr: integer;
  599. lParam: TSelectParam;
  600. lList: TtiMappedFilteredObjectList;
  601. begin
  602. lList := TtiMappedFilteredObjectList(Visited);
  603. lParam := TSelectParam(lList.Params.FindByProps(['ParamName'], ['AGender']));
  604. Query.ParamAsInteger['gender_type'] := Integer(enum(lParam.Value));
  605. end;
  606. { TPersonList_FindByFirstNameMatchVis }
  607. function TPersonList_FindByFirstNameMatchVis.AcceptVisitor: Boolean;
  608. begin
  609. result := (Visited.ObjectState = posEmpty);
  610. end;
  611. procedure TPersonList_FindByFirstNameMatchVis.MapRowToObject;
  612. var
  613. lObj: TPerson;
  614. begin
  615. lObj := TPerson.Create;
  616. lObj.OID.AssignFromTIQuery('OID',Query);
  617. lObj.FirstName := Query.FieldAsString['first_name'];
  618. lObj.LastName := Query.FieldAsString['last_name'];
  619. lObj.Age := Query.FieldAsInteger['age'];
  620. lObj.Gender := TGenderType(Query.FieldAsInteger['gender']);
  621. lObj.PersonType := TPersonType(Query.FieldAsInteger['person_type']);
  622. lObj.ObjectState := posClean;
  623. TtiObjectList(Visited).Add(lObj);
  624. end;
  625. procedure TPersonList_FindByFirstNameMatchVis.SetupParams;
  626. var
  627. lCtr: integer;
  628. lParam: TSelectParam;
  629. lList: TtiMappedFilteredObjectList;
  630. begin
  631. lList := TtiMappedFilteredObjectList(Visited);
  632. lParam := TSelectParam(lList.Params.FindByProps(['ParamName'], ['AName']));
  633. Query.ParamAsString['user_first'] := lParam.Value;
  634. end;
  635. initialization
  636. RegisterVisitors;
  637. RegisterMappings;
  638. end.