package Ġfi . ri ista . common . group H unting Ċ Ċ import Ġco . touch lab . state ly . concurrency . Atomic Reference Ċ import Ġco . touch lab . state ly . concurrency . value Ċ import Ġfi . ri ista . common . group H unting . model . H unting Group Ċ import Ġfi . ri ista . common . model . H unting Year Ċ import Ġfi . ri ista . common . model . Species Code Ċ import Ġfi . ri ista . common . util . first And Only Ċ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠH unting Group Filter Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġh unting Groups : ĠList < H unting Group >, Ċ ) Ġ{ ĊĠĠĠ Ġval Ġselect able H unting Years : ĠList < H unting Year > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġknow Ġwe Ġdon 't Ġwant Ġto Ġhave Ġduplicates Ġso Ġmap Ġto Ġmutable Set Ġand Ġconvert Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġlist Ġafterwards . ĠWe Ġcould Ġalso Ġuse ĠList . distinct () Ġbut Ġthat Ġdoes Ġthe Ġsame Ġthing ĊĠĠĠĠĠĠĠ Ġ// Ġunder Ġthe Ġh ood ĊĠĠĠĠĠĠĠ Ġh unting Groups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( mutable Set Of ()) Ġ{ Ġit . h unting Year Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġ_ selected H unting Year Ġ= ĠAtomic Reference < H unting Year ? >( null ) ĊĠĠĠ Ġvar Ġselected H unting Year : ĠH unting Year ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selected H unting Year . value ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh unting Year Ġ= Ġ_ selected H unting Year . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected H unting Year . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h unting Year Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selectable Species () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ selectable Species Ġ= ĠAtomic Reference < List < Species Code >>( emptyList ()) ĊĠĠĠ Ġvar Ġselect able Species : ĠList < Species Code > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selectable Species . value ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selectable Species . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Species Ġ= ĠAtomic Reference < Species Code ? >( null ) ĊĠĠĠ Ġvar Ġselected Species : ĠSpec ies Code ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selected Species . value ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected Species . value Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalways Ġupdate Ġselect able Ġh unting Ġgroups . ĠIt Ġis Ġpossible Ġthat Ġseason ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwas Ġchanged Ġwhich Ġcaused Ġautomatic Ġselection Ġof Ġ_ same _ Ġspecies . ĠThe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgroups Ġwould Ġbe Ġdifferent Ġthough , Ġso Ġthey Ġshould Ġbe Ġupdated Ġalways . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selectable H unting Groups () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ selectable H unting Groups Ġ= ĠAtomic Reference < List < H unting Group >>( emptyList ()) ĊĠĠĠ Ġvar Ġselect able H unting Groups : ĠList < H unting Group > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selectable H unting Groups . value ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selectable H unting Groups . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected H unting Group Ġ= ĠAtomic Reference < H unting Group ? >( null ) ĊĠĠĠ Ġvar Ġselected H unting Group : ĠH unting Group ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selected H unting Group . value ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected H unting Group . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Select H unting Year () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Select H unting Year () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected H unting Year Ġ= Ġselect able H unting Years . first And Only () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Selectable Species () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect able Species Ġ= Ġh unting Groups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit 's Ġok Ġthat Ġselected H unting Year Ġcan Ġbe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . h unting Year Ġ== Ġselected H unting Year ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( mutable Set Of ()) Ġ{ Ġit . species Code Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĊĠĠĠĠĠĠĠ Ġtry Select Species () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Select Species () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Species Ġ= Ġselect able Species . first And Only () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Selectable H unting Groups () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect able H unting Groups Ġ= Ġh unting Groups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit 's Ġok Ġthat Ġselected H unting Year Ġand Ġselected Species Ġcan Ġbe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . h unting Year Ġ== Ġselected H unting Year Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . species Code Ġ== Ġselected Species ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . id Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Select Group () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Select Group () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected H unting Group Ġ= Ġselect able H unting Groups . first And Only () ĊĠĠĠ Ġ} Ċ }