/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 1 8 ĠJul ien ĠGu er inet Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . gu er inet . my mart let . model Ċ Ċ import Ġandroidx . room . Entity Ċ import Ġandroidx . room . PrimaryKey Ċ import Ġcom . gu er inet . suit case . date . extensions . get Medium DateString Ċ import Ġcom . gu er inet . suit case . date . extensions . get Short Time String Ċ import Ġcom . gu er inet . suit case . util . Utils Ċ import Ġorg . th reet en . bp . DayOfWeek Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . Local Time Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠA Ġcourse Ġin Ġthe Ġuser 's Ġschedule Ġor Ġone Ġthat Ġa Ġuser Ġcan Ġregister Ġfor Ċ Ġ* Ġ@ author ĠJul ien ĠGu er inet Ċ Ġ* Ġ@ author ĠQu ang ĠDao Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ* Ċ Ġ* Ġ@ property Ġterm ĠTerm Ġthis Ġclass Ġis Ġfor Ċ Ġ* Ġ@ property Ġsubject ĠCourse 's Ġ 4 - letter Ġsubject Ġ( ex : ĠM ATH ) Ċ Ġ* Ġ@ property Ġnumber ĠCourse 's Ġnumber Ġ( ex : Ġ 2 6 3 ) Ċ Ġ* Ġ@ property Ġtitle ĠCourse Ġtitle Ċ Ġ* Ġ@ property Ġcr n ĠCourse ĠCR N Ġnumber Ċ Ġ* Ġ@ property Ġsection ĠCourse Ġsection Ġ( ex : Ġ 0 0 1 ) Ċ Ġ* Ġ@ property ĠstartTime ĠCourse 's Ġstart Ġtime Ċ Ġ* Ġ@ property ĠendTime ĠCourse 's Ġend Ġtime Ċ Ġ* Ġ@ property Ġdays ĠDays Ġthis Ġcourse Ġis Ġon Ċ Ġ* Ġ@ property Ġtype ĠCourse Ġtype Ġ( ex : Ġlect ure , Ġtutorial ...) Ċ Ġ* Ġ@ property Ġlocation ĠCourse Ġlocation Ġ( gener ally Ġbuilding Ġand Ġroom Ġnumber ) Ċ Ġ* Ġ@ property Ġin structor ĠCourse 's Ġin structor 's Ġname Ċ Ġ* Ġ@ property Ġcredits ĠNumber Ġof Ġcredits Ġfor Ġthis Ġcourse Ċ Ġ* Ġ@ property ĠstartDate ĠCourse Ġstart Ġdate Ċ Ġ* Ġ@ property ĠendDate ĠCourse Ġend Ġdate Ċ Ġ* Ġ@ property Ġid ĠUnique ĠId Ġfor Ġthis Ġcourse Ċ Ġ*/ Ċ @ Entity Ċ open Ġclass ĠCourse ( ĊĠĠĠ Ġvar Ġterm : ĠTerm , ĊĠĠĠ Ġval Ġsubject : ĠString , ĊĠĠĠ Ġval Ġnumber : ĠString , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġcr n : ĠInt , ĊĠĠĠ Ġval Ġsection : ĠString , ĊĠĠĠ Ġval ĠstartTime : ĠLocal Time , ĊĠĠĠ Ġval ĠendTime : ĠLocal Time , ĊĠĠĠ Ġval Ġdays : ĠList < DayOfWeek >, ĊĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠ Ġval Ġlocation : ĠString , ĊĠĠĠ Ġval Ġin structor : ĠString , ĊĠĠĠ Ġval Ġcredits : ĠDouble , ĊĠĠĠ Ġval ĠstartDate : ĠLocalDate , ĊĠĠĠ Ġval ĠendDate : ĠLocalDate , ĊĠĠĠ Ġ@ PrimaryKey Ġvar Ġid : ĠString Ġ= ĠUtils . uuid () Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĠCourse Ġcode Ġ*/ ĊĠĠĠ Ġval Ġcode : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ subject Ġ$ number " ĊĊĠĠĠ Ġ/** ĠStart Ġtime Ġof Ġthe Ġcourse , Ġrounded Ġoff Ġto Ġthe Ġnearest Ġhalf Ġhour Ġ*/ ĊĠĠĠ Ġval Ġrounded StartTime : ĠLocal Time ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġstart Ġtime Ġis Ġalready Ġa Ġhalf Ġhour Ġincrement ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠIf Ġnot , Ġremove Ġ 5 Ġminutes Ġto Ġthe Ġstart Ġtime Ġto Ġget Ġround Ġnumbers ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġ( Mc G ill Ġstart Ġtimes Ġare Ġalways Ġ 5 Ġminutes Ġafter Ġthe Ġnearest Ġhalf Ġhour ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( startTime . minute Ġ== Ġ 0 Ġ|| ĠstartTime . minute Ġ== Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠstartTime . minus Minutes ( 5 ) ĊĊĠĠĠ Ġ/** ĠEnd Ġtime Ġof Ġthe Ġcourse , Ġrounded Ġoff Ġthe Ġthe Ġnearest Ġhalf Ġhour Ġ*/ ĊĠĠĠ Ġval Ġrounded EndTime : ĠLocal Time ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġend Ġtime Ġis Ġalready Ġa Ġhalf Ġhour Ġincrement ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġnot , Ġadd Ġ 5 Ġminutes Ġto Ġthe Ġend Ġtime Ġto Ġget Ġround Ġnumbers ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġ( Mc G ill Ġend Ġtimes Ġare Ġalways Ġ 5 Ġminutes Ġbefore Ġthe Ġnearest Ġhalf Ġhour ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( endTime . minute Ġ== Ġ 0 Ġ|| ĠendTime . minute Ġ== Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠendTime . plus Minutes ( 5 ) ĊĊĠĠĠ Ġ/** ĠCourse Ġtimes Ġin ĠString Ġformat Ġ*/ ĊĠĠĠ Ġval Ġtime String : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( startTime . hour Ġ== Ġ 0 Ġ&& ĠstartTime . minute Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" No Ġtime Ġassociated Ġwhen Ġgetting ĠString ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ startTime . get Short Time String ()} Ġ- Ġ${ endTime . get Short Time String () }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCourse Ġdates Ġin ĠString Ġformat Ġ*/ ĊĠĠĠ Ġval Ġdate String : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ startDate . get Medium DateString ()} Ġ- Ġ${ endDate . get Medium DateString () }" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthe Ġcourse Ġis Ġfor Ġthe Ġ[ date ], Ġfalse Ġotherwise ĊĠĠĠĠ Ġ* Ġ ĠIf Ġthe Ġdate Ġis Ġwithin Ġthe Ġdate Ġrange Ġand Ġthat Ġthe Ġcourse Ġis Ġoffered Ġon Ġthat Ġday ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis For Date ( date : ĠLocalDate ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ! date . is Before ( startDate ) Ġ&& Ġ! date . is After ( endDate ) Ġ&& Ġdays . contains ( date . day OfWeek ) Ċ } Ċ