/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . datal ore . mapper . core Ċ Ċ import Ġjet brains . datal ore . base . observable . collections . Collection Adapter Ċ import Ġjet brains . datal ore . base . observable . collections . Collection Item Event Ċ import Ġjet brains . datal ore . base . observable . collections . list . Observable List Ċ import Ġjet brains . datal ore . base . registration . Registration Ċ Ċ internal Ġclass ĠObservableCollection Role Synchron izer < Source T , ĠTarget T >( ĊĠĠĠĠĠĠĠ Ġmapper : ĠMapper < *, Ġ* >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmy Source : ĠObservable List < out ĠSource T >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmy Target : ĠMutable List < in ĠTarget T >, ĊĠĠĠĠĠĠĠ Ġfactory : ĠMapper Factory < Source T , ĠTarget T >, ĊĠĠĠĠĠĠĠ Ġerror Mapper Factory : ĠMapper Factory < Source T , ĠTarget T > ?) Ġ: ĊĠĠĠĠĠĠĠ ĠBase Collection Role Synchron izer < Source T , ĠTarget T >( mapper ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmy Collection Registration : ĠRegistration ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġadd Mapper Factory ( factory ) ĊĠĠĠĠĠĠĠ Ġif Ġ( error Mapper Factory Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Error Mapper Factory ( error Mapper Factory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! my Target . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Target ĠCollection ĠShould ĠBe ĠEmpty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Collection Registration Ġ= ĠRegistration . EMPTY ĊĊĠĠĠĠĠĠĠ ĠMapper Updater (). update ( my Source ) ĊĠĠĠĠĠĠĠ Ġval Ġmod ifiable Map pers Ġ= Ġmod ifiable Map pers ĊĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġmod ifiable Map pers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Target . add ( m . target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Collection Registration Ġ= Ġmy Source . addListener ( object Ġ: ĠCollection Adapter < Source T >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Added ( event : ĠCollection Item Event < out ĠSource T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= Ġcreate Mapper ( event . new Item !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod ifiable Map pers . add ( event . index , Ġmapper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Target . add ( event . index , Ġmapper . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Mapper ( mapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Removed ( event : ĠCollection Item Event < out ĠSource T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmod ifiable Map pers . remove At ( event . index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Target . remove At ( event . index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġmy Collection Registration !!. remove () ĊĠĠĠĠĠĠĠ Ġmy Target . clear () ĊĠĠĠ Ġ} Ċ }