package Ġcom . cz b ix . v 2 ex . model Ċ Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġcom . cz b ix . v 2 ex . common . exception . Fatal Exception Ċ import Ġcom . cz b ix . v 2 ex . network . Request Helper Ċ import Ġcom . cz b ix . v 2 ex . ui . widget . Ex Array Adapter Ċ import Ġcom . google . common . base . Objects Ċ import Ġcom . google . common . base . Preconditions Ċ import Ġcom . google . common . base . Strings Ċ import Ġcom . google . common . cache . Cache Ċ import Ġcom . google . common . cache . Cache Builder Ċ import Ġjava . text . Coll ator Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠNode Ġ: ĠPage , ĠComparable < Node >, ĠEx Array Adapter . Filter able , ĠF av able Ġ{ ĊĠĠĠ Ġval Ġid : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Title : ĠString ? ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġtitle Alternative : ĠString ? ĊĠĠĠ Ġval Ġtopics : ĠInt ĊĠĠĠ Ġval Ġavatar : ĠAvatar ? ĊĠĠĠ Ġprivate Ġval Ġm Has Info : ĠBoolean ĊĊĠĠĠ Ġconstructor ( title : ĠString ?, Ġid : ĠInt , Ġavatar : ĠAvatar ?, Ġname : ĠString , Ġalternative : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtopics : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . check Argument (! Strings . isNull OrEmpty ( name )) ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġid ĊĊĠĠĠĠĠĠĠ Ġm Title Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġthis . avatar Ġ= Ġavatar ĊĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġtitle Alternative Ġ= Ġalternative ĊĠĠĠĠĠĠĠ Ġthis . topics Ġ= Ġtopics ĊĊĠĠĠĠĠĠĠ Ġm Has Info Ġ= Ġ! Strings . isNull OrEmpty ( title ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Info (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Has Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠNode ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠObjects . equal ( id , Ġother . id ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjects . equal ( topics , Ġother . topics ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjects . equal ( name , Ġother . name ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjects . equal ( title Alternative , Ġother . title Alternative ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjects . equal ( avatar , Ġother . avatar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObjects . hashCode ( id , Ġname , Ġtitle Alternative , Ġtopics , Ġavatar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUrl (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Url ByName ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Strings . isNull OrEmpty ( query )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( name . contains ( query ) Ġ|| Ġ( m Title Ġ!= Ġnull Ġ&& Ġm Title . contains ( query ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( title Alternative Ġ!= Ġnull Ġ&& Ġtitle Alternative . contains ( query )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠNode ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCOL L ATOR . compare ( title , Ġother . title ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Fav Url ( token : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% s / favorite / node /% d ? once =% s ", ĠRequest Helper . BASE _ URL , Ġid , Ġtoken ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Un Fav Url ( token : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% s / un favorite / node /% d ? once =% s ", ĠRequest Helper . BASE _ URL , Ġid , Ġtoken ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Node ( id =$ id , Ġname ='$ name ')" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Id : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Title : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Avatar : ĠAvatar ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Name : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Title Alternative : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Topics : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetId ( id : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetTitle ( title : ĠString ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Avatar ( avatar : ĠAvatar ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Avatar Ġ= Ġavatar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetName ( name : ĠString ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetTitle Alternative ( title Alternative : ĠString ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Title Alternative Ġ= Ġtitle Alternative ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Topics ( topics : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Topics Ġ= Ġtopics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Node (): ĠNode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠcheckNotNull ( m Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Title Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode ( null , Ġm Id , Ġm Avatar , Ġname , Ġm Title Alternative , Ġm Topics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCACHE [ name , Ġ{ ĠNode ( m Title , Ġm Id , Ġm Avatar , Ġname , Ġm Title Alternative , Ġm Topics ) Ġ}] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠF atal Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠCACHE : ĠCache < String , ĠNode > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCACHE Ġ= ĠCache Builder . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. soft Values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initial Capacity ( 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. maximum Size ( 1 2 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build < String , ĠNode >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( this . id ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( this . m Title ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( this . name ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( this . title Alternative ) ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( this . topics ) ĊĠĠĠĠĠĠĠ Ġdest . write Parcelable ( this . avatar , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġdest . write Byte ( if Ġ( m Has Info ) Ġ 1 . to Byte () Ġelse Ġ 0 . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconstructor (` in `: ĠParcel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠ Ġthis . m Title Ġ= Ġ` in `. readString () ĊĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġ` in `. readString () !! ĊĠĠĠĠĠĠĠ Ġthis . title Alternative Ġ= Ġ` in `. readString () ĊĠĠĠĠĠĠĠ Ġthis . topics Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠ Ġthis . avatar Ġ= Ġ` in `. read Parcelable < Avatar >( Avatar :: class . java . class Loader ) ĊĠĠĠĠĠĠĠ Ġthis . m Has Info Ġ= Ġ` in `. read Byte (). toInt () Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP ATTERN Ġ= ĠPattern . compile ("/ go / (. + ? )( ?: \\ W |$ )") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOL L ATOR Ġ= ĠCol lator . getInstance ( Locale . CH INA ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Url ByName ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRequest Helper . BASE _ URL Ġ+ Ġ"/ go /" Ġ+ Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetName From Url ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠP ATTERN . matcher ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreconditions . check State ( matcher . find (), Ġ" match Ġname Ġfor Ġnode Ġfailed : Ġ" Ġ+ Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Node > Ġ= Ġobject Ġ: ĠParcel able . Creator < Node > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠNode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Node ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ