package Ġcom . simple mobile tools . calendar . helpers Ċ Ċ import Ġcom . simple mobile tools . calendar . activities . Simple Activity Ċ import Ġcom . simple mobile tools . calendar . extensions . db Helper Ċ import Ġcom . simple mobile tools . calendar . extensions . is X Monthly Re petition Ċ import Ġcom . simple mobile tools . calendar . extensions . is X Week ly Re petition Ċ import Ġcom . simple mobile tools . calendar . extensions . write Ln Ċ import Ġcom . simple mobile tools . calendar . helpers . I cs Exporter . Export Result .* Ċ import Ġcom . simple mobile tools . calendar . models . Event Ċ import Ġcom . simple mobile tools . commons . extensions . getFile OutputStream Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . File Ċ Ċ class ĠI cs Exporter Ġ{ ĊĠĠĠ Ġenum Ġclass ĠExport Result Ġ{ ĊĠĠĠĠĠĠĠ ĠEX PORT _ FAIL , ĠEX PORT _ OK , ĠEX PORT _ PAR TIAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġevents Exported Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġevents Failed Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġexport Events ( activity : ĠSimple Activity , Ġfile : ĠFile , Ġevents : ĠArrayList < Event >, Ġcallback : Ġ( result : ĠExport Result ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . getFile OutputStream ( file ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . buffered Writer (). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( BEGIN _ CAL END AR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( event Ġin Ġevents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( BEGIN _ EVENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . title . replace ("\ n ", Ġ"\\ n "). let Ġ{ Ġif Ġ( it . isNotEmpty ()) Ġout . write Ln ("$ SUM MARY :$ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . description . replace ("\ n ", Ġ"\\ n "). let Ġ{ Ġif Ġ( it . isNotEmpty ()) Ġout . write Ln ("$ DESCRIPTION $ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . import Id ?. let Ġ{ Ġif Ġ( it . isNotEmpty ()) Ġout . write Ln ("$ UID $ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . eventType . let Ġ{ Ġout . write Ln ("$ CATEG ORIES ${ activity . db Helper . get EventType ( it )?. title }") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . is All Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ DT START ;$ VALUE =$ DATE :${ Formatter . get Day Code From TS ( event . start TS )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ DT END ;$ VALUE =$ DATE :${ Formatter . get Day Code From TS ( event . end TS Ġ+ ĠDAY )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . start TS . let Ġ{ Ġout . write Ln ("$ DT START :${ Formatter . get Exported Time ( it )} ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . end TS . let Ġ{ Ġout . write Ln ("$ DT END :${ Formatter . get Exported Time ( it )} ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ STATUS $ CON FI R MED ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Repeat Interval ( event , Ġout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Rem inders ( event , Ġout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ignored Occ urrences ( event , Ġout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Exported ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( END _ EVENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( END _ CAL END AR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( if Ġ( events Exported Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX PORT _ FAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( events Failed Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX PORT _ PAR TIAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX PORT _ OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Repeat Interval ( event : ĠEvent , Ġout : ĠBuffered Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepeat Interval Ġ= Ġevent . repeat Interval ĊĠĠĠĠĠĠĠ Ġif Ġ( repeat Interval Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġfreq Ġ= Ġget Freq ( repeat Interval ) ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġget Interval ( repeat Interval ) ĊĠĠĠĠĠĠĠ Ġval Ġrepeat Limit Ġ= Ġget Repeat Limit String ( event ) ĊĠĠĠĠĠĠĠ Ġval Ġby Day Ġ= ĠgetBy Day ( event ) ĊĠĠĠĠĠĠĠ Ġval Ġr rule Ġ= Ġ"$ RR ULE $ FREQ =$ freq ;$ INTERVAL =$ interval $ repeat Limit $ by Day " ĊĠĠĠĠĠĠĠ Ġout . write Ln ( rr ule ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Freq ( interval : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( interval Ġ% ĠYEAR Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYEAR LY ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( interval Ġ% ĠMON TH Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMON TH LY ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( interval Ġ% ĠW EEK Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW EEK LY ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDA IL Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Interval ( interval : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( interval Ġ% ĠYEAR Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ/ ĠYEAR ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( interval Ġ% ĠMON TH Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ/ ĠMON TH ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( interval Ġ% ĠW EEK Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ/ ĠW EEK ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ/ ĠDAY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Repeat Limit String ( event : ĠEvent ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( event . repeat Limit Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( event . repeat Limit Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"; $ COUNT =${ - event . repeat Limit }" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"; $ UNT IL =${ Formatter . get Day Code From TS ( event . repeat Limit )}" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetBy Day ( event : ĠEvent ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( event . repeat Interval . is X Week ly Re petition ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĠgetBy Day String ( event . repeat Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"; $ BY DAY =$ days " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . repeat Interval . is X Monthly Re petition ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . repeat Rule Ġ== ĠRE PEAT _ MONTH _ LAST _ DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"; $ BY MONTH DAY =- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . repeat Rule Ġ== ĠRE PEAT _ MONTH _ E VERY _ X TH _ DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠFormatter . get DateTime From TS ( event . start TS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday OfMonth Ġ= Ġstart . day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġ( day OfMonth Ġ- Ġ 1 ) Ġ/ Ġ 7 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġget Day Letters ( start . day OfWeek ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"; $ BY DAY =$ order $ day " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetBy Day String ( rule : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠMON DAY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ MO ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠT UES DAY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ TU ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠW ED N ES DAY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ WE ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠTH UR SD AY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ TH ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠFR ID AY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ FR ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠS ATUR DAY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ SA ," ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Ġand ĠS UND AY Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"$ SU ," ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . trim End (',') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Day Letters ( day OfWeek : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( day OfWeek ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠMO ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠT U ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠWE ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠTH ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> ĠFR ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> ĠSA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSU ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Rem inders ( event : ĠEvent , Ġout : ĠBuffered Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Reminder ( event . reminder 1 Minutes , Ġout ) ĊĠĠĠĠĠĠĠ Ġcheck Reminder ( event . reminder 2 Minutes , Ġout ) ĊĠĠĠĠĠĠĠ Ġcheck Reminder ( event . reminder 3 Minutes , Ġout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Reminder ( minutes : ĠInt , Ġout : ĠBuffered Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( minutes Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( BEGIN _ ALARM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ ACTION $ DISPLAY ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ TRIGGER ${ get Reminder String ( minutes )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ( END _ ALARM ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Reminder String ( minutes : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdays Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġhours Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġremainder Ġ= Ġminutes ĊĠĠĠĠĠĠĠ Ġif Ġ( remainder Ġ>= ĠDAY _ MIN UTES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= ĠMath . floor ((( remainder Ġ/ ĠDAY _ MIN UTES ). toDouble ())). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremainder Ġ-= Ġdays Ġ* ĠDAY _ MIN UTES ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( remainder Ġ>= Ġ 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ= ĠMath . floor ((( remainder Ġ/ Ġ 6 0 ). toDouble ())). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremainder Ġ-= Ġhours Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"- P ${ days } DT ${ hours } H ${ remainder } M 0 S " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Ignored Occ urrences ( event : ĠEvent , Ġout : ĠBuffered Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . ignore Event Occ urrences . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Ln ("$ EX DATE :$ it }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ