package Ġcom . c act ust e am . money . sync Ċ Ċ import Ġandroid . support . v 4 . util . Array Map Ċ import Ġcom . c act ust e am . money . data . Data Constants Ċ import Ġcom . c act ust e am . money . data . DataManager Ċ import Ġcom . c act ust e am . money . data . dao .* Ċ import Ġcom . c act ust e am . money . sync . changes . Change Item Ċ import Ġcom . c act ust e am . money . sync . changes . Changes List Ċ import Ġcom . c act ust e am . money . sync . model .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġv pot ap enko Ċ Ġ*/ Ċ internal Ġclass ĠSync Proxy Database ( private Ġval Ġdata Manager : ĠData Manager ) Ġ: ĠI Proxy Database Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrun In Tx ( r : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . dao Session . run In Tx ( r ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġalready Applied ( type : ĠInt , Ġcommand Id : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġdata Manager . dao Session . sync Log Dao . query Builder (). where ( Sync Log Dao . Properties . Type . eq ( type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSync Log Dao . Properties . Global Id . eq ( command Id )). limit ( 1 ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġcount Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Dir ties ( items : ĠList < Change Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Dirty ( item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠSync Log () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . global Id Ġ= Ġitem . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . type Ġ= Ġitem . object Wrapper . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . dao Session . insert ( log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Account ( command Id : ĠLong , Ġa : ĠSync Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . account Service . create Account Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . currency Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . skip In Balance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . ACCOUNT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Sync Log ( type : ĠInt , Ġcommand Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠSync Log () ĊĠĠĠĠĠĠĠ Ġlog . global Id Ġ= Ġcommand Id ĊĠĠĠĠĠĠĠ Ġlog . type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġdata Manager . dao Session . insert ( log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Account ( command Id : ĠLong , Ġa : ĠSync Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( a . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Account ( command Id , Ġa , Ġaccount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġadded Ġinfo Ġmessage ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Account ( command Id : ĠLong , Ġa : ĠSync Account , Ġaccount : ĠAccount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . account Service . update Account Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . currency Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . skip In Balance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . ACCOUNT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Account By Global Id ( global Id : ĠLong ?): ĠAccount ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( global Id Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . account Dao . query Builder (). where ( Account Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Account ( command Id : ĠLong , Ġa : ĠSync Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( a . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( account ) ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . ACCOUNT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Account ( command Id : ĠLong , Ġa : ĠSync Account , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġdata Manager . dao Session . account Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Account ( command Id , Ġa , Ġaccount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Account ( command Id , Ġa ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Accounts (): ĠList < Sync Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . account Dao . query Builder (). where Or ( Account Dao . Properties . Sync ed . eq ( false ), ĠAccount Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġaccounts Ġ= ĠArrayList < Sync Account >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( a Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= ĠSync Account () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . global Id Ġ= Ġif Ġ( a . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġa . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . local Id Ġ= Ġa . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . name Ġ= Ġa . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . color Ġ= Ġa . color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . currency Code Ġ= Ġa . currency Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . deleted Ġ= Ġa . deleted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . type Ġ= Ġa . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . skip In Balance Ġ= Ġa . skip In Balance ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts . add ( account ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . ACCOUNT _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= ĠSync Account () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts . add ( account ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaccounts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Accounts (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . account Dao . query Builder (). where Or ( Account Dao . Properties . Sync ed . eq ( false ), ĠAccount Dao . Properties . Global Id . isNull ). count () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . ACCOUNT _ TYPE )). count () Ġ> Ġ 0 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Category ( command Id : ĠLong , Ġc : ĠSync Category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . category Service . create Category Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Category ( command Id : ĠLong , Ġc : ĠSync Category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( c . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Category ( command Id , Ġc , Ġcategory ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġadded Ġinfo Ġlog ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Category ( command Id : ĠLong , Ġc : ĠSync Category , Ġcategory : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . category Service . update Category Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Category By Global Id ( global Id : ĠLong ?): ĠCategory ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( global Id Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . category Dao . query Builder (). where ( Category Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Category ( command Id : ĠLong , Ġc : ĠSync Category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( c . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( category ) ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Category ( command Id : ĠLong , Ġc : ĠSync Category , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġdata Manager . dao Session . category Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Category ( command Id , Ġc , Ġcategory ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Category ( command Id , Ġc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Categories (): ĠList < Sync Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . category Dao . query Builder (). where Or ( Category Dao . Properties . Sync ed . eq ( false ), ĠCategory Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= ĠArrayList < Sync Category >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠSync Category () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . global Id Ġ= Ġif Ġ( c . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġc . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . local Id Ġ= Ġc . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . type Ġ= Ġc . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . name Ġ= Ġc . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . icon Ġ= Ġc . icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . deleted Ġ= Ġc . deleted ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategories . add ( category ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . CATEGORY _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠSync Category () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategories . add ( category ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcategories ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Categories (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . category Dao . query Builder (). where Or ( Category Dao . Properties . Sync ed . eq ( false ), ĠCategory Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . CATEGORY _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Sub category ( command Id : ĠLong , Ġs : ĠSync Sub category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( s . global CategoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . category Service . create Sub category Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . SUB CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Sub category ( command Id : ĠLong , Ġs : ĠSync Sub category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( s . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( subcategory Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sub category ( command Id , Ġs , Ġsub category ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Sub category ( command Id : ĠLong , Ġs : ĠSync Sub category , Ġsub category : ĠSub category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Manager . category Service . update Sub category Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . global Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . SUB CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sub category By Global Id ( global Id : ĠLong ?): ĠSub category ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( global Id Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . subcategory Dao . query Builder (). where ( Sub category Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Sub category ( command Id : ĠLong , Ġs : ĠSync Sub category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( s . global Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( subcategory Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( subcategory ) ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . SUB CATEGORY _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Sub category ( command Id : ĠLong , Ġs : ĠSync Sub category , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġdata Manager . dao Session . subcategory Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( subcategory Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sub category ( command Id , Ġs , Ġsub category ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sub category ( command Id , Ġs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Sub categories (): ĠList < Sync Sub category > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . subcategory Dao . query Builder (). where Or ( Sub category Dao . Properties . Sync ed . eq ( false ), ĠSub category Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġsub categories Ġ= ĠArrayList < Sync Sub category >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= ĠSync Sub category () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . global Id Ġ= Ġif Ġ( s . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġs . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . local Id Ġ= Ġs . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . name Ġ= Ġs . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . deleted Ġ= Ġs . deleted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . global CategoryId Ġ= Ġs . category . global Id !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub categories . add ( subcategory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . SUB CATEGORY _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= ĠSync Sub category () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub categories . add ( subcategory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsub categories ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Sub categories (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . subcategory Dao . query Builder (). where Or ( Sub category Dao . Properties . Sync ed . eq ( false ), ĠSub category Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . SUB CATEGORY _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Transaction ( command Id : ĠLong , Ġt : ĠSync Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . transaction Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Transaction Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( t . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Type ( t . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Date ( Date ( t . date )) ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( t . global Source AccountId ) ĊĠĠĠĠĠĠĠ Ġb . put Source AccountId ( if Ġ( account Ġ!= Ġnull ) Ġaccount . id Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Comment ( t . comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Ref ( convertTo Local Ref ( t . ref )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Status ( t . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Amount ( t . amount ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( t . global CategoryId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( t . global CategoryId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put CategoryId ( category ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( t . global Sub categoryId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( t . global Sub categoryId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Sub categoryId ( subcategory ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( t . global Dest AccountId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest Account Ġ= Ġget Account By Global Id ( t . global Dest AccountId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Dest AccountId ( dest Account ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . put Dest Amount ( t . dest Amount ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġt . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . create Internal () ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . TRANSACTION _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Transaction ( command Id : ĠLong , Ġt : ĠSync Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . TRANSACTION _ TYPE , Ġt . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġget Transaction By Global Id ( t . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Transaction ( command Id , Ġt , Ġtransaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . TRANSACTION _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Transaction ( command Id : ĠLong , Ġt : ĠSync Transaction , Ġtransaction : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . transaction Service . new Transaction Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Id ( transaction . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( t . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Date ( Date ( t . date )) ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( t . global Source AccountId ) ĊĠĠĠĠĠĠĠ Ġb . put Source AccountId ( if Ġ( account Ġ!= Ġnull ) Ġaccount . id Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Comment ( t . comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Ref ( convertTo Local Ref ( t . ref )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Status ( t . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Amount ( t . amount ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( t . global CategoryId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( t . global CategoryId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put CategoryId ( category ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( t . global Sub categoryId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( t . global Sub categoryId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Sub categoryId ( subcategory ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( t . global Dest AccountId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest Account Ġ= Ġget Account By Global Id ( t . global Dest AccountId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Dest AccountId ( dest Account ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . put Dest Amount ( t . dest Amount ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġt . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . update Internal () ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . TRANSACTION _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Transaction By Global Id ( global Id : ĠLong ): ĠTransaction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . transaction Dao . query Builder (). where ( Transaction Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Transaction ( command Id : ĠLong , Ġt : ĠSync Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . TRANSACTION _ TYPE , Ġt . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġget Transaction By Global Id ( t . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( Sync Constants . TRANSACTION _ TYPE , Ġt . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . TRANSACTION _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Transaction ( command Id : ĠLong , Ġt : ĠSync Transaction , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġdata Manager . dao Session . transaction Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Transaction ( command Id , Ġt , Ġtransaction ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ( command Id , Ġt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Transactions (): ĠList < Sync Transaction > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . transaction Dao . query Builder (). where Or ( Transaction Dao . Properties . Sync ed . eq ( false ), ĠTransaction Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġtransactions Ġ= ĠArrayList < Sync Transaction >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĠSync Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global Id Ġ= Ġif Ġ( t . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġt . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . local Id Ġ= Ġt . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . type Ġ= Ġt . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . date Ġ= Ġt . date . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global Source AccountId Ġ= Ġt . source Account . global Id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . comment Ġ= Ġt . comment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . ref Ġ= ĠconvertTo Global Ref ( t . ref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . status Ġ= Ġt . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . amount Ġ= Ġt . amount ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global CategoryId Ġ= Ġif Ġ( t . categoryId Ġ!= Ġnull ) Ġt . category . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global Sub categoryId Ġ= Ġif Ġ( t . subcategory Id Ġ!= Ġnull ) Ġt . subcategory . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global Dest AccountId Ġ= Ġif Ġ( t . dest AccountId Ġ!= Ġnull ) Ġt . dest Account . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . dest Amount Ġ= Ġt . dest Amount ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġt . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . tags . add ( tag . tag . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions . add ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . TRANSACTION _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĠSync Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions . add ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtransactions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Transactions (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . transaction Dao . query Builder (). where Or ( Transaction Dao . Properties . Sync ed . eq ( false ), ĠTransaction Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . TRANSACTION _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert ToLocal Ref ( ref : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ref Ġ!= Ġnull Ġ&& Ġref . startsWith ( De bt . DE BT _ REF _ START )) Ġ{ Ġ// ĠDeb t Ġreference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Id Ġ= Ġref . substring ( De bt . DE BT _ REF _ START . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġget De bt By Global Id ( java . lang . Long . parse Long ( de bt Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( de bt Ġ== Ġnull ) Ġnull Ġelse ĠString . format ( De bt . DE BT _ REF _ PATTERN , Ġde bt . id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget De bt By Global Id ( global Id : ĠLong ): ĠDeb t ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . de bt Dao . query Builder (). where ( De bt Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget De bt Note By Global Id ( global Id : ĠLong ): ĠDeb t Note ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . de bt Note Dao . query Builder (). where ( De bt Note Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠconvertTo Global Ref ( ref : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ref Ġ!= Ġnull Ġ&& Ġref . startsWith ( De bt . DE BT _ REF _ START )) Ġ{ Ġ// ĠDeb t Ġreference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Id Ġ= Ġref . substring ( De bt . DE BT _ REF _ START . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġdata Manager . dao Session . de bt Dao . load ( java . lang . Long . parse Long ( de bt Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ( De bt . DE BT _ REF _ PATTERN , Ġde bt . global Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate De bt ( command Id : ĠLong , Ġd : ĠSync De bt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . de bt Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new De bt Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( d . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( d . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Phone ( d . phone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Finished ( d . finished ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( d . global AccountId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġb . put AccountId ( account . id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( d . till Ġ!= Ġnull ) Ġb . put T ill ( Date ( d . till )) ĊĠĠĠĠĠĠĠ Ġif Ġ( d . start Ġ!= Ġnull ) Ġb . put Start ( Date ( d . start )) ĊĊĠĠĠĠĠĠĠ Ġb . create Internal () ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate De bt ( command Id : ĠLong , Ġd : ĠSync De bt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . DE BT _ TYPE , Ġd . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġget De bt By Global Id ( d . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de bt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate De bt ( command Id , Ġd , Ġde bt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate De bt ( command Id : ĠLong , Ġd : ĠSync De bt , Ġde bt : ĠDeb t ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . de bt Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new De bt Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Id ( de bt . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( d . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( d . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Phone ( d . phone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Finished ( d . finished ) ĊĠĠĠĠĠĠĠ Ġif Ġ( d . till Ġ!= Ġnull ) Ġb . put T ill ( Date ( d . till )) ĊĠĠĠĠĠĠĠ Ġif Ġ( d . start Ġ!= Ġnull ) Ġb . put Start ( Date ( d . start )) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( d . global AccountId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġb . put AccountId ( account . id ) ĊĊĠĠĠĠĠĠĠ Ġb . update Internal () ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete De bt ( command Id : ĠLong , Ġd : ĠSync De bt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . DE BT _ TYPE , Ġd . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġget De bt By Global Id ( d . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de bt Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( de bt ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( Sync Constants . DE BT _ TYPE , Ġd . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge De bt ( command Id : ĠLong , Ġd : ĠSync De bt , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġdata Manager . dao Session . de bt Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( de bt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate De bt ( command Id , Ġd , Ġde bt ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate De bt ( command Id , Ġd ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Deb ts (): ĠList < Sync De bt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . de bt Dao . query Builder (). where Or ( De bt Dao . Properties . Sync ed . eq ( false ), ĠDeb t Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġdeb ts Ġ= ĠArrayList < Sync De bt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= ĠSync De bt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . global Id Ġ= Ġif Ġ( d . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġd . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . local Id Ġ= Ġd . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . name Ġ= Ġd . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . phone Ġ= Ġd . phone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . finished Ġ= Ġd . finished ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . till Ġ= Ġd . till ?. time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . start Ġ= Ġd . start ?. time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . global AccountId Ġ= Ġd . account . global Id !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeb ts . add ( de bt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . DE BT _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= ĠSync De bt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeb ts . add ( de bt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeb ts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Deb ts (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . de bt Dao . query Builder (). where Or ( De bt Dao . Properties . Sync ed . eq ( false ), ĠDeb t Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . DE BT _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate De bt Note ( command Id : ĠLong , Ġn : ĠSync De bt Note ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġget De bt By Global Id ( n . global De bt Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( de bt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Ġ= Ġdata Manager . de bt Service . create De bt Note Internal ( de bt . id , Ġn . text , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate De bt Note ( command Id , Ġn , Ġnote ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ NOTE _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate De bt Note ( command Id : ĠLong , Ġn : ĠSync De bt Note , Ġnote : ĠDeb t Note ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnote . date Ġ= ĠDate ( n . date Ġ?: ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġnote . text Ġ= Ġn . text ĊĠĠĠĠĠĠĠ Ġnote . global Id Ġ= Ġn . global Id ĊĠĠĠĠĠĠĠ Ġnote . sync ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdata Manager . dao Session . update ( note ) ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ NOTE _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate De bt Note ( command Id : ĠLong , Ġn : ĠSync De bt Note ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . DE BT _ NOTE _ TYPE , Ġn . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Note Ġ= Ġget De bt Note By Global Id ( n . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de bt Note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate De bt Note ( command Id , Ġn , Ġde bt Note ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ NOTE _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete De bt Note ( command Id : ĠLong , Ġn : ĠSync De bt Note ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . DE BT _ NOTE _ TYPE , Ġn . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Note Ġ= Ġget De bt Note By Global Id ( n . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de bt Note Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( de bt Note ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( Sync Constants . DE BT _ NOTE _ TYPE , Ġn . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . DE BT _ NOTE _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge De bt Note ( command Id : ĠLong , Ġn : ĠSync De bt Note , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde bt Note Ġ= Ġdata Manager . dao Session . de bt Note Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( de bt Note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate De bt Note ( command Id , Ġn , Ġde bt Note ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate De bt Note ( command Id , Ġn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty De bt Notes (): ĠMutable List < Sync De bt Note > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . de bt Note Dao . query Builder (). where Or ( De bt Note Dao . Properties . Sync ed . eq ( false ), ĠDeb t Note Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġde bt Notes Ġ= ĠArrayList < Sync De bt Note >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Note Ġ= ĠSync De bt Note () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . global Id Ġ= Ġif Ġ( n . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġn . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . local Id Ġ= Ġn . id !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Ġ= Ġdao Session . de bt Dao . load ( n . de bt Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . global De bt Id Ġ= Ġde bt . global Id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . text Ġ= Ġn . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . date Ġ= Ġn . date . time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Notes . add ( de bt Note ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . DE BT _ NOTE _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde bt Note Ġ= ĠSync De bt Note () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Note . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bt Notes . add ( de bt Note ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġde bt Notes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty De bt Notes (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . de bt Note Dao . query Builder (). where Or ( De bt Note Dao . Properties . Sync ed . eq ( false ), ĠDeb t Note Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . DE BT _ NOTE _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Pattern ( command Id : ĠLong , Ġp : ĠSync Pattern ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . pattern Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Pattern Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( p . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( p . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Type ( p . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Source AccountId ( get Account By Global Id ( p . global Source AccountId ) !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Comment ( p . comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Amount ( p . amount ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( p . global CategoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġb . put CategoryId ( category . id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( p . global Sub categoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( subcategory Ġ!= Ġnull ) Ġb . put Sub categoryId ( subcategory . id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( p . global Dest AccountId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġb . put Dest AccountId ( account . id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( p . dest Amount Ġ!= Ġnull ) Ġb . put Dest Amount ( p . dest Amount ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġp . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . create Internal () ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . PATTERN _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Pattern ( command Id : ĠLong , Ġp : ĠSync Pattern ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . PATTERN _ TYPE , Ġp . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġget Pattern By Global Id ( p . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pattern ( command Id , Ġp , Ġpattern ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . PATTERN _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Pattern ( command Id : ĠLong , Ġp : ĠSync Pattern , Ġpattern : ĠTransaction Pattern ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġdata Manager . pattern Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Pattern Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Id ( pattern . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( p . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( p . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Source AccountId ( get Account By Global Id ( p . global Source AccountId ) !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Comment ( p . comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Amount ( p . amount ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( p . global CategoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġnull ) Ġb . put CategoryId ( category . id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( p . global Sub categoryId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( subcategory Ġ!= Ġnull ) Ġb . put Sub categoryId ( subcategory . id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account By Global Id ( p . global Dest AccountId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġb . put Dest AccountId ( account . id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( p . dest Amount Ġ!= Ġnull ) Ġb . put Dest Amount ( p . dest Amount ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġp . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb . update Internal () ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . PATTERN _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pattern By Global Id ( global Id : ĠLong ): ĠTransaction Pattern ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . transaction Pattern Dao . query Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( Transaction Pattern Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Pattern ( command Id : ĠLong , Ġp : ĠSync Pattern ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . PATTERN _ TYPE , Ġp . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġget Pattern By Global Id ( p . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( pattern ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( Sync Constants . PATTERN _ TYPE , Ġp . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . PATTERN _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Pattern ( command Id : ĠLong , Ġp : ĠSync Pattern , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġdata Manager . dao Session . transaction Pattern Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pattern ( command Id , Ġp , Ġpattern ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Pattern ( command Id , Ġp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Patterns (): ĠList < Sync Pattern > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . transaction Pattern Dao . query Builder (). where Or ( Transaction Pattern Dao . Properties . Sync ed . eq ( false ), ĠTransaction Pattern Dao . Properties . Global Id . isNull ). list () ĊĠĠĠĠĠĠĠ Ġval Ġpatterns Ġ= ĠArrayList < Sync Pattern >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠSync Pattern () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global Id Ġ= Ġif Ġ( p . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġp . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . local Id Ġ= Ġp . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . name Ġ= Ġp . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . type Ġ= Ġp . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global Source AccountId Ġ= Ġp . source Account . global Id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . comment Ġ= Ġp . comment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . amount Ġ= Ġp . amount ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global CategoryId Ġ= Ġif Ġ( p . categoryId Ġ!= Ġnull ) Ġp . category . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global Sub categoryId Ġ= Ġif Ġ( p . subcategory Id Ġ!= Ġnull ) Ġp . subcategory . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global Dest AccountId Ġ= Ġif Ġ( p . dest AccountId Ġ!= Ġnull ) Ġp . dest Account . global Id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . dest Amount Ġ= Ġp . dest Amount ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġp . tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . tags . add ( tag . tag . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns . add ( pattern ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . PATTERN _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠSync Pattern () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns . add ( pattern ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpatterns ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Patterns (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . transaction Pattern Dao . query Builder (). where Or ( Transaction Pattern Dao . Properties . Sync ed . eq ( false ), ĠTransaction Pattern Dao . Properties . Global Id . isNull ). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . PATTERN _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Budget ( command Id : ĠLong , Ġb : ĠSync Budget ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġdata Manager . budget Service . new Budget Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( b . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put From ( Date ( b . start )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put To ( Date ( b . finish )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Limit ( b . limit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Type ( b . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( b . name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( b . next Global Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġget Budget Plan By Global Id ( b . next Global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Next Id ( next ?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġb . dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Dependency ( d . type , Ġconvert ToLocal Budget Ref Id ( d . type , Ġd . ref Global Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . create Internal () ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . BU D GET _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Budget Plan By Global Id ( global Id : ĠLong ): ĠBudget Plan ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . budget Plan Dao . query Builder (). where ( Budget Plan Dao . Properties . Global Id . eq ( global Id )). list () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( list . isEmpty ()) Ġnull Ġelse Ġlist [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Budget ( command Id : ĠLong , Ġb : ĠSync Budget ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . BU D GET _ TYPE , Ġb . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbudget Plan Ġ= Ġget Budget Plan By Global Id ( b . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( budget Plan Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Budget ( command Id , Ġb , Ġbudget Plan ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . BU D GET _ TYPE , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Budget ( command Id : ĠLong , Ġb : ĠSync Budget , Ġbudget Plan : ĠBudget Plan ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġdata Manager . budget Service . new Budget Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Id ( budget Plan . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Global Id ( b . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Sync ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put From ( Date ( b . start )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put To ( Date ( b . finish )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Limit ( b . limit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Type ( b . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Name ( b . name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġold Next Id Ġ= Ġbudget Plan . next ĊĠĠĠĠĠĠĠ Ġif Ġ( b . next Global Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Next Id ( old Next Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Next Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . budget Service . delete Budget Internal ( old Next Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Budget Ġ= Ġget Budget Plan By Global Id ( b . next Global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Next Id ( next Budget !!. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġb . dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Dependency ( d . type , Ġconvert ToLocal Budget Ref Id ( d . type , Ġd . ref Global Id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . update Internal () ĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . BU D GET _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Budget ( command Id : ĠLong , Ġb : ĠSync Budget ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Deleted Object ( Sync Constants . BU D GET _ TYPE , Ġb . global Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbudget Plan Ġ= Ġget Budget Plan By Global Id ( b . global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( budget Plan Ġ!= Ġnull ) Ġdata Manager . dao Session . delete ( budget Plan ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( Sync Constants . BU D GET _ TYPE , Ġb . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Sync Log ( Sync Constants . BU D GET _ TYPE , Ġcommand Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmerge Budget ( command Id : ĠLong , Ġb : ĠSync Budget , Ġsource Id : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbudget Ġ= Ġdata Manager . dao Session . budget Plan Dao . load ( source Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( budget Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Budget ( command Id , Ġb , Ġbudget ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Budget ( command Id , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Deleted Object ( type : ĠInt , Ġglobal Id : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Manager . dao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( type ), ĠTr ash Dao . Properties . Global Id . eq ( global Id )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dirty Budget s ( changes List : ĠChanges List ): ĠList < Sync Budget > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . budget Plan Dao . query Builder (). where Or ( Budget Plan Dao . Properties . Global Id . isNull , ĠBudget Plan Dao . Properties . Sync ed . eq ( false )). list () ĊĠĠĠĠĠĠĠ Ġprepare Order Creation ( list ) ĊĊĠĠĠĠĠĠĠ Ġval Ġglobal Ids Ġ= ĠArray Map < Long , ĠLong >() ĊĠĠĠĠĠĠĠ Ġval Ġbudget s Ġ= ĠArrayList < Sync Budget >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġif Ġ( b . next Ġ== Ġnull ) Ġnull Ġelse Ġdao Session . budget Plan Dao . load ( b . next ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Global Id : ĠLong ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnull Ġ&& Ġnext . global Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Global Id Ġ= Ġglobal Ids [ next . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Global Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Global Id Ġ= Ġchanges List . next Global Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Ids . put ( next . id , Ġnext Global Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Global Id Ġ= Ġnext ?. global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbudget Ġ= ĠSync Budget () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . global Id Ġ= Ġif Ġ( b . global Id Ġ== Ġnull ) Ġ- 1 Ġelse Ġb . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . local Id Ġ= Ġb . id !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . start Ġ= Ġb . start . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . finish Ġ= Ġb . finish . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . limit Ġ= Ġb . limit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . type Ġ= Ġb . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . next Global Id Ġ= Ġnext Global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġb . dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . dependencies . add ( convertTo Global Dependency ( d )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget s . add ( budget ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrash List Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . BU D GET _ TYPE )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( trash Ġin Ġtrash List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbudget Ġ= ĠSync Budget () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget . global Id Ġ= Ġtrash . global Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget s . add ( budget ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbudget s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . global Id Ġ< Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . prepared Global Id Ġ= Ġglobal Ids [ it . local Id ] Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbudget s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Dirty Budget s (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġdao Session . budget Plan Dao . query Builder (). where Or ( Budget Plan Dao . Properties . Global Id . isNull , ĠBudget Plan Dao . Properties . Sync ed . eq ( false )). count () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 Ġ|| Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Type . eq ( Sync Constants . BU D GET _ TYPE )). count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Out dated Lock ( lock : ĠString , Ġtype : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lock . isNull Or Blank ()) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Manager . dao Session . sync Lock Dao . query Builder (). where ( Sync Lock Dao . Properties . Type . eq ( type ), ĠSync Lock Dao . Properties . Lock Id . eq ( lock )). limit ( 1 ). list () ĊĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġsync Lock Ġ= Ġlist [ 0 ] ĊĠĠĠĠĠĠĠ Ġreturn ĠSystem . currentTimeMillis () Ġ- Ġsync Lock . time Ġ> ĠSync Service . LOCK _ LI VE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Lock ( lock : ĠString , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . sync Lock Dao . query Builder (). where ( Sync Lock Dao . Properties . Type . eq ( type )). limit ( 1 ). list () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Lock Ġ= Ġlist [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Lock . lock Id Ġ= Ġlock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Lock . time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . update ( sync Lock ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Lock Ġ= ĠSync Lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Lock . type Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Lock . lock Id Ġ= Ġlock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Lock . time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . insert ( sync Lock ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Order Creation ( list : ĠMutable List < Budget Plan >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp List Ġ= ĠLinkedList ( list ) ĊĊĠĠĠĠĠĠĠ Ġlist . clear () ĊĠĠĠĠĠĠĠ Ġval Ġit Ġ= Ġtemp List . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( it . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . next Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! temp List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplan Ġ= Ġtemp List . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Budget Plan ( temp List , Ġplan . next !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnext Ġis Ġin Ġtemp Ġand Ġshould Ġbe Ġmoved Ġearlier Ġthan Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp List . add ( plan ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( plan ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Budget Plan ( plans : ĠList < Budget Plan >, Ġid : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplans . any Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert ToLocal Budget Ref Id ( type : ĠInt , Ġglobal Ref Id : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . CATEGORY _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Category By Global Id ( java . lang . Long . parse Long ( global Ref Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcategory !!. id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . SUB CATEGORY _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġget Sub category By Global Id ( java . lang . Long . parse Long ( global Ref Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub category !!. id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . TAG _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . tag Dao . query Builder (). where ( Tag Dao . Properties . Name . eq ( global Ref Id )) Ġ// Ġglobal Ref Id Ġis Ġjust Ġtag Ġname Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. limit ( 1 ). list () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag : ĠTag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= ĠTag () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag . name Ġ= Ġglobal Ref Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag . updated Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . insert ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġlist [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtag . id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unsupported Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠconvertTo Global Dependency ( d : ĠBudget Plan Dependency ): ĠSync Budget . Dependency Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdependency Ġ= ĠSync Budget . Dependency () ĊĠĠĠĠĠĠĠ Ġdependency . type Ġ= Ġd . ref Type ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġwhen Ġ( dependency . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . CATEGORY _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġdao Session . category Dao . load ( java . lang . Long . parse Long ( d . ref Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency . ref Global Id Ġ= Ġcategory . global Id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . SUB CATEGORY _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġdao Session . subcategory Dao . load ( java . lang . Long . parse Long ( d . ref Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency . ref Global Id Ġ= Ġsub category . global Id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Constants . TAG _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġdao Session . tag Dao . load ( java . lang . Long . parse Long ( d . ref Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency . ref Global Id Ġ= Ġtag . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unsupported Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdependency ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Dirty ( item : ĠChange Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġif Ġ( item . action Ġ== ĠSync Constants . CREATE _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Object Ġ= Ġfind Sync Object ( item . object Wrapper . type , Ġitem . object Wrapper . obj . local Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Object . sync ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Object . global Id Ġ= Ġitem . object Wrapper . obj . global Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . update ( sync Object ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . action Ġ== ĠSync Constants . UPDATE _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Object Ġ= Ġfind Sync Object ( item . object Wrapper . type , Ġitem . object Wrapper . obj . local Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Object . sync ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . update ( sync Object ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . action Ġ== ĠSync Constants . DELETE _ ACTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Trash ( item . object Wrapper . type , Ġitem . object Wrapper . obj . global Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Trash ( type : ĠInt , Ġglobal Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdao Session . trash Dao . query Builder (). where ( Trash Dao . Properties . Global Id . eq ( global Id ), ĠTr ash Dao . Properties . Type . eq ( type )). list () ĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao Session . delete ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Sync Object ( type : ĠInt , Ġlocal Id : ĠLong ): ĠIS ync Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdao Session Ġ= Ġdata Manager . dao Session ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠSync Constants . ACCOUNT _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . account Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . CATEGORY _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . category Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . SUB CATEGORY _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . subcategory Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . BU D GET _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . budget Plan Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . DE BT _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . de bt Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . DE BT _ NOTE _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . de bt Note Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . TRANSACTION _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . transaction Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSync Constants . PATTERN _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdao Session . transaction Pattern Dao . load ( local Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Not Ġsupported Ġyet .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ