@ file : Suppress (" Max Line Length ") Ċ package Ġcom . tern ary op . photos he lf . db Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Done Exception Ċ import Ġandroid . database . sqlite . SQLite Statement Ċ import Ġjava . util . Locale Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġd ave Ġon Ġ 0 7 / 0 1 / 1 8 . Ċ Ġ* ĠSearch ing Ġinto Ġtable ĠTag Ġusing Ġfunctions Ġ( lower (), Ġreplace ()) Ġis Ġvery Ġslow Ġso Ġwe Ġuse Ġa Ġvirtual Ġtable Ġwith ĠF TS Ċ Ġ*/ Ċ Ċ @ Suppress (" Too Many Functions ") Ċ class ĠTag Matcher DAO ( db Helper : ĠDB Helper ) Ġ: ĠAbs DAO < Tag >( db Helper ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval ĠtableName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠTABLE _ NAME ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" CREATE ĠV IRTUAL ĠTABLE Ġ% 1 \$ s ĠUSING Ġf ts 4 (% 2 \$ s , Ġ% 3 \$ s )" ĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( String . format ( sql , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMATCH _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTR IP PED _ TAG )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Magic Number ") ĊĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( old Version Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon New Version 3 ( db ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon New Version 3 ( db : ĠSQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ ĠonCreate ( db ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" INSERT ĠINTO Ġ% 1 \$ s Ġ(% 2 \$ s , Ġ% 3 \$ s ) ĠSELECT Ġname , Ġlower ( replace ( replace ( replace ( replace ( name , Ġ'-', Ġ''), Ġ''' ', Ġ''), Ġ' Ġ', Ġ''), Ġ'.', Ġ' ')) ĠFROM Ġtag " ĊĠĠĠĠĠĠĠ Ġ// Ġpopulate Ġthe Ġtable Ġwith Ġexisting Ġvalue Ġinto Ġtable ĠTag ĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( String . format ( sql , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMATCH _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTR IP PED _ TAG )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetContent Values ( pojo : ĠTag ): ĠContent Values Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġfor Ġthis Ġobject ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Matching Tag ( stmt : ĠSQLite Statement , Ġtag : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġstmt . bind String ( 1 , Ġclean Tag ( tag )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstmt . simple Query For String () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSQLite Done Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġzero Ġrows ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Matching Tag ( tag : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġdb Helper . readable Database ĊĠĠĠĠĠĠĠ Ġreturn Ġget Matching Tag ( get Select Tag Matcher Statement ( db ), Ġtag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( stmt : ĠSQLite Statement , Ġtag : ĠString ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġstmt . bind String ( ++ index , Ġtag ) ĊĠĠĠĠĠĠĠ Ġstmt . bind String ( ++ index , Ġclean Tag ( tag )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstmt . execute Insert () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMATCH _ TAG Ġ= Ġ" match _ tag " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTR IP PED _ TAG Ġ= Ġ" stri pped _ tag " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTABLE _ NAME Ġ= Ġ" tag _ matcher " ĊĊĠĠĠĠĠĠĠ Ġfun Ġclean Tag ( tag : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtag . replace (" [- ' Ġ. ] ". to Regex (), Ġ""). toLowerCase ( Locale . US ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Select Tag Matcher Statement ( db : ĠSQLite Database ): ĠSQLite Statement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdb . compile Statement ( String . format (" SELECT Ġ% 2 \$ s ĠFROM Ġ% 1 \$ s ĠWHERE Ġ% 3 \$ s Ġmatch Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMATCH _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTR IP PED _ TAG )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Insert Tag Matcher Statement ( db : ĠSQLite Database ): ĠSQLite Statement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdb . compile Statement ( String . format (" insert Ġinto Ġ% 1 \$ s Ġ(% 2 \$ s , Ġ% 3 \$ s ) Ġvalues Ġ( ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMATCH _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTR IP PED _ TAG )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ