Advertisement
Guest User

Untitled

a guest
Jun 14th, 2012
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 13.77 KB | None | 0 0
  1. Unit BPeaContainerUnit;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. Interface
  6.  
  7. Uses
  8.   {$IFDEF TestCase}
  9.     BMockQueryUnit,
  10.   {$ELSE}
  11.     BQueryUnit,
  12.   {$ENDIF}
  13.   sysutils, Classes, BCommonUnit, BListsUnit, BObjectUnit, BSQLUnit
  14. //@UsesStart
  15.   , BPeaValueUnit, BPeaValueHolderUnit
  16. //@UsesStop
  17. ;
  18.  
  19. Type BPeaContainerClass = Class;
  20.  
  21. Type BPeaContainersList = Specialize BList<BPeaContainerClass>;
  22. Type BPeaContainersThreadList = Specialize BThreadList<BPeaContainerClass>;
  23. Type IPeaContainerInterface = Specialize IGenericInterface<BPeaContainerClass>;
  24.  
  25. Type
  26.  
  27.   { BPeaContainerClass }
  28.  
  29.   BPeaContainerClass = Class(BObjectClass, IPeaContainerInterface)
  30.     Private
  31.       //@PropertiesPrivateStart
  32.       bCaption: String;
  33.       bLink: BPeaValueClass;
  34.       bHugePeaValues: BPeaValueHolderThreadList;
  35.       bPeaValuesFirst: BPeaValuesThreadList;
  36.       bPeaValuesLast: BPeaValuesThreadList;
  37.       //@PropertiesPrivateStop
  38.       //@PluralSavesDeclareStart
  39.       Function SaveHugePeaValues(Const aQuery: BQueryClass): Boolean;
  40.       Function SavePeaValuesFirst(Const aQuery: BQueryClass): Boolean;
  41.       Function SavePeaValuesLast(Const aQuery: BQueryClass): Boolean;
  42.       //@PluralSavesDeclareStop
  43.       Procedure Load(Const aObject: BPeaContainerClass);
  44.       Procedure InitializeObjects;
  45.     Public
  46.       //@PropertiesPublicStart
  47.       Property Caption: String Read bCaption Write bCaption;
  48.       Property Link: BPeaValueClass Read bLink Write bLink;
  49.       Property HugePeaValues: BPeaValueHolderThreadList Read
  50.         bHugePeaValues Write bHugePeaValues;
  51.       Property PeaValuesFirst: BPeaValuesThreadList Read
  52.         bPeaValuesFirst Write bPeaValuesFirst;
  53.       Property PeaValuesLast: BPeaValuesThreadList Read
  54.         bPeaValuesLast Write bPeaValuesLast;
  55.       //@PropertiesPublicStop
  56.  
  57.       //@LoadPluralDeclareStart
  58.       Procedure LoadHugePeaValues(Const aHugePeaValues: BPeaValueHolderList);
  59.       Procedure LoadPeaValuesFirst(Const aPeaValuesFirst: BPeaValuesList);
  60.       Procedure LoadPeaValuesLast(Const aPeaValuesLast: BPeaValuesList);
  61.       //@LoadPluralDeclareStop
  62.  
  63.       //@AddGetRemovePluralDeclareStart
  64.       //@AddGetRemovePluralDeclareStop
  65.      
  66.       Procedure Validate(Const aCommit: Boolean = FALSE);
  67.       Function Save(Const aQuery: BQueryClass): Boolean;
  68.       //@InitializeDeclareStart
  69.       Procedure Initialize(Const aCaption: String; Const aLink:
  70.         BPeaValueClass);
  71.       //@InitializeDeclareStop
  72.       Destructor Burn; Override;
  73. End;
  74.  
  75. Type BPeaContainersManagerBlank = Specialize BManagerGeneric<BPeaContainerClass>;
  76.  
  77. Type
  78.  
  79.   { BPeaContainersManagerClass }
  80.  
  81.   BPeaContainersManagerClass = Class(BPeaContainersManagerBlank)
  82.     Private
  83.       bPeaContainers: BPeaContainersThreadList; Static;
  84.       //@ManagerLoadPluralDeclareStart
  85.       Procedure LoadHugePeaValues(Const aQuery: BQueryClass);
  86.       Procedure LoadPeaValuesFirst(Const aQuery: BQueryClass);
  87.       Procedure LoadPeaValuesLast(Const aQuery: BQueryClass);
  88.       //@ManagerLoadPluralDeclareStop
  89.     Public
  90.       Procedure Load;
  91.       Constructor Build;
  92.       Destructor Burn; Override;
  93. End;
  94.  
  95. Implementation
  96.  
  97. Const
  98.   SQL_ID = 'ID';
  99.   SQL_PRIOR = 'PRIOR';
  100.   SQL_NEXT = 'NEXT';
  101.   SQL_DELETED = 'DELETED';
  102.   SQL_DELETED_NOT = 'DELETED = 0';
  103.   SQL_ID_MATCH = 'ID = :ID';
  104.   //@ConstStart
  105.   SQL_NAME_MATCH = 'PEACONTAINER = :PEACONTAINER';
  106.   SQL_NAME = 'PEACONTAINER';
  107.   SQL_CAPTION = 'CAPTION';
  108.   SQL_LINK = 'LINK';
  109.   SQL_SOME_CAPTION = 'SOME_CAPTION';
  110.   SQL_SOME_INT = 'SOME_INT';
  111.   SQL_HUGE_PEA_VALUES = 'HUGE_PEA_VALUES';
  112.   SQL_PEA_VALUE_FIRST = 'PEA_VALUE_FIRST';
  113.   SQL_PEA_VALUE_LAST = 'PEA_VALUE_LAST';
  114.   //@ConstStop
  115.  
  116.  { BPeaContainerClass }
  117.  
  118. Procedure BPeaContainerClass.Load(Const aObject: BPeaContainerClass);
  119. Begin
  120.   //@LoadStart
  121.   Initialize( aObject.Caption, aObject.Link);
  122.   HugePeaValues.Load(aObject.HugePeaValues.LockList);
  123.   aObject.HugePeaValues.UnlockList;
  124.   PeaValuesFirst.Load(aObject.PeaValuesFirst.LockList);
  125.   aObject.PeaValuesFirst.UnlockList;
  126.   PeaValuesLast.Load(aObject.PeaValuesLast.LockList);
  127.   aObject.PeaValuesLast.UnlockList;
  128.   //@LoadStop
  129. End;
  130.  
  131. Procedure BPeaContainerClass.InitializeObjects;
  132. Begin
  133.   If Not(bInitialized) Then
  134.     Begin
  135.       //@InitializeObjectsStart
  136.       bClassID := 110;
  137.       bHugePeaValues := BPeaValueHolderThreadList.Build;
  138.       bPeaValuesFirst := BPeaValuesThreadList.Build;
  139.       bPeaValuesLast := BPeaValuesThreadList.Build;
  140.       //@InitializeObjectsStop
  141.       bInitialized := TRUE;
  142.     End;
  143. End;
  144.  
  145. //@LoadPluralStart
  146.  
  147. Procedure BPeaContainerClass.LoadHugePeaValues(Const aHugePeaValues:
  148.   BPeaValueHolderList);
  149. Begin
  150.   bHugePeaValues.Clear;
  151.   bHugePeaValues.Load(aHugePeaValues);
  152. End;
  153.  
  154. Procedure BPeaContainerClass.LoadPeaValuesFirst(Const
  155.   aPeaValuesFirst: BPeaValuesList);
  156. Begin
  157.   bPeaValuesFirst.Clear;
  158.   bPeaValuesFirst.Load(aPeaValuesFirst);
  159. End;
  160.  
  161. Procedure BPeaContainerClass.LoadPeaValuesLast(Const aPeaValuesLast:
  162.   BPeaValuesList);
  163. Begin
  164.   bPeaValuesLast.Clear;
  165.   bPeaValuesLast.Load(aPeaValuesLast);
  166. End;
  167. //@LoadPluralStop
  168.  
  169. //@AddGetRemovePluralStart
  170. //@AddGetRemovePluralStop      
  171.  
  172. Procedure BPeaContainerClass.Validate(Const aCommit: Boolean);
  173. Begin
  174.   Raise BExceptionClass.Build(1, 'Not specific validation terms');
  175. End;
  176.  
  177. //@PluralSavesStart
  178.  
  179. Function BPeaContainerClass.SaveHugePeaValues(Const aQuery:
  180.   BQueryClass): Boolean;
  181. Var
  182.   i: Integer;
  183.   aSQL: BSQLClass;
  184.   aList: BPeaValueHolderList;
  185. Begin
  186.   aSQL := BSQLClass.Build;
  187.   aList := bHugePeaValues.LockList;
  188.   Try
  189.     aSQL.Builder.Delete(SQL_NAME + '_' + SQL_HUGE_PEA_VALUES).Where(
  190.       SQL_NAME_MATCH);
  191.     aSQL.AddParam(SQL_NAME, ID);
  192.     Result := aQuery.Post(aSQL);
  193.  
  194.     For i := 0 To aList.Count - 1 Do
  195.       Result := Result And aList[i].Save(ID, SQL_NAME + '_' +
  196.         SQL_HUGE_PEA_VALUES, SQL_NAME, aQuery);
  197.   Finally
  198.     bHugePeaValues.UnlockList;
  199.     aSQL.Burn;
  200.   End;
  201. End;
  202.  
  203. Function BPeaContainerClass.SavePeaValuesFirst(Const aQuery:
  204.   BQueryClass): Boolean;
  205. Var
  206.   i: Integer;
  207.   aSQL: BSQLClass;
  208.   aList: BPeaValuesList;
  209.   aPeaValuesManager: BPeaValuesManagerClass;
  210. Begin
  211.   aSQL := BSQLClass.Build;
  212.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  213.   aList := bPeaValuesFirst.LockList;
  214.   Try
  215.     aSQL.Builder.Delete(SQL_NAME + '_' + SQL_PEA_VALUE_FIRST).Where(
  216.       SQL_NAME_MATCH);
  217.     aSQL.AddParam(SQL_NAME, ID);
  218.     Result := aQuery.Post(aSQL);
  219.  
  220.     aSQL.Clear;
  221.     aSQL.Builder.Insert(SQL_NAME + '_' + SQL_PEA_VALUE_FIRST).
  222.       AddParam(SQL_NAME).
  223.       AddParam(SQL_PEA_VALUE_FIRST);
  224.     aSQL.AddParam(SQL_NAME, ID);
  225.     For i := 0 To aList.Count - 1 Do
  226.       Begin
  227.         aSQL.AddParam(SQL_PEA_VALUE_FIRST, aList[i].ID);
  228.         Result := Result And aQuery.Post(aSQL);
  229.       End;
  230.   Finally
  231.     bPeaValuesFirst.UnlockList;
  232.     aPeaValuesManager.Burn;
  233.     aSQL.Burn;
  234.   End;
  235. End;
  236.  
  237. Function BPeaContainerClass.SavePeaValuesLast(Const aQuery:
  238.   BQueryClass): Boolean;
  239. Var
  240.   i: Integer;
  241.   aSQL: BSQLClass;
  242.   aList: BPeaValuesList;
  243.   aPeaValuesManager: BPeaValuesManagerClass;
  244. Begin
  245.   aSQL := BSQLClass.Build;
  246.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  247.   aList := bPeaValuesLast.LockList;
  248.   Try
  249.     aSQL.Builder.Delete(SQL_NAME + '_' + SQL_PEA_VALUE_LAST).Where(
  250.       SQL_NAME_MATCH);
  251.     aSQL.AddParam(SQL_NAME, ID);
  252.     Result := aQuery.Post(aSQL);
  253.  
  254.     aSQL.Clear;
  255.     aSQL.Builder.Insert(SQL_NAME + '_' + SQL_PEA_VALUE_LAST).AddParam(
  256.       SQL_NAME).
  257.       AddParam(SQL_PEA_VALUE_LAST);
  258.     aSQL.AddParam(SQL_NAME, ID);
  259.     For i := 0 To aList.Count - 1 Do
  260.       Begin
  261.         aSQL.AddParam(SQL_PEA_VALUE_LAST, aList[i].ID);
  262.         Result := Result And aQuery.Post(aSQL);
  263.       End;
  264.   Finally
  265.     bPeaValuesLast.UnlockList;
  266.     aPeaValuesManager.Burn;
  267.     aSQL.Burn;
  268.   End;
  269. End;
  270. //@PluralSavesStop
  271.  
  272. Function BPeaContainerClass.Save(Const aQuery: BQueryClass): Boolean;
  273. Var
  274.   i: Integer;
  275.   aSQL: BSQLClass;
  276. Begin
  277.   Validate(TRUE);
  278.   aSQL := BSQLClass.Build;
  279.   Try
  280.     //@SaveStart
  281.     If ID < 0 Then
  282.       aSQL.Builder.Insert(SQL_NAME).AddGenerator.AddParam(
  283.         SQL_DELETED).AddParam(SQL_PRIOR).AddParam(SQL_NEXT).AddParam(
  284.         SQL_CAPTION).AddParam(SQL_LINK).Returning(SQL_ID).Executable
  285.     Else
  286.       Begin
  287.         aSQL.Builder.Update(SQL_NAME).AddParam(SQL_DELETED).AddParam(
  288.           SQL_PRIOR).AddParam(SQL_NEXT).AddParam(SQL_CAPTION).
  289.           AddParam(SQL_LINK).Where(SQL_ID_MATCH);
  290.         aSQL.AddParam(SQL_ID, ID);
  291.       End;
  292.    
  293.     aSQL.AddParam(SQL_DELETED, bDeleted);
  294.     aSQL.AddParam(SQL_PRIOR, -1);
  295.     aSQL.AddParam(SQL_NEXT, -1);
  296.     aSQL.AddParam(SQL_CAPTION, Caption);
  297.     If Not(Link = nil) Then aSQL.AddParam(SQL_LINK, Link.ID)
  298.     Else aSQL.AddParam(SQL_LINK, -1);
  299.     Result := aQuery.Post(aSQL);
  300.     If Result And (ID < 0) Then bID := aQuery.ByInteger(SQL_ID);
  301.     Result := Result And SaveHugePeaValues(aQuery);
  302.     Result := Result And SavePeaValuesFirst(aQuery);
  303.     Result := Result And SavePeaValuesLast(aQuery);
  304.     //@SaveStop
  305.   Finally
  306.     aSQL.Burn;
  307.   End;
  308. End;
  309.  
  310. //@InitializeStart
  311. Procedure BPeaContainerClass.Initialize(Const aCaption: String; Const
  312.   aLink: BPeaValueClass);
  313. Begin
  314.   InitializeObjects;
  315.   bCaption := aCaption;
  316.   bLink := aLink;
  317.   Validate;
  318. End;
  319. //@InitializeStop
  320.  
  321. Destructor BPeaContainerClass.Burn;
  322. Begin
  323.   //@BurnStart
  324.   bHugePeaValues.Purge;
  325.   bHugePeaValues.Burn;
  326.   bPeaValuesFirst.Burn;
  327.   bPeaValuesLast.Burn;
  328.   //@BurnStop
  329. End;
  330.  
  331.  { BPeaContainersManagerClass }
  332.  
  333. //@ManagerLoadPluralStart
  334.  
  335. Procedure BPeaContainersManagerClass.LoadHugePeaValues(Const aQuery:
  336.   BQueryClass);
  337. Var
  338.   aSQL: BSQLClass;
  339.   aPeaContainer: BPeaContainerClass;
  340.   aPeaValueHolder: BPeaValueHolderClass;
  341.   aPeaValue: BPeaValueClass;
  342.   aPeaValuesManager: BPeaValuesManagerClass;
  343. Begin
  344.   aSQL := BSQLClass.Build;
  345.   aSQL.Builder.Select(SQL_NAME + '_' + SQL_HUGE_PEA_VALUES).All;
  346.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  347.   Try;
  348.     aQuery.Get(aSQL);
  349.     While Not(aQuery.EOF) Do
  350.       Begin
  351.         aPeaContainer := GetObject(aQuery.ByInteger(SQL_NAME));
  352.         aPeaValue := aPeaValuesManager.GetObject(aQuery.ByInteger(
  353.           SQL_HUGE_PEA_VALUES));
  354.         If Not((aPeaContainer = nil) Or (aPeaValue = nil)) Then
  355.           Begin
  356.             aPeaValueHolder := BPeaValueHolderClass.Build(aPeaValue);
  357.             aPeaValueHolder.Load(aPeaContainer.ID, SQL_NAME + '_' +
  358.               SQL_HUGE_PEA_VALUES, SQL_NAME, aQuery);
  359.             aPeaContainer.bHugePeaValues.Add(aPeaValueHolder);
  360.           End;
  361.         aQuery.Next;
  362.       End;
  363.   Finally
  364.     aPeaValuesManager.Burn;
  365.     aSQL.Burn;
  366.   End;
  367. End;
  368.  
  369. Procedure BPeaContainersManagerClass.LoadPeaValuesFirst(Const aQuery:
  370.   BQueryClass);
  371. Var
  372.   aSQL: BSQLClass;
  373.   aPeaContainer: BPeaContainerClass;
  374.   aPeaValue: BPeaValueClass;
  375.   aPeaValuesManager: BPeaValuesManagerClass;
  376. Begin
  377.   aSQL := BSQLClass.Build;
  378.   aSQL.Builder.Select(SQL_NAME + '_' + SQL_PEA_VALUE_FIRST).All;
  379.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  380.   Try;
  381.     aQuery.Get(aSQL);
  382.     While Not(aQuery.EOF) Do
  383.       Begin
  384.         aPeaContainer := GetObject(aQuery.ByInteger(SQL_NAME));
  385.         aPeaValue := aPeaValuesManager.GetObject(aQuery.ByInteger(
  386.           SQL_PEA_VALUE_FIRST));
  387.         If Not((aPeaContainer = nil) Or (aPeaValue = nil)) Then
  388.           aPeaContainer.bPeaValuesFirst.Add(aPeaValue);
  389.         aQuery.Next;
  390.       End;
  391.   Finally
  392.     aPeaValuesManager.Burn;
  393.     aSQL.Burn;
  394.   End;
  395. End;
  396.  
  397. Procedure BPeaContainersManagerClass.LoadPeaValuesLast(Const aQuery:
  398.   BQueryClass);
  399. Var
  400.   aSQL: BSQLClass;
  401.   aPeaContainer: BPeaContainerClass;
  402.   aPeaValue: BPeaValueClass;
  403.   aPeaValuesManager: BPeaValuesManagerClass;
  404. Begin
  405.   aSQL := BSQLClass.Build;
  406.   aSQL.Builder.Select(SQL_NAME + '_' + SQL_PEA_VALUE_LAST).All;
  407.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  408.   Try;
  409.     aQuery.Get(aSQL);
  410.     While Not(aQuery.EOF) Do
  411.       Begin
  412.         aPeaContainer := GetObject(aQuery.ByInteger(SQL_NAME));
  413.         aPeaValue := aPeaValuesManager.GetObject(aQuery.ByInteger(
  414.           SQL_PEA_VALUE_LAST));
  415.         If Not((aPeaContainer = nil) Or (aPeaValue = nil)) Then
  416.           aPeaContainer.bPeaValuesLast.Add(aPeaValue);
  417.         aQuery.Next;
  418.       End;
  419.   Finally
  420.     aPeaValuesManager.Burn;
  421.     aSQL.Burn;
  422.   End;
  423. End;
  424. //@ManagerLoadPluralStop
  425.  
  426. Procedure BPeaContainersManagerClass.Load;
  427. Var
  428.   aSQL: BSQLClass;
  429.   aQuery: BQueryClass;
  430.   //@ManagerLoadVarsStart
  431.   aPeaValuesManager: BPeaValuesManagerClass;
  432.   //@ManagerLoadVarsStop
  433. Begin
  434.   EnterState(msLoading);
  435.   aSQL := BSQLClass.Build;
  436.   aQuery := BQueryClass.Build(bDBIndex);
  437.   //@ManagerLoadPrepareStart
  438.   aPeaValuesManager := BPeaValuesManagerClass.Build;
  439.   //@ManagerLoadPrepareStop
  440.   Try
  441.     aSQL.Builder.Select(SQL_NAME).All.
  442.       Where(SQL_DELETED_NOT).OrderBy(SQL_ID);
  443.     aQuery.Get(aSQL);
  444.     While Not(aQuery.EOF) Do
  445.       Begin
  446.         //@ManagerLoadStart
  447.         With aQuery Do
  448.           AddObject(ByInteger(SQL_ID)).Initialize(ByString(
  449.             SQL_CAPTION), aPeaValuesManager.GetObject(ByInteger(SQL_LINK)));
  450.         //@ManagerLoadStop
  451.         aQuery.Next;
  452.       End;
  453.     //@ManagerLoadPluralCallStart
  454.     LoadHugePeaValues(aQuery);
  455.     LoadPeaValuesFirst(aQuery);
  456.     LoadPeaValuesLast(aQuery);
  457.     //@ManagerLoadPluralCallStop
  458.   Finally
  459.     //@ManagerLoadFinalStart
  460.     aPeaValuesManager.Burn;
  461.     //@ManagerLoadFinalStop
  462.     aQuery.Burn;
  463.     aSQL.Burn;
  464.     LeaveState;
  465.   End;
  466. End;
  467.  
  468. Constructor BPeaContainersManagerClass.Build;
  469. Begin
  470.   Inherited Build(bPeaContainers, 0, SQL_NAME);
  471. End;
  472.  
  473. Destructor BPeaContainersManagerClass.Burn;
  474. Begin
  475.   Inherited Burn;
  476. End;
  477.  
  478. Initialization
  479. Begin
  480.   BPeaContainersManagerClass.bPeaContainers := BPeaContainersThreadList.Build;
  481. End;
  482.  
  483. Finalization
  484. Begin
  485.   BPeaContainersManagerClass.bPeaContainers.Purge;
  486.   BPeaContainersManagerClass.bPeaContainers.Burn;
  487. End;
  488. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement