Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Unit BPeaValueUnit;
- {$mode objfpc}{$H+}
- Interface
- Uses
- {$IFDEF TestCase}
- BMockQueryUnit,
- {$ELSE}
- BQueryUnit,
- {$ENDIF}
- sysutils, Classes, BCommonUnit, BListsUnit, BObjectUnit, BSQLUnit
- //@UsesStart
- //@UsesStop
- ;
- Type BPeaValueClass = Class;
- Type BPeaValuesList = Specialize BList<BPeaValueClass>;
- Type BPeaValuesThreadList = Specialize BThreadList<BPeaValueClass>;
- Type IPeaValueInterface = Specialize IGenericInterface<BPeaValueClass>;
- Type
- { BPeaValueClass }
- BPeaValueClass = Class(BObjectClass, IPeaValueInterface)
- Private
- //@PropertiesPrivateStart
- bCaption: String;
- bIntValue: Integer;
- bCaptions: BStringsThreadList;
- bMyIntValues: BIntegersThreadList;
- //@PropertiesPrivateStop
- //@PluralSavesDeclareStart
- Function SaveCaptions(Const aQuery: BQueryClass): Boolean;
- Function SaveMyIntValues(Const aQuery: BQueryClass): Boolean;
- //@PluralSavesDeclareStop
- Procedure Load(Const aObject: BPeaValueClass);
- Procedure InitializeObjects;
- Public
- //@PropertiesPublicStart
- Property Caption: String Read bCaption Write bCaption;
- Property IntValue: Integer Read bIntValue Write bIntValue;
- Property Captions: BStringsThreadList Read bCaptions Write bCaptions;
- Property MyIntValues: BIntegersThreadList Read bMyIntValues
- Write bMyIntValues;
- //@PropertiesPublicStop
- //@LoadPluralDeclareStart
- Procedure LoadCaptions(Const aCaptions: BStringsList);
- Procedure LoadMyIntValues(Const aMyIntValues: BIntegersList);
- //@LoadPluralDeclareStop
- //@AddGetRemovePluralDeclareStart
- //@AddGetRemovePluralDeclareStop
- Procedure Validate(Const aCommit: Boolean = FALSE);
- Function Save(Const aQuery: BQueryClass): Boolean;
- //@InitializeDeclareStart
- Procedure Initialize(Const aCaption: String; Const aIntValue: Integer);
- //@InitializeDeclareStop
- Destructor Burn; Override;
- End;
- Type BPeaValuesManagerBlank = Specialize BManagerGeneric<BPeaValueClass>;
- Type
- { BPeaValuesManagerClass }
- BPeaValuesManagerClass = Class(BPeaValuesManagerBlank)
- Private
- bPeaValues: BPeaValuesThreadList; Static;
- //@ManagerLoadPluralDeclareStart
- Procedure LoadCaptions(Const aQuery: BQueryClass);
- Procedure LoadMyIntValues(Const aQuery: BQueryClass);
- //@ManagerLoadPluralDeclareStop
- Public
- Procedure Load;
- Constructor Build;
- Destructor Burn; Override;
- End;
- Implementation
- Const
- SQL_ID = 'ID';
- SQL_PRIOR = 'PRIOR';
- SQL_NEXT = 'NEXT';
- SQL_DELETED = 'DELETED';
- SQL_DELETED_NOT = 'DELETED = 0';
- SQL_ID_MATCH = 'ID = :ID';
- //@ConstStart
- SQL_NAME_MATCH = 'PEAVALUE = :PEAVALUE';
- SQL_NAME = 'PEAVALUE';
- SQL_CAPTION = 'CAPTION';
- SQL_INT_VALUE = 'INT_VALUE';
- SQL_CAPTIONS = 'CAPTIONS';
- SQL_MY_INT_VALUES = 'MY_INT_VALUES';
- //@ConstStop
- { BPeaValueClass }
- Procedure BPeaValueClass.Load(Const aObject: BPeaValueClass);
- Begin
- //@LoadStart
- Initialize( aObject.Caption, aObject.IntValue);
- Captions.Load(aObject.Captions.LockList);
- aObject.Captions.UnlockList;
- MyIntValues.Load(aObject.MyIntValues.LockList);
- aObject.MyIntValues.UnlockList;
- //@LoadStop
- End;
- Procedure BPeaValueClass.InitializeObjects;
- Begin
- If Not(bInitialized) Then
- Begin
- //@InitializeObjectsStart
- bClassID := 100;
- bCaptions := BStringsThreadList.Build;
- bMyIntValues := BIntegersThreadList.Build;
- //@InitializeObjectsStop
- bInitialized := TRUE;
- End;
- End;
- //@LoadPluralStart
- Procedure BPeaValueClass.LoadCaptions(Const aCaptions: BStringsList);
- Begin
- bCaptions.Clear;
- bCaptions.Load(aCaptions);
- End;
- Procedure BPeaValueClass.LoadMyIntValues(Const aMyIntValues: BIntegersList);
- Begin
- bMyIntValues.Clear;
- bMyIntValues.Load(aMyIntValues);
- End;
- //@LoadPluralStop
- //@AddGetRemovePluralStart
- //@AddGetRemovePluralStop
- Procedure BPeaValueClass.Validate(Const aCommit: Boolean);
- Begin
- Raise BExceptionClass.Build(1, 'Not specific validation terms');
- End;
- //@PluralSavesStart
- Function BPeaValueClass.SaveCaptions(Const aQuery: BQueryClass): Boolean;
- Var
- i: Integer;
- aSQL: BSQLClass;
- Begin
- aSQL := BSQLClass.Build;
- Try
- aSQL.Builder.Delete(SQL_NAME + '_' + SQL_CAPTIONS).
- Where(SQL_NAME_MATCH);
- Result := aQuery.Post(aSQL);
- aSQL.Clear;
- aSQL.Builder.Insert(SQL_NAME + '_' + SQL_CAPTIONS).
- AddParam(SQL_NAME).AddParam(SQL_CAPTIONS);
- aSQL.AddParam(SQL_NAME, ID);
- With bCaptions.LockList Do
- For i := 0 To Count - 1 Do
- Begin
- aSQL.AddParam(SQL_CAPTIONS, Items[i]);
- Result := Result And aQuery.Post(aSQL);
- End;
- bCaptions.UnlockList;
- Finally
- aSQL.Burn;
- End;
- End;
- Function BPeaValueClass.SaveMyIntValues(Const aQuery: BQueryClass): Boolean;
- Var
- i: Integer;
- aSQL: BSQLClass;
- Begin
- aSQL := BSQLClass.Build;
- Try
- aSQL.Builder.Delete(SQL_NAME + '_' + SQL_MY_INT_VALUES).
- Where(SQL_NAME_MATCH);
- Result := aQuery.Post(aSQL);
- aSQL.Clear;
- aSQL.Builder.Insert(SQL_NAME + '_' + SQL_MY_INT_VALUES).
- AddParam(SQL_NAME).AddParam(SQL_MY_INT_VALUES);
- aSQL.AddParam(SQL_NAME, ID);
- With bMyIntValues.LockList Do
- For i := 0 To Count - 1 Do
- Begin
- aSQL.AddParam(SQL_MY_INT_VALUES, Items[i]);
- Result := Result And aQuery.Post(aSQL);
- End;
- bMyIntValues.UnlockList;
- Finally
- aSQL.Burn;
- End;
- End;
- //@PluralSavesStop
- Function BPeaValueClass.Save(Const aQuery: BQueryClass): Boolean;
- Var
- i: Integer;
- aSQL: BSQLClass;
- Begin
- Validate(TRUE);
- aSQL := BSQLClass.Build;
- Try
- //@SaveStart
- If ID < 0 Then
- aSQL.Builder.Insert(SQL_NAME).AddGenerator.AddParam(
- SQL_DELETED).AddParam(SQL_PRIOR).AddParam(SQL_NEXT).AddParam(
- SQL_CAPTION).AddParam(SQL_INT_VALUE).Returning(SQL_ID).Executable
- Else
- Begin
- aSQL.Builder.Update(SQL_NAME).AddParam(SQL_DELETED).AddParam(
- SQL_PRIOR).AddParam(SQL_NEXT).AddParam(SQL_CAPTION).
- AddParam(SQL_INT_VALUE).Where(SQL_ID_MATCH);
- aSQL.AddParam(SQL_ID, ID);
- End;
- aSQL.AddParam(SQL_DELETED, bDeleted);
- aSQL.AddParam(SQL_PRIOR, -1);
- aSQL.AddParam(SQL_NEXT, -1);
- aSQL.AddParam(SQL_CAPTION, Caption);
- aSQL.AddParam(SQL_INT_VALUE, IntValue);
- Result := aQuery.Post(aSQL);
- If Result And (ID < 0) Then bID := aQuery.ByInteger(SQL_ID);
- Result := Result And SaveCaptions(aQuery);
- Result := Result And SaveMyIntValues(aQuery);
- //@SaveStop
- Finally
- aSQL.Burn;
- End;
- End;
- //@InitializeStart
- Procedure BPeaValueClass.Initialize(Const aCaption: String; Const
- aIntValue: Integer);
- Begin
- InitializeObjects;
- bCaption := aCaption;
- bIntValue := aIntValue;
- Validate;
- End;
- //@InitializeStop
- Destructor BPeaValueClass.Burn;
- Begin
- //@BurnStart
- bCaptions.Burn;
- bMyIntValues.Burn;
- //@BurnStop
- End;
- { BPeaValuesManagerClass }
- //@ManagerLoadPluralStart
- Procedure BPeaValuesManagerClass.LoadCaptions(Const aQuery: BQueryClass);
- Var
- aSQL: BSQLClass;
- aPeaValue: BPeaValueClass;
- Begin
- aSQL := BSQLClass.Build;
- aSQL.Builder.Select(SQL_NAME + '_' + SQL_CAPTIONS).All;
- Try;
- aQuery.Get(aSQL);
- While Not(aQuery.EOF) Do
- Begin
- aPeaValue := GetObject(aQuery.ByInteger(SQL_NAME));
- If Not(aPeaValue = nil) Then
- aPeaValue.Captions.Add(aQuery.ByString(SQL_CAPTIONS));
- aQuery.Next;
- End;
- Finally
- aSQL.Burn;
- End;
- End;
- Procedure BPeaValuesManagerClass.LoadMyIntValues(Const aQuery: BQueryClass);
- Var
- aSQL: BSQLClass;
- aPeaValue: BPeaValueClass;
- Begin
- aSQL := BSQLClass.Build;
- aSQL.Builder.Select(SQL_NAME + '_' + SQL_MY_INT_VALUES).All;
- Try;
- aQuery.Get(aSQL);
- While Not(aQuery.EOF) Do
- Begin
- aPeaValue := GetObject(aQuery.ByInteger(SQL_NAME));
- If Not(aPeaValue = nil) Then
- aPeaValue.MyIntValues.Add(aQuery.ByInteger(SQL_MY_INT_VALUES));
- aQuery.Next;
- End;
- Finally
- aSQL.Burn;
- End;
- End;
- //@ManagerLoadPluralStop
- Procedure BPeaValuesManagerClass.Load;
- Var
- aSQL: BSQLClass;
- aQuery: BQueryClass;
- //@ManagerLoadVarsStart
- //@ManagerLoadVarsStop
- Begin
- EnterState(msLoading);
- aSQL := BSQLClass.Build;
- aQuery := BQueryClass.Build(bDBIndex);
- //@ManagerLoadPrepareStart
- //@ManagerLoadPrepareStop
- Try
- aSQL.Builder.Select(SQL_NAME).All.
- Where(SQL_DELETED_NOT).OrderBy(SQL_ID);
- aQuery.Get(aSQL);
- While Not(aQuery.EOF) Do
- Begin
- //@ManagerLoadStart
- With aQuery Do
- AddObject(ByInteger(SQL_ID)).Initialize(ByString(
- SQL_CAPTION), ByInteger(SQL_INT_VALUE));
- //@ManagerLoadStop
- aQuery.Next;
- End;
- //@ManagerLoadPluralCallStart
- LoadCaptions(aQuery);
- LoadMyIntValues(aQuery);
- //@ManagerLoadPluralCallStop
- Finally
- //@ManagerLoadFinalStart
- //@ManagerLoadFinalStop
- aQuery.Burn;
- aSQL.Burn;
- LeaveState;
- End;
- End;
- Constructor BPeaValuesManagerClass.Build;
- Begin
- Inherited Build(bPeaValues, 0, SQL_NAME);
- End;
- Destructor BPeaValuesManagerClass.Burn;
- Begin
- Inherited Burn;
- End;
- Initialization
- Begin
- BPeaValuesManagerClass.bPeaValues := BPeaValuesThreadList.Build;
- End;
- Finalization
- Begin
- BPeaValuesManagerClass.bPeaValues.Purge;
- BPeaValuesManagerClass.bPeaValues.Burn;
- End;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement