package Ġv ip . m yst ery 0 . tools . factory Ċ Ċ import Ġorg . xml . sax . Attributes Ċ import Ġorg . xml . sax . helpers . Default Handler Ċ import Ġv ip . m yst ery 0 . tools . context Ċ import Ġv ip . m yst ery 0 . tools . model . MimeType Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjavax . xml . parsers . SAX Parser Factory Ċ Ċ private Ġval Ġfactory Ġby Ġlazy Ġ{ Ċ ĉ MimeType Factory ( context (). assets . open (" t ika - mime types . xml ")) Ċ } Ċ Ċ val ĠFile . mime Type : ĠString ? Ċ ĉ get () Ġ= Ġextension . get MimeType () Ċ Ċ fun ĠString . get MimeType (): ĠString ? Ġ= Ġfactory . extension Map [ this ]?. first OrNull () Ċ fun ĠString . get Mime Types (): ĠList < String > Ġ= Ġfactory . extension Map [ this ] Ġ?: Ġempty List () Ċ Ċ fun ĠString . getExtension From MimeType (): ĠString ? Ġ= Ġfactory . mime TypeMap [ this ]?. first OrNull () Ċ fun ĠString . get Extensions From MimeType (): ĠList < String > Ġ= Ġfactory . mime TypeMap [ this ] Ġ?: Ġempty List () Ċ Ċ class ĠMime Type Factory ( inputStream : ĠInputStream ) Ġ{ Ċ ĉ private Ġval Ġfactory Ġ= ĠSAX Parser Factory . newInstance () Ċ ĉ private Ġval Ġs ax Parser Ġ= Ġfactory . new SAX Parser () Ċ ĉ private Ġval Ġhandler Ġ= ĠHandler () Ċ ĉ val Ġextension Map : ĠHashMap < String , ĠArrayList < String >> Ċĉ ĉ get () Ġ= Ġhandler . extension Map Ċ ĉ val ĠmimeType Map : ĠHashMap < String , ĠArrayList < String >> Ċĉ ĉ get () Ġ= Ġhandler . mime TypeMap ĊĊ ĉ init Ġ{ Ċĉ ĉ sax Parser . parse ( inputStream , Ġhandler ) Ċ ĉ } ĊĊ ĉ internal Ġclass ĠHandler Ġ: ĠDefault Handler () Ġ{ Ċĉ ĉ val Ġextension Map Ġ= ĠHashMap < String , ĠArrayList < String >>() Ċĉ ĉ val ĠmimeType Map Ġ= ĠHashMap < String , ĠArrayList < String >>() Ċĉ ĉ private Ġvar ĠmimeType : ĠMime Type ? Ġ= Ġnull Ċĉ ĉ private Ġvar Ġtemp String : ĠString ? Ġ= Ġnull ĊĊĉ ĉ override Ġfun Ġstart Element ( uri : ĠString ?, Ġlocal Name : ĠString ?, Ġq Name : ĠString , Ġattributes : ĠAttributes ) Ġ{ Ċĉĉ ĉ if Ġ( q Name Ġ== Ġ" mime Type ") Ġ{ Ċĉĉĉ ĉ mime Type Ġ= ĠMime Type () Ċĉĉĉ ĉ mime Type !!. extension Ġ= ĠArrayList () Ċĉĉ ĉ } Ċĉĉ ĉ super . start Element ( uri , Ġlocal Name , Ġq Name , Ġattributes ) Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġend Element ( uri : ĠString ?, Ġlocal Name : ĠString ?, Ġq Name : ĠString ?) Ġ{ Ċĉĉ ĉ when Ġ( q Name ) Ġ{ Ċĉĉĉ ĉ " mime Type " Ġ-> Ġ{ Ċĉĉĉĉ ĉ mime TypeMap [ mime Type !!. value ] Ġ= ĠmimeType !!. extension Ċĉĉĉĉ ĉ mime Type !!. extension . forEach Ġ{ Ċĉĉĉĉĉ ĉ val Ġlist Ġ= Ġextension Map [ it ] Ġ?: ĠArrayList () Ċĉĉĉĉĉ ĉ list . add ( mime Type !!. value ) Ċĉĉĉĉĉ ĉ extension Map [ it ] Ġ= Ġlist Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ mime Type Ġ= Ġnull Ċĉĉĉ ĉ } Ċĉĉĉ ĉ " value " Ġ-> ĠmimeType !!. value Ġ= Ġtemp String !! Ċĉĉĉ ĉ " extension " Ġ-> ĠmimeType !!. extension . add ( temp String !! ) Ċĉĉ ĉ } Ċĉĉ ĉ super . end Element ( uri , Ġlocal Name , Ġq Name ) Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġcharacters ( ch : ĠChar Array , Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ Ċĉĉ ĉ temp String Ġ= ĠString ( ch , Ġstart , Ġlength ) Ċĉĉ ĉ super . characters ( ch , Ġstart , Ġlength ) Ċĉ ĉ } Ċ ĉ } Ċ }