package Ġcom . project city build . repositories Ċ Ċ import Ġcom . project city build . core . database . DataSource Ċ import Ġcom . project city build . entities . Serializable Location Ċ import Ġcom . project city build . entities . Warp Ċ import Ġdagger . Re usable Ċ import Ġjavax . inject . Inject Ċ Ċ @ Re usable Ċ class ĠW arp Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠdataSource : ĠDataSource , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġname Cache : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġhas Built Name Cache Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġexists ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst ( name ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfirst ( name : ĠString ): ĠW arp ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠdataSource . database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getFirst Row (" SELECT Ġ* ĠFROM Ġ` war ps ` ĠWHERE Ġ` name ` = Ġ? ĠLIMIT Ġ 1 ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW arp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġrow . get (" name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠSerializable Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld Name Ġ= Ġrow . get (" world _ name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġrow . get (" x "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġrow . get (" y "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġrow . get (" z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpitch Ġ= Ġrow . get (" pitch "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Ġ= Ġrow . get (" yaw "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġrow . get (" created _ at "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnames (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Built Name Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname Cache ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠdataSource . database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Results (" SELECT Ġ` name ` ĠFROM Ġ` war ps ` ĠORDER ĠBY Ġ` name ` ĠASC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrow Ġ-> Ġrow . getString (" name ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġwarp Names Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Cache . addAll ( warp Names ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Cache . sort () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Built Name Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall (): ĠList < Warp > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠdataSource . database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Results (" SELECT Ġ* ĠFROM Ġ` war ps ` ĠORDER ĠBY Ġ` name ` ĠASC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW arp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġrow . get (" name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠSerializable Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld Name Ġ= Ġrow . get (" world _ name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġrow . get (" x "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġrow . get (" y "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġrow . get (" z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpitch Ġ= Ġrow . get (" pitch "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Ġ= Ġrow . get (" yaw "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġrow . get (" created _ at "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Cache . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Cache . addAll ( it . map Ġ{ Ġwarp Ġ-> Ġwarp . name Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Cache . sort () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Built Name Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( warp : ĠW arp ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource . database (). execute Insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġ` war ps ` ĠVALUES Ġ( ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . world Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . x , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . z , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . pitch , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . location . yaw , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarp . createdAt , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġname Cache . clear () ĊĠĠĠĠĠĠĠ Ġhas Built Name Cache Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource . database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. executeUpdate (" DELETE ĠFROM Ġ` war ps ` ĠWHERE Ġ` name ` = Ġ?", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġname Cache . remove ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġname Cache . clear () ĊĠĠĠĠĠĠĠ Ġhas Built Name Cache Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ