package Ġcom . d ss . sd atabase . dao Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Open Helper Ċ import Ġandroid . util . Log Ċ import Ġcom . d ss . sd atabase . annotations . Base DB FieldName Ċ import Ġcom . d ss . sd atabase . constant . Constant Exception Ċ import Ġcom . d ss . sd atabase . exceptions . Invalid Type Exception Ċ import Ġcom . d ss . sd atabase . model . BD Create Ċ import Ġcom . d ss . sd atabase . model . BD Insert Ċ import Ġjava . util .* Ċ Ċ @ Suppress (" VARIABLE _ WITH _ RED UND ANT _ INITIAL IZER ") Ċ /** Ċ Ġ* ĠCreated Ġby Ġg ust avo . v ie ira Ġon Ġ 0 4 / 0 5 / 2 0 1 5 . Ċ Ġ*/ ĊĊ Ċ class ĠBase DB ( internal Ġvar Ġcontext : ĠContext ?, Ġprivate Ġval Ġdatabase : ĠString Ġ// ĠDatabase ĠName ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġdb Version : ĠInt ) Ġ: ĠSQLite Open Helper ( context , Ġdatabase , Ġnull , Ġdb Version ) Ġ{ ĊĠĠĠ Ġvar Ġversion : ĠInt Ġ= Ġ 0 Ġ// ĠDatabase ĠVersion ĊĠĠĠ Ġvar Ġtable : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append (" DROP ĠTABLE ĠIF ĠEXISTS Ġ") ĊĠĠĠĠĠĠĠ Ġsb . append ( table ) ĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( sb . toString ()) ĊĠĠĠĠĠĠĠ ĠonCreate ( db ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġtable Ġbased Ġon Ġreceived Ġparameters ĊĊĠĠĠĠ Ġ* Ġ@ param Ġdb ĠSql ite ĠDatabase ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠName Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcol uns ĠColl uns Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpk ĠTable ĠPrimary ĠKey ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Table ( db : ĠSQLite Database , Ġtable : ĠString , Ġcol uns : ĠList < BD Create >, Ġpk : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append (" CREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ") ĊĠĠĠĠĠĠĠ Ġsb . append ( table ) ĊĠĠĠĠĠĠĠ Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġsb . append (" (" ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġcol uns . size ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġcol uns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( field . fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( field . fieldType ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pk Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pk Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (", ĠPRIMARY ĠKEY (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( pk ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" )); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( sb . toString ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdrop Table ( db : ĠSQLite Database , Ġtable : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdb . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ" Ġ+ Ġtable ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReceive Ġvalues Ġfrom Ġanother Ġclass Ġand Ġinsert Ġon Ġa Ġtable . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠName Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinsert Object ĠGeneric ĠObject Ġwith Ġthe Ġvalues Ġwill Ġbe Ġput Ġin Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Invalid Type Exception :: class ) ĊĠĠĠ Ġfun Ġinsert ( table : ĠString , Ġinsert Object : ĠAny ): ĠLong Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġinsert Object . java Class . getDeclared Fields () ĊĊĠĠĠĠĠĠĠ Ġval Ġinserts Ġ= ĠArrayList < BD Insert >() ĊĠĠĠĠĠĠĠ Ġvar Ġbd Insert : ĠBD Insert ĊĠĠĠĠĠĠĠ Ġvar Ġo : ĠAny ĊĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġf . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f [ i ]. is Annotation Present ( Base DB FieldName :: class . java )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf [ i ]. setAccessible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbd Insert Ġ= ĠBD Insert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo Ġ= Ġf [ i ]. get ( insert Object ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbd Insert . fieldName Ġ= Ġf [ i ]. getAnnotation ( Base DB FieldName :: class . java ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbd Insert . field Ġ= Ġf [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbd Insert . field Value Ġ= Ġo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinserts . add ( bd Insert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( insert Ġin Ġinserts ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Verify Ġif Ġvariable Ġis Ġnumeric ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( insert . field ?. type Ġ== ĠInt :: class . java Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . field ?. type Ġ== ĠLong :: class . java Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . field ?. type Ġ== ĠDouble :: class . java Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert . field ?. type Ġ== ĠInt :: class . java Primitive Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( insert . fieldName , ĠInteger . valueOf ( insert . field Value . toString ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Verify Ġif Ġvariable Ġis Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( insert . field ?. type Ġ== ĠString :: class . java Ġ|| Ġinsert . field ?. type Ġ== ĠChar :: class . java Primitive Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( insert . fieldName , Ġinsert . field Value . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Verify Ġif Ġvariable Ġis Ġboolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( insert . field ?. type !!. canonical Name Ġ== ĠBoolean :: class . java ObjectType . canonical Name ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( insert . fieldName , Ġjava . lang . Boolean . valueOf ( insert . field Value . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Type Exception ( Constant Exception . invalid type exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġwritable Database . replace ( table , Ġnull , Ġvalues ) ĊĠĠĠĠĠĠĠ ĠLog . d ( table , Ġrow . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġrow ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReceive Ġtable Ġand Ġcol uns Ġto Ġreturn Ġa Ġgeneric Ġselect Ġon Ġthe Ġtable ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠName Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcoll uns ĠColl uns Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( table : ĠString , Ġcoll uns : ĠArrayList < String >): ĠCursor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcoll um names Ġ= ĠarrayOf Null s < String >( coll uns . size ) ĊĠĠĠĠĠĠĠ Ġcoll um names Ġ= Ġcoll uns . to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġwritable Database . query ( table , Ġcoll um names , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReceive Ġtable , Ġcol uns , Ġand Ġone Ġor Ġmore Ġarguments Ġand Ġrun Ġa Ġfiltered Ġselect Ġon Ġtable . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġtable ĠName Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcoll uns ĠColl uns Ġof Ġthe Ġtable ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfields ĠName Ġof Ġthe Ġfields Ġwho Ġwill Ġbe Ġthe Ġfilter ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġargs ĠValues Ġof Ġthe Ġfilter ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Where ( table : ĠString , Ġcoll uns : ĠArrayList < String >, Ġfields : ĠArrayList < String >, Ġargs : ĠArray < String >): ĠCursor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcoll um names Ġ= Ġcoll uns . to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" = Ġ?, ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠS fields Ġ= Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠS fields . substring ( 0 , ĠS fields . length Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġwritable Database . query ( table , Ġcoll um names , Ġquery , Ġargs , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠDelete Fields Table ( table : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġwritable Database . delete ( table , Ġnull , Ġnull ) Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠDelete Fields Table Where ( table : ĠString , Ġfield : ĠString , Ġargs : ĠArray < String >): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġwritable Database . delete ( table , Ġfield , Ġargs ) Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Raw Query ( query : ĠString , Ġargs : ĠArray < String >): ĠCursor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġwritable Database . raw Query ( query , Ġargs ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSQLite Database ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġdrop Database ( context : ĠContext , Ġdatabase : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . delete Database ( database ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }