package Ġorg . radar base . output . source Ċ Ċ import Ġorg . apache . avro . file . Seek able Input Ċ import Ġorg . radar base . output . accounting . Topic Partition Offset Range Ċ import Ġjava . io . Closeable Ċ import Ġjava . nio . file . Path Ċ import Ġjava . time . Instant Ċ Ċ /** ĠSource Ġstorage Ġtype . Ġ*/ Ċ interface ĠSource Storage Ġ{ ĊĠĠĠ Ġ/** ĠCreate Ġa Ġreader Ġfor Ġthe Ġstorage Ġmedium . ĠIt Ġshould Ġbe Ġclosed Ġby Ġthe Ġcaller . Ġ*/ ĊĠĠĠ Ġfun Ġcreate Reader (): ĠSource Storage Reader ĊĠĠĠ Ġ/** ĠList Ġall Ġfiles Ġin Ġthe Ġgiven Ġdirectory . Ġ*/ ĊĠĠĠ Ġfun Ġlist ( path : ĠPath ): ĠSequence < Simple File Status > ĊĊĠĠĠ Ġ/** ĠDelete Ġgiven Ġfile . ĠWill Ġnot Ġdelete Ġany Ġdirectories . Ġ*/ ĊĠĠĠ Ġfun Ġdelete ( path : ĠPath ) ĊĠĠĠ Ġfun Ġcreate Topic File ( topic : ĠString , Ġstatus : ĠSimple File Status ): ĠTopic File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Modified Ġ= Ġstatus . lastModified Ġ?: ĠInstant . now () ĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= ĠTopic Partition Offset Range . parse Filename ( status . path . fileName . toString (), Ġlast Modified ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTopic File ( topic , Ġstatus . path , Ġlast Modified , Ġrange ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFind Ġrecords Ġand Ġtopics . Ġ*/ ĊĠĠĠ Ġval Ġwalk er : ĠSource Storage Walker ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFile Ġreader Ġfor Ġthe Ġstorage Ġmedium . ĊĠĠĠĠ Ġ* ĠAll Ġinputs Ġopened Ġby Ġthis Ġreader Ġshould Ġbe Ġclosed Ġbefore Ġclosing Ġthe Ġreader Ġitself . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠSource Storage Reader : ĠClose able Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOpen Ġgiven Ġfile Ġpath Ġas Ġa ĠSeek able Input . ĊĠĠĠĠĠĠĠĠ Ġ* ĠFor Ġremote Ġfiles , Ġimplementing Ġthis Ġmay Ġdownload Ġthe Ġfile Ġto Ġa Ġlocal Ġcache Ġbefore ĊĠĠĠĠĠĠĠĠ Ġ* Ġopening Ġthe Ġinput Ġstream . ĠIt Ġshould Ġbe Ġclosed Ġby Ġthe Ġcaller . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Input ( file : ĠTopic File ): ĠSeek able Input ĊĠĠĠ Ġ} Ċ } Ċ