package Ġass imp Ċ Ċ import Ġio . kot est . assertions . fail Ċ import Ġjava . io .* Ċ import Ġjava . net . URI Ċ import Ġjava . net . URL Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . channels . File Channel Ċ import Ġjava . nio . file . Paths Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġelect Ġon Ġ 1 4 / 0 1 / 2 0 1 7 . Ċ Ġ*/ Ċ Ċ val Ġmodels Ġ= Ġ" models " Ċ val Ġmodels Non B sd Ġ= Ġ" models - non bsd " ĊĊ Ċ val Ġass bin Ġ= Ġ"$ models / Ass bin /" Ċ Ċ /** Ċ Ġ* ĠNote , Ġwe Ġneed ĠURI Ġ-> ĠPath Ġto Ġclean Ġany Ġpossible Ġleading Ġslash Ċ Ġ* Ċ Ġ* Ġhttps :// stackoverflow . com / a / 3 1 9 5 7 6 9 6 / 1 0 4 7 7 1 3 Ċ Ġ*/ Ċ fun ĠgetResource ( resource : ĠString ): ĠURL Ġ= ĠClassLoader . getSystem Resource ( resource ) ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠFileNotFoundException ( resource ) ĊĊ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . readFile From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test File ( path : ĠURL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest File ( path . to URI (), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . readFile From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test File ( path : ĠURI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest File ( Paths . get ( path ). to AbsolutePath (). toString (), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . readFile From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test File ( path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" Testing Ġread Ġ$ path :" Ġ} ĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" reading Ġfrom Ġfile :" Ġ} ĊĊĠĠĠ Ġvar Ġscene Ġ= ĠreadFile ( path , Ġflags ) ĊĠĠĠ Ġif Ġ( scene Ġ== Ġnull Ġ&& Ġfail On Null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" Importer . readFile Ġreturned Ġ' null ' Ġfor Ġ$ path ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġscene ?. verify () ĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" reading Ġfrom Ġmemory :" Ġ} ĊĊĠĠĠ Ġval Ġbytes Ġ= ĠFileInputStream ( File ( path )). read Bytes () ĊĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( bytes ) ĊĊĠĠĠ Ġval Ġname Ġ= Ġpath . substring After Last ( File . path Separator Char ). substring Before Last ('.') ĊĠĠĠ Ġval Ġhint Start Ġ= Ġpath . indexOf Last Ġ{ Ġit Ġ== Ġ'.' Ġ} ĊĠĠĠ Ġval Ġhint Ġ= Ġpath . substring ( hint Start Ġ+ Ġ 1 ) ĊĊĠĠĠ Ġval Ġmem Scene Ġ= ĠreadFile From Memory ( buffer , Ġflags , Ġname , Ġhint ) ĊĠĠĠ Ġif Ġ( mem Scene Ġ== Ġnull Ġ&& Ġfail On Null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" Importer . readFile From Memory Ġreturned Ġ' null ' Ġfor Ġ$ path ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġmem Scene ?. verify () ĊĊĠĠĠ Ġif Ġ( scene Ġ== Ġnull ) Ġscene Ġ= Ġmem Scene ĊĊĠĠĠ Ġreturn Ġscene Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test URLs ( var arg Ġpaths : ĠURL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest URLs ( listOf (* paths ), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test URLs ( paths : ĠList < URL >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest UR Is ( paths . map ( URL :: to URI ), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test UR Is ( var arg Ġpaths : ĠURI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest UR Is ( listOf (* paths ), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test UR Is ( paths : ĠList < URI >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest Files ( paths . map Ġ{ ĠPaths . get ( it ). to AbsolutePath (). toString () Ġ}, Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test Files ( var arg Ġpaths : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĠĠĠ Ġreturn Ġtest Files ( listOf (* paths ), Ġflags , Ġfail On Null , Ġverify ) Ċ } Ċ Ċ /** Ċ Ġ* Ġcalls Ġboth Ġ[ Importer . readFile ] Ġand Ġ[ Importer . read Files From Memory ] Ġand Ġverifies Ġit Ġusing Ġ[ verify ]. Ċ Ġ* ĠThis Ġfails Ġif Ġ[ fail On Null ] Ġis Ġset Ġand Ġeither Ġof Ġthe Ġabove Ġreturns Ġnull . Ċ Ġ* Ċ Ġ* ĠThe Ġfirst Ġpath Ġin Ġ[ paths ] Ġwill Ġbe Ġused Ġfor Ġthe Ġbase Ġpath Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ[ Importer . readFile ] Ċ Ġ*/ Ċ fun ĠImport er . test Files ( paths : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags : ĠA i Post Process Steps Flags Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Null : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify : ĠA i Scene . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠA i Scene ? Ġ{ ĊĊĠĠĠ Ġval Ġbase File Ġ= Ġpaths [ 0 ] ĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" Testing Ġread Ġ$ base File :" Ġ} ĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" reading Ġfrom Ġfile :" Ġ} ĊĠĠĠ Ġ// Ġtest ĠreadFile ĊĠĠĠ Ġvar Ġscene Ġ= ĠreadFile ( base File , Ġflags ) ĊĠĠĠ Ġif Ġ( scene Ġ== Ġnull Ġ&& Ġfail On Null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" readFile Ġreturned Ġ' null ' Ġfor Ġ$ base File ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġscene ?. verify () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġlogger . info Ġ{ Ġ" reading Ġfrom Ġmemory :" Ġ} Ċ Ċ // ĉ val Ġfiles Ġ= Ġpaths . map Ġ{ Ġit Ġto ĠByteBuffer . wrap ( FileInputStream ( File ( it )). read Bytes ()) Ġ}. toMap () ĊĠĠĠ Ġval Ġfiles Ġ= Ġpaths . map Ġ{ Ġit Ġto Ġmap File ( it ) Ġ}. toMap () ĊĊĠĠĠ Ġval Ġmem Scene Ġ= Ġread Files From Memory ( base File , Ġfiles , Ġflags ) ĊĠĠĠ Ġif Ġ( mem Scene Ġ== Ġnull Ġ&& Ġfail On Null ) ĊĠĠĠĠĠĠĠ Ġfail (" readFile From Memory Ġreturned Ġ' null ' Ġfor Ġ$ base File ") ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġmem Scene ?. verify () ĊĊĠĠĠ Ġif Ġ( scene Ġ== Ġnull ) Ġscene Ġ= Ġmem Scene ĊĊĠĠĠ Ġreturn Ġscene Ċ } Ċ Ċ fun Ġmap File ( resource : ĠString ): ĠByteBuffer Ġ= ĊĠĠĠĠĠĠĠ ĠRandom Access File ( File ( resource ), Ġ" r "). use Ġ{ Ġram Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġram . channel . use Ġ{ Ġch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch . map ( File Channel . Map Mode . READ _ ONLY , Ġ 0 , Ġch . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}