[Kmymoney-devel] Review Request: Refactoring of matching a transaction-under-import

Łukasz Maszczyński lukasz at maszczynski.net
Mon Dec 10 16:11:50 UTC 2012

This is an automatically generated e-mail. To reply, visit:

(Updated Dec. 10, 2012, 4:11 p.m.)

Review request for KMymoney.


boost::optional replaced with QScopedPointer in TransactionMatchFinder


1. please note that dependency on Boost is no longer optional (see changes in CMakeLists.txt)

2. Architectural changes
   Until now, the method MyMoneyStatementReader::processTransactionEntry() handled the whole process of importing a transaction - that is: handling the securities, matching and creating payees, and - at the very end of the method - adding the transaction to the ledger.
   The last step (adding transaction to ledger) is the main target of this refactoring. Its algorithm was as follows:
   1. find a matching transaction (either existing or scheduled) - using TransactionMatcher::findMatch()
   2. If an "existing transaction match" is found - handle it (in the old code it's the block starting with a comment "// it matched a simple transaction. that's the easy case")
   3. Else if a "scheduled transaction match" is found - handle it ("// a match has been found in a pending schedule"...)

   Code "mapping" is as follows:
   - step 2 (above) is extracted to handleMatchingOfExistingTransaction()
   - step 3 (above) is extracted to handleMatchingOfScheduledTransaction()
   - TransactionMatcher::findMatch() is extracted to TransactionMatchFinder::findMatch() (note: there are two pure-virtual functions that are implemented in ExistingTransactionMatchFinder, ScheduledTransactionMatchFinder classes)
   - TransactionMatcher::checkTransaction() is extracted to TransactionMatchFinder::findMatchingSplit()

3. Memory management changes
   Raw pointers are no longer used, as these are typically error-prone. Pointers were replaced either with object instances, or boost::optional is used if applicable (e.g. see members of TransactionMatchFinder class).

4. dynamic_casts removed (were used on pointers returned by TransactionMatcher::findMatch(), no longer needed - see TransactionMatchFinder::getMatchedTransaction() and getMatchedSchedule() )

5. variable/method names - I did my best to keep those meaningful: e.g. "importedTransaction" instead of "t")

Diffs (updated)

  CMakeLists.txt 93af070 
  kmymoney/converter/mymoneystatementreader.h 758ff00 
  kmymoney/converter/mymoneystatementreader.cpp 42c4841 
  kmymoney/dialogs/CMakeLists.txt 9a8d782 
  kmymoney/dialogs/existingtransactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/existingtransactionmatchfinder.cpp PRE-CREATION 
  kmymoney/dialogs/scheduledtransactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/scheduledtransactionmatchfinder.cpp PRE-CREATION 
  kmymoney/dialogs/transactionmatcher.h d09a4cd 
  kmymoney/dialogs/transactionmatcher.cpp c380877 
  kmymoney/dialogs/transactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/transactionmatchfinder.cpp PRE-CREATION 

Diff: http://git.reviewboard.kde.org/r/107137/diff/


make test


Łukasz Maszczyński

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kmymoney-devel/attachments/20121210/a823bebc/attachment.html>

More information about the KMyMoney-devel mailing list