Advertisement
Guest User

Untitled

a guest
Jun 14th, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 9.49 KB | None | 0 0
  1. Unit BPeaValueUnit;
  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.  
  16. //@UsesStop
  17. ;
  18.  
  19. Type BPeaValueClass = Class;
  20.  
  21. Type BPeaValuesList = Specialize BList<BPeaValueClass>;
  22. Type BPeaValuesThreadList = Specialize BThreadList<BPeaValueClass>;
  23. Type IPeaValueInterface = Specialize IGenericInterface<BPeaValueClass>;
  24.  
  25. Type
  26.  
  27.   { BPeaValueClass }
  28.  
  29.   BPeaValueClass = Class(BObjectClass, IPeaValueInterface)
  30.     Private
  31.       //@PropertiesPrivateStart
  32.       bCaption: String;
  33.       bIntValue: Integer;
  34.       bCaptions: BStringsThreadList;
  35.       bMyIntValues: BIntegersThreadList;
  36.       //@PropertiesPrivateStop
  37.       //@PluralSavesDeclareStart
  38.       Function SaveCaptions(Const aQuery: BQueryClass): Boolean;
  39.       Function SaveMyIntValues(Const aQuery: BQueryClass): Boolean;
  40.       //@PluralSavesDeclareStop
  41.       Procedure Load(Const aObject: BPeaValueClass);
  42.       Procedure InitializeObjects;
  43.     Public
  44.       //@PropertiesPublicStart
  45.       Property Caption: String Read bCaption Write bCaption;
  46.       Property IntValue: Integer Read bIntValue Write bIntValue;
  47.       Property Captions: BStringsThreadList Read bCaptions Write bCaptions;
  48.       Property MyIntValues: BIntegersThreadList Read bMyIntValues
  49.         Write bMyIntValues;
  50.       //@PropertiesPublicStop
  51.  
  52.       //@LoadPluralDeclareStart
  53.       Procedure LoadCaptions(Const aCaptions: BStringsList);
  54.       Procedure LoadMyIntValues(Const aMyIntValues: BIntegersList);
  55.       //@LoadPluralDeclareStop
  56.  
  57.       //@AddGetRemovePluralDeclareStart
  58.       //@AddGetRemovePluralDeclareStop
  59.      
  60.       Procedure Validate(Const aCommit: Boolean = FALSE);
  61.       Function Save(Const aQuery: BQueryClass): Boolean;
  62.       //@InitializeDeclareStart
  63.       Procedure Initialize(Const aCaption: String; Const aIntValue: Integer);
  64.       //@InitializeDeclareStop
  65.       Destructor Burn; Override;
  66. End;
  67.  
  68. Type BPeaValuesManagerBlank = Specialize BManagerGeneric<BPeaValueClass>;
  69.  
  70. Type
  71.  
  72.   { BPeaValuesManagerClass }
  73.  
  74.   BPeaValuesManagerClass = Class(BPeaValuesManagerBlank)
  75.     Private
  76.       bPeaValues: BPeaValuesThreadList; Static;
  77.       //@ManagerLoadPluralDeclareStart
  78.       Procedure LoadCaptions(Const aQuery: BQueryClass);
  79.       Procedure LoadMyIntValues(Const aQuery: BQueryClass);
  80.       //@ManagerLoadPluralDeclareStop
  81.     Public
  82.       Procedure Load;
  83.       Constructor Build;
  84.       Destructor Burn; Override;
  85. End;
  86.  
  87. Implementation
  88.  
  89. Const
  90.   SQL_ID = 'ID';
  91.   SQL_PRIOR = 'PRIOR';
  92.   SQL_NEXT = 'NEXT';
  93.   SQL_DELETED = 'DELETED';
  94.   SQL_DELETED_NOT = 'DELETED = 0';
  95.   SQL_ID_MATCH = 'ID = :ID';
  96.   //@ConstStart
  97.   SQL_NAME_MATCH = 'PEAVALUE = :PEAVALUE';
  98.   SQL_NAME = 'PEAVALUE';
  99.   SQL_CAPTION = 'CAPTION';
  100.   SQL_INT_VALUE = 'INT_VALUE';
  101.   SQL_CAPTIONS = 'CAPTIONS';
  102.   SQL_MY_INT_VALUES = 'MY_INT_VALUES';
  103.   //@ConstStop
  104.  
  105.  { BPeaValueClass }
  106.  
  107. Procedure BPeaValueClass.Load(Const aObject: BPeaValueClass);
  108. Begin
  109.   //@LoadStart
  110.   Initialize( aObject.Caption, aObject.IntValue);
  111.   Captions.Load(aObject.Captions.LockList);
  112.   aObject.Captions.UnlockList;
  113.   MyIntValues.Load(aObject.MyIntValues.LockList);
  114.   aObject.MyIntValues.UnlockList;
  115.   //@LoadStop
  116. End;
  117.  
  118. Procedure BPeaValueClass.InitializeObjects;
  119. Begin
  120.   If Not(bInitialized) Then
  121.     Begin
  122.       //@InitializeObjectsStart
  123.       bClassID := 100;
  124.       bCaptions := BStringsThreadList.Build;
  125.       bMyIntValues := BIntegersThreadList.Build;
  126.       //@InitializeObjectsStop
  127.       bInitialized := TRUE;
  128.     End;
  129. End;
  130.  
  131. //@LoadPluralStart
  132.  
  133. Procedure BPeaValueClass.LoadCaptions(Const aCaptions: BStringsList);
  134. Begin
  135.   bCaptions.Clear;
  136.   bCaptions.Load(aCaptions);
  137. End;
  138.  
  139. Procedure BPeaValueClass.LoadMyIntValues(Const aMyIntValues: BIntegersList);
  140. Begin
  141.   bMyIntValues.Clear;
  142.   bMyIntValues.Load(aMyIntValues);
  143. End;
  144. //@LoadPluralStop
  145.  
  146. //@AddGetRemovePluralStart
  147. //@AddGetRemovePluralStop      
  148.  
  149. Procedure BPeaValueClass.Validate(Const aCommit: Boolean);
  150. Begin
  151.   Raise BExceptionClass.Build(1, 'Not specific validation terms');
  152. End;
  153.  
  154. //@PluralSavesStart
  155.  
  156. Function BPeaValueClass.SaveCaptions(Const aQuery: BQueryClass): Boolean;
  157. Var
  158.   i: Integer;
  159.   aSQL: BSQLClass;
  160. Begin
  161.   aSQL := BSQLClass.Build;
  162.   Try
  163.     aSQL.Builder.Delete(SQL_NAME + '_' + SQL_CAPTIONS).
  164.       Where(SQL_NAME_MATCH);
  165.     Result := aQuery.Post(aSQL);
  166.     aSQL.Clear;
  167.     aSQL.Builder.Insert(SQL_NAME + '_' + SQL_CAPTIONS).
  168.       AddParam(SQL_NAME).AddParam(SQL_CAPTIONS);
  169.     aSQL.AddParam(SQL_NAME, ID);
  170.     With bCaptions.LockList Do
  171.       For i := 0 To Count - 1 Do
  172.         Begin
  173.           aSQL.AddParam(SQL_CAPTIONS, Items[i]);
  174.           Result := Result And aQuery.Post(aSQL);
  175.         End;
  176.     bCaptions.UnlockList;
  177.   Finally
  178.     aSQL.Burn;
  179.   End;
  180. End;
  181.  
  182. Function BPeaValueClass.SaveMyIntValues(Const aQuery: BQueryClass): Boolean;
  183. Var
  184.   i: Integer;
  185.   aSQL: BSQLClass;
  186. Begin
  187.   aSQL := BSQLClass.Build;
  188.   Try
  189.     aSQL.Builder.Delete(SQL_NAME + '_' + SQL_MY_INT_VALUES).
  190.       Where(SQL_NAME_MATCH);
  191.     Result := aQuery.Post(aSQL);
  192.     aSQL.Clear;
  193.     aSQL.Builder.Insert(SQL_NAME + '_' + SQL_MY_INT_VALUES).
  194.       AddParam(SQL_NAME).AddParam(SQL_MY_INT_VALUES);
  195.     aSQL.AddParam(SQL_NAME, ID);
  196.     With bMyIntValues.LockList Do
  197.       For i := 0 To Count - 1 Do
  198.         Begin
  199.           aSQL.AddParam(SQL_MY_INT_VALUES, Items[i]);
  200.           Result := Result And aQuery.Post(aSQL);
  201.         End;
  202.     bMyIntValues.UnlockList;
  203.   Finally
  204.     aSQL.Burn;
  205.   End;
  206. End;
  207. //@PluralSavesStop
  208.  
  209. Function BPeaValueClass.Save(Const aQuery: BQueryClass): Boolean;
  210. Var
  211.   i: Integer;
  212.   aSQL: BSQLClass;
  213. Begin
  214.   Validate(TRUE);
  215.   aSQL := BSQLClass.Build;
  216.   Try
  217.     //@SaveStart
  218.     If ID < 0 Then
  219.       aSQL.Builder.Insert(SQL_NAME).AddGenerator.AddParam(
  220.         SQL_DELETED).AddParam(SQL_PRIOR).AddParam(SQL_NEXT).AddParam(
  221.         SQL_CAPTION).AddParam(SQL_INT_VALUE).Returning(SQL_ID).Executable
  222.     Else
  223.       Begin
  224.         aSQL.Builder.Update(SQL_NAME).AddParam(SQL_DELETED).AddParam(
  225.           SQL_PRIOR).AddParam(SQL_NEXT).AddParam(SQL_CAPTION).
  226.           AddParam(SQL_INT_VALUE).Where(SQL_ID_MATCH);
  227.         aSQL.AddParam(SQL_ID, ID);
  228.       End;
  229.    
  230.     aSQL.AddParam(SQL_DELETED, bDeleted);
  231.     aSQL.AddParam(SQL_PRIOR, -1);
  232.     aSQL.AddParam(SQL_NEXT, -1);
  233.     aSQL.AddParam(SQL_CAPTION, Caption);
  234.     aSQL.AddParam(SQL_INT_VALUE, IntValue);
  235.     Result := aQuery.Post(aSQL);
  236.     If Result And (ID < 0) Then bID := aQuery.ByInteger(SQL_ID);
  237.     Result := Result And SaveCaptions(aQuery);
  238.     Result := Result And SaveMyIntValues(aQuery);
  239.     //@SaveStop
  240.   Finally
  241.     aSQL.Burn;
  242.   End;
  243. End;
  244.  
  245. //@InitializeStart
  246. Procedure BPeaValueClass.Initialize(Const aCaption: String; Const
  247.   aIntValue: Integer);
  248. Begin
  249.   InitializeObjects;
  250.   bCaption := aCaption;
  251.   bIntValue := aIntValue;
  252.   Validate;
  253. End;
  254. //@InitializeStop
  255.  
  256. Destructor BPeaValueClass.Burn;
  257. Begin
  258.   //@BurnStart
  259.   bCaptions.Burn;
  260.   bMyIntValues.Burn;
  261.   //@BurnStop
  262. End;
  263.  
  264.  { BPeaValuesManagerClass }
  265.  
  266. //@ManagerLoadPluralStart
  267.  
  268. Procedure BPeaValuesManagerClass.LoadCaptions(Const aQuery: BQueryClass);
  269. Var
  270.   aSQL: BSQLClass;
  271.   aPeaValue: BPeaValueClass;
  272. Begin
  273.   aSQL := BSQLClass.Build;
  274.   aSQL.Builder.Select(SQL_NAME + '_' + SQL_CAPTIONS).All;
  275.   Try;
  276.     aQuery.Get(aSQL);
  277.     While Not(aQuery.EOF) Do
  278.       Begin
  279.         aPeaValue := GetObject(aQuery.ByInteger(SQL_NAME));
  280.         If Not(aPeaValue = nil) Then
  281.           aPeaValue.Captions.Add(aQuery.ByString(SQL_CAPTIONS));
  282.         aQuery.Next;
  283.       End;
  284.   Finally
  285.     aSQL.Burn;
  286.   End;
  287. End;
  288.  
  289. Procedure BPeaValuesManagerClass.LoadMyIntValues(Const aQuery: BQueryClass);
  290. Var
  291.   aSQL: BSQLClass;
  292.   aPeaValue: BPeaValueClass;
  293. Begin
  294.   aSQL := BSQLClass.Build;
  295.   aSQL.Builder.Select(SQL_NAME + '_' + SQL_MY_INT_VALUES).All;
  296.   Try;
  297.     aQuery.Get(aSQL);
  298.     While Not(aQuery.EOF) Do
  299.       Begin
  300.         aPeaValue := GetObject(aQuery.ByInteger(SQL_NAME));
  301.         If Not(aPeaValue = nil) Then
  302.           aPeaValue.MyIntValues.Add(aQuery.ByInteger(SQL_MY_INT_VALUES));
  303.         aQuery.Next;
  304.       End;
  305.   Finally
  306.     aSQL.Burn;
  307.   End;
  308. End;
  309. //@ManagerLoadPluralStop
  310.  
  311. Procedure BPeaValuesManagerClass.Load;
  312. Var
  313.   aSQL: BSQLClass;
  314.   aQuery: BQueryClass;
  315.   //@ManagerLoadVarsStart
  316.   //@ManagerLoadVarsStop
  317. Begin
  318.   EnterState(msLoading);
  319.   aSQL := BSQLClass.Build;
  320.   aQuery := BQueryClass.Build(bDBIndex);
  321.   //@ManagerLoadPrepareStart
  322.   //@ManagerLoadPrepareStop
  323.   Try
  324.     aSQL.Builder.Select(SQL_NAME).All.
  325.       Where(SQL_DELETED_NOT).OrderBy(SQL_ID);
  326.     aQuery.Get(aSQL);
  327.     While Not(aQuery.EOF) Do
  328.       Begin
  329.         //@ManagerLoadStart
  330.         With aQuery Do
  331.           AddObject(ByInteger(SQL_ID)).Initialize(ByString(
  332.             SQL_CAPTION), ByInteger(SQL_INT_VALUE));
  333.         //@ManagerLoadStop
  334.         aQuery.Next;
  335.       End;
  336.     //@ManagerLoadPluralCallStart
  337.     LoadCaptions(aQuery);
  338.     LoadMyIntValues(aQuery);
  339.     //@ManagerLoadPluralCallStop
  340.   Finally
  341.     //@ManagerLoadFinalStart
  342.     //@ManagerLoadFinalStop
  343.     aQuery.Burn;
  344.     aSQL.Burn;
  345.     LeaveState;
  346.   End;
  347. End;
  348.  
  349. Constructor BPeaValuesManagerClass.Build;
  350. Begin
  351.   Inherited Build(bPeaValues, 0, SQL_NAME);
  352. End;
  353.  
  354. Destructor BPeaValuesManagerClass.Burn;
  355. Begin
  356.   Inherited Burn;
  357. End;
  358.  
  359. Initialization
  360. Begin
  361.   BPeaValuesManagerClass.bPeaValues := BPeaValuesThreadList.Build;
  362. End;
  363.  
  364. Finalization
  365. Begin
  366.   BPeaValuesManagerClass.bPeaValues.Purge;
  367.   BPeaValuesManagerClass.bPeaValues.Burn;
  368. End;
  369. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement