package Ġnet . au stral mc . econom y . data . sources Ċ Ċ import Ġnet . au stral mc . core . config . mapper . Config Mapper Ċ import Ġnet . au stral mc . core . config . mapper . Config Mapper . map ToObject Ċ import Ġnet . au stral mc . econom y . A ustr al E co . Companion . log Ċ import Ġnet . au stral mc . econom y . annotation . SQL Table Ċ import Ġnet . au stral mc . econom y . domain . E conom ic Profile Ċ import Ġorg . bukkit . configuration . Configuration Section Ċ import Ġorg . bukkit . configuration . file . File Configuration Ċ import Ġorg . bukkit . configuration . file . Yaml Configuration Ċ import Ġorg . bukkit . plugin . java . Java Plugin Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Bi Consumer Ċ import Ġjava . util . function . Consumer Ċ import Ġjava . util . stream . Collectors . toList Ċ import Ġjava . util . stream . Stream Ċ Ċ private Ġconst Ġval ĠFILE _ NAME Ġ= Ġ" data . yml " Ċ Ċ class ĠFlat file DataSource ( plugin : ĠJava Plugin ) Ġ: ĠDataSource < UUID , ĠEconom ic Profile >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" Flat file " ĊĠĠĠ Ġprivate Ġval Ġfile Configuration : ĠFile Configuration ĊĠĠĠ Ġprivate Ġval Ġdata File : ĠFile ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Folder Ġ= Ġplugin . data Folder ĊĠĠĠĠĠĠĠ Ġif Ġ(! data Folder . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Folder . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata File Ġ= ĠFile ( data Folder , ĠFILE _ NAME ) ĊĠĠĠĠĠĠĠ Ġfile Configuration Ġ= ĠYaml Configuration . load Configuration ( data File ) ĊĊĠĠĠĠĠĠĠ Ġsave File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ( key : ĠUUID , Ġcallback : ĠBi Consumer < UUID , ĠEconom ic Profile ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsection Ġ= Ġget Profile Section ( key . toString ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġprofile : ĠEconom ic Profile ? Ġ= Ġmap ToObject ( section , ĠEconom ic Profile :: class . java ) ĊĠĠĠĠĠĠĠ Ġprofile ?. owner UUID Ġ= Ġkey ĊĊĠĠĠĠĠĠĠ Ġcallback . accept ( key , Ġprofile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll ( callback : ĠConsumer < List < E conom ic Profile >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback . accept ( findAll Stream (). collect ( toList ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll By ( criteria : ĠString , Ġasc Order : ĠBoolean , Ġcallback : ĠConsumer < List < E conom ic Profile >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback . accept ( sorted Stream ( criteria , Ġasc Order ). collect ( toList ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind First By ( ĊĠĠĠĠĠĠĠ Ġlimit : ĠLong , ĊĠĠĠĠĠĠĠ Ġcriteria : ĠString , ĊĠĠĠĠĠĠĠ Ġasc Order : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcallback : ĠConsumer < List < E conom ic Profile >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprofiles Ġ= Ġsorted Stream ( criteria , Ġasc Order ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. limit ( limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( toList ()) ĊĠĠĠĠĠĠĠ Ġcallback . accept ( profiles ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( key : ĠUUID , Ġvalue : ĠEconom ic Profile , Ġcallback : ĠBi Consumer < UUID , ĠEconom ic Profile > ?) Ġ= ĊĠĠĠĠĠĠĠ Ġsave ( key , Ġvalue , Ġcallback ) Ġ// ĠNo Ġneed Ġto Ġcreate Ġspecial Ġtreatment Ġfor Ġinsert Ġor Ġsave Ġin Ġflat file ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( key : ĠUUID , Ġvalue : ĠEconom ic Profile , Ġcallback : ĠBi Consumer < UUID , ĠEconom ic Profile > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsection Ġ= Ġget OrCreate Profile Section ( key . toString ()) ĊĊĠĠĠĠĠĠĠ ĠConfig Mapper . map To Section ( section , Ġvalue ) ĊĊĠĠĠĠĠĠĠ Ġsave File () ĊĊĠĠĠĠĠĠĠ Ġcallback ?. accept ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( key : ĠUUID , Ġcallback : ĠConsumer < UUID > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuuid String Ġ= Ġkey . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( file Configuration . contains ( uuid String )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Configuration [ uuid String ] Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsave File () ĊĠĠĠĠĠĠĠ Ġcallback ?. accept ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Disable () Ġ= Ġsave File () ĊĊĠĠĠ Ġprivate Ġfun ĠfindAll Stream (): ĠStream < E conom ic Profile > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile Configuration . get Keys ( false ). stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey : ĠString Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeconom ic Profile Ġ= Ġmap ToObject ( get Profile Section ( key ), ĠEconom ic Profile :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeconom ic Profile ?. owner UUID Ġ= ĠUUID . fromString ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġeconom ic Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsorted Stream ( criteria : ĠString ?, Ġasc Order : ĠBoolean ): ĠStream < E conom ic Profile > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomparator Ġ= Ġget Criteria Comparator By TableName ( criteria ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll Stream (). sorted ( if ( asc Order ) Ġcomparator . reversed () Ġelse Ġcomparator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget OrCreate Profile Section ( uuid String : ĠString ): ĠConfiguration Section Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Profile Section ( uuid String ) Ġ?: Ġfile Configuration . create Section ( uuid String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Profile Section ( uuid String : ĠString ): ĠConfiguration Section ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile Configuration . getConfiguration Section ( uuid String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave File () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Configuration . save ( data File ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . se vere (" Error Ġsaving Ġ$ FILE _ NAME Ġfile !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Criteria Comparator By TableName ( criteria : ĠString ?): ĠComparator < E conom ic Profile > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcriteria Comparator : ĠComparator < E conom ic Profile >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcriteria Method Ġ= ĠEconom ic Profile :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fields . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ filter Ġif ( it . is Annotation Present ( SQL Table :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( SQL Table :: class . java ). name Ġ== Ġcriteria ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. first OrNull () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Comparator Ġ= ĠComparator . comp aring Double Ġ{ Ġprofile : ĠEconom ic Profile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ comp aring Double Ġcriteria Method ?. getDouble ( profile ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ comp aring Double Ġprofile . balance !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcriteria Comparator Ġ?: ĠComparator . comp aring Double Ġ{ Ġit . balance !! Ġ} ĊĠĠĠ Ġ} Ċ }