package Ġnet . ad opt openjdk . api . v 3 . data Sources . models Ċ Ċ import Ġcom . fasterxml . jackson . annotation . Json Creator Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġnet . ad opt openjdk . api . v 3 . data Sources . Sort Method Ċ import Ġnet . ad opt openjdk . api . v 3 . data Sources . SortOrder Ċ import Ġnet . ad opt openjdk . api . v 3 . models . Release Ċ import Ġnet . ad opt openjdk . api . v 3 . models . Version Data Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . temporal . Ch rono Unit Ċ /* Ġk tl int - enable Ġno - wildcard - imports Ġ*/ Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Predicate Ċ Ċ class ĠRelease s Ġ{ ĊĊĠĠĠ Ġ@ JsonProperty (" nodes ") ĊĠĠĠ Ġval Ġnodes : ĠMap < String , ĠRelease > ĊĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġval Ġnode List : ĠTree Set < Release > Ġ= ĠTree Set ( VERSION _ THEN _ TIME _ SORT ER ) ĊĠĠĠ Ġprivate Ġval Ġnode List Time Then Version : ĠTree Set < Release > Ġ= ĠTree Set ( TIME _ THEN _ VERSION _ SORT ER ) ĊĊĠĠĠ Ġconstructor ( nodes : ĠList < Release >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . nodes Ġ= Ġnodes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . id Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠ Ġnode List . addAll ( nodes ) ĊĠĠĠĠĠĠĠ Ġnode List Time Then Version . addAll ( nodes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Json Creator ĊĠĠĠ Ġconstructor (@ JsonProperty (" nodes ") Ġnodes : ĠMap < String , ĠRelease >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . nodes Ġ= Ġnodes ĊĠĠĠĠĠĠĠ Ġnode List . addAll ( nodes . values ) ĊĠĠĠĠĠĠĠ Ġnode List Time Then Version . addAll ( nodes . values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġfun Ġget Releases ( filter : ĠPredicate < Release >, Ġsort Order : ĠSort Order , Ġsort Method : ĠSort Method ): ĠSequence < Release > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Releases ( sort Order , Ġsort Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ filter Ġfilter . test ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġfun Ġget Releases ( sort Order : ĠSort Order , Ġsort Method : ĠSort Method ): ĠSequence < Release > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġwhen Ġ( sort Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Method . DATE Ġ-> Ġnode List Time Then Version ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSort Method . DEFAULT Ġ-> Ġnode List ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġif Ġ( sort Order Ġ== ĠSort Order . ASC ) Ġlist . iterator () Ġelse Ġlist . desc ending Iterator () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnodes . as Sequence () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġfun Ġget Releases (): ĠSequence < Release > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Releases ( SortOrder . ASC , ĠSort Method . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġretain ( github Id : ĠList < Github Id >): ĠRelease s Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRelease s ( nodes . filter Keys Ġ{ Ġadopt Id Ġ-> Ġgithub Id . any Ġ{ Ġadopt Id . startsWith ( it . github Id ) Ġ} Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Release Id ( github Id : ĠGithub Id ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ Ġit . key . startsWith ( github Id . github Id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Release Been Updated ( github Id : ĠGithub Id , ĠupdatedAt : ĠZ onedDateTime ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . key . startsWith ( github Id . github Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh rono Unit . SECONDS . between ( it . value . updated _ at , ĠupdatedAt ) Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( new Releases : ĠList < Release >): ĠRelease s Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRelease s ( nodes . plus ( new Releases . map Ġ{ Ġit . id Ġto Ġit Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( id : ĠString ): ĠRelease s Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRelease s ( nodes . minus ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠRelease s ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nodes Ġ!= Ġother . nodes ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠPRE _ SORT ER Ġ= Ġcompare By < Version Data , ĠString ? >( null s Last ()) Ġ{ Ġit . pre Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠC ant Ġuse Ġthe Ġdefault Ġsort Ġas Ġwe Ġwant Ġto Ġignore Ġoptional ĊĠĠĠĠĠĠĠ Ġval ĠVERSION _ COMP AR ATOR Ġ= Ġcompare By < Version Data > Ġ{ Ġit . major Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . minor Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . security Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . patch Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( PRE _ SORT ER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . build Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By Ġ{ Ġit . ad opt _ build _ number Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTIME _ COMP AR ATOR Ġ= Ġcompare By Ġ{ Ġrelease : ĠRelease Ġ-> Ġrelease . timestamp Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠRELEASE _ COMP AR ATOR Ġ= Ġcompare By < Release , ĠVersion Data >( VERSION _ COMP AR ATOR , Ġ{ Ġit . version _ data Ġ}) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠRELEASE _ NAME _ AND _ ID _ COMP AR ATOR Ġ= Ġcompare By Ġ{ Ġrelease : ĠRelease Ġ-> Ġrelease . release _ name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Comp aring Ġ{ Ġrelease : ĠRelease Ġ-> Ġrelease . id Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠVERSION _ THEN _ TIME _ SORT ER : ĠComparator < Release > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRELEASE _ COMP AR ATOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( TIME _ COMP AR ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( RELEASE _ NAME _ AND _ ID _ COMP AR ATOR ) ĊĊĠĠĠĠĠĠĠ Ġval ĠTIME _ THEN _ VERSION _ SORT ER : ĠComparator < Release > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTIME _ COMP AR ATOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( RELEASE _ COMP AR ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( RELEASE _ NAME _ AND _ ID _ COMP AR ATOR ) ĊĠĠĠ Ġ} Ċ } Ċ