/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 2 1 ĠJ ann ik ĠB amber ger Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġde . jb amber ger . fh g app . ui . v plan Ċ Ċ import Ġde . jb amber ger . fh g app . repository . data . V Plan Ċ import Ġde . jb amber ger . fh g app . repository . data . V Plan Row Ċ import Ġde . jb amber ger . fh g app . Settings Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠJ ann ik ĠB amber ger Ġ( dev . jb amber ger @ gmail . com ) Ċ Ġ*/ Ċ Ċ object ĠV Plan Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠP ATTERN _ START Ġ= Ġ"( .* " ĊĠĠĠ Ġprivate Ġconst Ġval ĠP ATTERN _ END Ġ= Ġ" .* )" ĊĠĠĠ Ġprivate Ġval ĠG RA DE _ P ATTER NS Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġ"( .* 5 \\ D *[ a A ]. *) ", Ġ"( .* 5 \\ D *[ b B ]. *) ", Ġ"( .* 5 \\ D *[ c C ]. *) ", Ġ"( .* 5 \\ D *[ d D ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 5 \\ D *[ e E ]. *) ", Ġ"( .* 6 \\ D *[ a A ]. *) ", Ġ"( .* 6 \\ D *[ b B ]. *) ", Ġ"( .* 6 \\ D *[ c C ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 6 \\ D *[ d D ]. *) ", Ġ"( .* 6 \\ D *[ e E ]. *) ", Ġ"( .* 7 \\ D *[ a A ]. *) ", Ġ"( .* 7 \\ D *[ b B ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 7 \\ D *[ c C ]. *) ", Ġ"( .* 7 \\ D *[ d D ]. *) ", Ġ"( .* 7 \\ D *[ e E ]. *) ", Ġ"( .* 8 \\ D *[ a A ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 8 \\ D *[ b B ]. *) ", Ġ"( .* 8 \\ D *[ c C ]. *) ", Ġ"( .* 8 \\ D *[ d D ]. *) ", Ġ"( .* 8 \\ D *[ e E ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 9 \\ D *[ a A ]. *) ", Ġ"( .* 9 \\ D *[ b B ]. *) ", Ġ"( .* 9 \\ D *[ c C ]. *) ", Ġ"( .* 9 \\ D *[ d D ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 9 \\ D *[ e E ]. *) ", Ġ"( .* 1 0 \\ D *[ a A ]. *) ", Ġ"( .* 1 0 \\ D *[ b B ]. *) ", Ġ"( .* 1 0 \\ D *[ c C ]. *) ", ĊĠĠĠĠĠĠĠ Ġ"( .* 1 0 \\ D *[ d D ]. *) ", Ġ"( .* 1 0 \\ D *[ e E ]. *) ", Ġ"( .* [ k K ]. * 1 .* )", Ġ"( .* [ k K ]. * 2 .* )" ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval ĠIS _ CO URSE _ PATTERN Ġ= Ġ"( .* [ k K ]. * 2 .* )| (.* [ k K ]. * 1 .* ) ". to Regex () ĊĊĠĠĠ Ġfun Ġfilter ( plan : ĠV Plan , Ġmatcher : Ġ( V Plan Row ) Ġ-> ĠBoolean ): ĠList < V Plan ListItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġmutable ListOf < V Plan ListItem >() ĊĠĠĠĠĠĠĠ Ġout . add ( V Plan ListItem . Header ( plan . day 1 . header )) ĊĠĠĠĠĠĠĠ Ġout . addAll ( plan . day 1 . v Plan Rows . filter ( matcher ). map Ġ{ ĠV Plan ListItem . Row ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġout . add ( V Plan ListItem . Header ( plan . day 2 . header )) ĊĠĠĠĠĠĠĠ Ġout . addAll ( plan . day 2 . v Plan Rows . filter ( matcher ). map Ġ{ ĠV Plan ListItem . Row ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġout . add ( V Plan ListItem . Footer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget V Plan Matcher ( settings : ĠSettings . V Plan Settings ): Ġ( V Plan Row ) Ġ-> ĠBoolean Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings . show All Ġ|| Ġsettings . grade s . isEmpty () Ġ-> Ġ{ Ġ_ Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . courses . isEmpty () Ġ-> Ġget Grade Matcher ( settings . grade s ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Grade Matcher ( settings . grade s )( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġget Course Matcher ( settings . courses )( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Grade Matcher ( grade s : ĠSet < String >): Ġ( V Plan Row ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġgr ades ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġgrade Ġ-> ĠG RA DE _ P ATTER NS . filter Ġ{ Ġgrade . matches ( it . to Regex ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("| ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Regex () ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġit . grade . matches ( pattern ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Course Matcher ( courses : ĠSet < String >): Ġ( V Plan Row ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġcourses . join ToString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator Ġ= Ġ"$ PATTERN _ END |$ PATTERN _ START ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= ĠP ATTERN _ START , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpostfix Ġ= ĠP ATTERN _ END ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcourse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse . lowercase ( Locale . ROOT ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠ Ġ}. to Regex ( Regex Option . IGNORE _ CASE ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġit . grade . matches ( IS _ CO URSE _ PATTERN ) Ġ&& Ġit . subject . matches ( pattern ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ