/* Ċ Ġ* ĠR RR RR R ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj jj Ċ Ġ* ĠRR ĠĠ ĠRR ĠĠ Ġe ee ĠĠĠ Ġe ee ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġpp Ċ Ġ* ĠR RR RR R Ġ Ġee ĠĠ Ġe Ġee ĠĠ Ġe Ġ__ ___ ĠĠĠ Ġj jj Ġp pp Ġ Ġpp Ċ Ġ* ĠRR Ġ ĠRR Ġ Ġe eeee Ġ Ġe eeee ĠĠĠĠĠĠĠĠĠĠ Ġj jj Ġp pp pp p Ċ Ġ* ĠRR ĠĠ ĠRR Ġ Ġe eeee Ġ Ġe eeee ĠĠĠĠĠĠĠĠĠ Ġj jj Ġpp Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj jj j Ġ Ġpp Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠRe e - jp . Ġ ĠAll ĠRights ĠReserved . Ċ Ġ*/ Ċ Ċ package Ġnet . ree _ jp . storage . sqlite Ċ Ċ import Ġcn . n uk kit . item . Item Ċ import Ġcn . n uk kit . item . ench ant ment . Enchant ment Ċ import Ġcom . google . gson . Gson Ċ import Ġorg . sqlite . SQLite Exception Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . sql . PreparedStatement Ċ Ċ class ĠSql ite Helper ( path : ĠString ) Ġ: ĠIS ql ite Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconnection : ĠConnection ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass . forName (" org . sqlite . JDBC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= ĠDriver Manager . getConnection (" jdbc : sqlite :$ path / Stack Storage . db ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Exists ( x uid : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstmt Ġ= Ġconnection . prepareStatement (" SELECT ĠCOUNT (*) ĠFROM Ġsqlite _ master ĠWHERE Ġtype Ġ= Ġ' table ' ĠAND Ġname Ġ= Ġ? ") ĊĠĠĠĠĠĠĠ Ġstmt . setString ( 1 , Ġx uid ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstmt . executeQuery (). getInt ( 1 ) Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ( x uid : ĠString , Ġitem : ĠItem ): ĠItem Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Exists ( x uid )) Ġthrow ĠException (" storage Ġnot Ġfound ") ĊĊĠĠĠĠĠĠĠ Ġval Ġstmt Ġ= Ġconnection . prepareStatement (" SELECT Ġcount ĠFROM Ġ'$ x uid ' ĠWHERE Ġid Ġ= Ġ? ĠAND Ġmeta Ġ= ? ĠAND Ġen chant Ġ= Ġ? ") ĊĠĠĠĠĠĠĠ Ġstmt . setInt ( 1 , Ġitem . id ) ĊĠĠĠĠĠĠĠ Ġstmt . setInt ( 2 , Ġitem . damage ) ĊĠĠĠĠĠĠĠ Ġstmt . setString ( 3 , Ġdecode Enchant ( item )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġstmt . executeQuery () ĊĠĠĠĠĠĠĠ Ġval Ġresult Item Ġ= Ġitem . clone () ĊĠĠĠĠĠĠĠ Ġif Ġ( result . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Item . set Count ( result . getInt (" count ")) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Item . set Count ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Item ( x uid : ĠString , Ġitem : ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Exists ( x uid )) Ġset Table ( x uid ) ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . id ĊĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġitem . damage ĊĠĠĠĠĠĠĠ Ġval Ġen chant Ġ= Ġdecode Enchant ( item ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġitem . count ĊĊĠĠĠĠĠĠĠ Ġval Ġstmt : ĠPreparedStatement ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstmt Ġ= Ġconnection . prepareStatement (" REPLACE ĠINTO Ġ'$ x uid ' ĠVALUES Ġ( ?, Ġ?, Ġ?, Ġ? )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstmt . setInt ( 4 , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstmt Ġ= Ġconnection . prepareStatement (" DELETE ĠFROM Ġ'$ x uid ' ĠWHERE Ġid Ġ= Ġ? ĠAND Ġmeta Ġ= Ġ? ĠAND Ġen chant Ġ= Ġ? ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstmt . setInt ( 1 , Ġid ) ĊĠĠĠĠĠĠĠ Ġstmt . setInt ( 2 , Ġmeta ) ĊĠĠĠĠĠĠĠ Ġstmt . setString ( 3 , Ġen chant ) ĊĠĠĠĠĠĠĠ Ġstmt . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Storage ( x uid : ĠString ): ĠList < Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Exists ( x uid )) Ġset Table ( x uid ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconnection . createStatement (). executeQuery (" SELECT Ġ* ĠFROM Ġ'$ x uid '") ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Item >() ĊĠĠĠĠĠĠĠ Ġwhile Ġ( result . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠItem . get ( result . getInt (" id "), Ġresult . getInt (" meta "), Ġresult . getInt (" count ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( encode Enchant ( item , Ġresult . getString (" ench ant "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Storage ( x uid : ĠString , Ġstorage : ĠList < Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Exists ( x uid )) Ġconnection . createStatement (). execute (" DELETE ĠFROM Ġ'$ x uid '") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġstorage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Item ( x uid , Ġitem ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencode Enchant ( item : ĠItem , Ġjson : ĠString ): ĠItem Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġen ch ants Ġ= ĠGson (). fromJson < Map < Int , ĠInt >>( json , ĠMap :: class . java ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġen ch ants . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġen ch ants [ key ] Ġ?: Ġthrow Ġ ĠException (" ench ant Ġnot Ġfound ( id :$ key )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . add Enchant ment ( Enchant ment . get ( key ). setLevel ( level )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode Enchant ( item : ĠItem ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġen ch ants Ġ= Ġmutable Map Of < Int , ĠInt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( ench ant Ġin Ġitem . ench ant ments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen ch ants [ ench ant . id ] Ġ= Ġen chant . level ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠGson (). toJson ( ench ants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Table ( x uid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . createStatement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute (" CREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ'$ x uid ' Ġ( id ĠINTEGER ĠNOT ĠNULL Ġ, meta ĠINTEGER ĠNOT ĠNULL Ġ, ench ant ĠTEXT ĠNOT ĠNULL Ġ, count ĠINTEGER ĠNOT ĠNULL Ġ, PRIMARY ĠKEY Ġ( id , meta , ench ant )) ") ĊĠĠĠ Ġ} Ċ }