// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . plugins . github . pull request . comment . ui . model Ċ Ċ import Ġcom . intellij . ui . Collection ListModel Ċ import Ġcom . intellij . util . EventDispatcher Ċ import Ġorg . jetbrains . plugins . github . api . data . Github PullRequest Comment With Html Ċ import Ġorg . jetbrains . plugins . github . pull request . data . model . Github PullRequest File Comments Thread Mapping Ċ import Ġorg . jetbrains . plugins . github . pull request . ui . Simple EventListener Ċ import Ġkotlin . properties . Deleg ates . observable Ċ Ċ class ĠGithub PullRequest File Comments Thread ( comments : ĠList < Github PullRequest File Comment >) ĊĠ Ġ: ĠCollection ListModel < Github PullRequest File Comment >( comments ) Ġ{ ĊĊĠ Ġprivate Ġval Ġcollapse State EventDispatcher Ġ= ĠEvent Dispatcher . create ( Simple EventListener :: class . java ) ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġif Ġ( comments . isEmpty ()) Ġthrow ĠIllegalArgumentException (" Thread Ġcannot Ġbe Ġempty ") ĊĠ Ġ} ĊĊĠ Ġval Ġfirst Comment Id Ġ= Ġitems . first (). id ĊĠ Ġval Ġfirst Comment Created Ġ= Ġitems . first (). date Created ĊĊĠ Ġvar Ġfold Ġby Ġobservable ( true ) Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠ Ġcollapse State EventDispatcher . mult ic aster . event Occurred () ĊĠ Ġ} ĊĊĠ Ġ// ĠNew Ġcomments Ġcan Ġonly Ġappear Ġat Ġthe Ġend Ġof Ġthe Ġlist Ġand Ġcannot Ġchange Ġorder ĊĠ Ġfun Ġupdate ( comments : ĠList < Github PullRequest Comment With Html >) Ġ{ ĊĠĠĠ Ġvar Ġremoved Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġitems . size ) Ġ{ ĊĠĠĠĠĠ Ġval Ġidx Ġ= Ġi Ġ- Ġremoved ĊĠĠĠĠĠ Ġval Ġnew Comment Ġ= Ġcomments . get OrNull ( idx ) ĊĠĠĠĠĠ Ġif Ġ( new Comment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Range ( idx , Ġitems . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġcomment Ġ= Ġitems . get OrNull ( idx ) Ġ?: Ġbreak ĊĠĠĠĠĠ Ġif Ġ( comment . id Ġ== Ġnew Comment . id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( comment . update ( new Comment )) ĊĠĠĠĠĠĠĠĠĠ Ġfire Contents Changed ( this , Ġidx , Ġidx ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( idx ) ĊĠĠĠĠĠĠĠ Ġremoved ++ ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( size Ġ== Ġcomments . size ) Ġreturn ĊĠĠĠ Ġval Ġnew Comments Ġ= Ġcomments . sub List ( size , Ġcomments . size ) ĊĠĠĠ Ġadd ( new Comments . map Ġ{ ĠGithub PullRequest File Comment . convert ( it ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Fold State ChangeListener ( listener : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġcollapse State EventDispatcher . addListener ( object Ġ: ĠSimple EventListener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġevent Occurred () Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( other Ġ! is ĠGithub PullRequest File Comments Thread ) Ġreturn Ġfalse ĊĊĠĠĠ Ġif Ġ( first Comment Id Ġ!= Ġother . first Comment Id ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġfirst Comment Id . hashCode () ĊĠ Ġ} ĊĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġconvert ( mapping : ĠGithub PullRequest File Comments Thread Mapping ): ĠGithub PullRequest File Comments Thread Ġ= ĊĠĠĠĠĠ ĠGithub PullRequest File Comments Thread ( mapping . comments . map ( Github PullRequest File Comment . Companion :: convert )) ĊĠ Ġ} Ċ }