package Ġde . phil . sh iny collection . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġde . phil . sh iny collection . R Ċ import Ġde . phil . sh iny collection . Sh iny Pokemon Application Ċ import Ġde . phil . sh iny collection . database . Pokemon Dao Ċ import Ġde . phil . sh iny collection . database . Pokemon Database Ċ import Ġde . phil . sh iny collection . model . Pokemon Data Ċ Ċ class ĠAdd New Pokemon ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpokemon Dao : ĠPokemon Dao Ġ= ĊĠĠĠĠĠĠĠ ĠPokemon Database . instance ( application . application Context ). pokemon Dao () ĊĊĠĠĠ Ġfun Ġpokemon Name Exists ( name : ĠString ) Ġ= Ġname Ġin Ġget Pokemon Names () ĊĊĠĠĠ Ġprivate Ġfun Ġget Pokemon Names () Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Pokemon Names () ĊĊĠĠĠ Ġfun Ġget Pokemon Names Forms Inclusive () Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Pokemon Names Forms Inclusive () ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Input ( pokemon Data : ĠPokemon Data ): ĠPair < String ?, ĠPokemon Data ?> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġget Application < Application >(). application Context ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pokemon Name Empty ( pokemon Data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( context . resources . getString ( R . string . error _ empty _ name ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! pokemon Name Exists ( pokemon Data . name ) Ġ&& Ġpokemon Name Has No Extension ( pokemon Data . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ("${ pokemon Data . name } Ġ" Ġ+ Ġcontext . resources . getString ( R . string . error _ is _ not _ a _ pokemon ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( pokemon Data . en counter Needed Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( context . resources . getString ( R . string . error _ en counter _ lower _ zero ), Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpokemon Data . name ĊĠĠĠĠĠĠĠ Ġval Ġgeneration Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Generation ByName ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġpoke dex Id Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Po ke dex Id ByName ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġinternal Id Ġ= Ġpokemon Dao . getMax Internal Id () Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġvalidated Data Ġ= ĠPokemon Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoke dex Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneration , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . en counter Needed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . h unt Method , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . pokemon Edition , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . tab Index ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvalidated Data . internal Id Ġ= Ġinternal Id ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( null , Ġvalidated Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpokemon Name Has No Extension ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname . endsWith ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh iny Pokemon Application . AL OLA _ EXTENSION ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith ( Sh iny Pokemon Application . G AL AR _ EXTENSION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpokemon Name Empty ( pokemon Data : ĠPokemon Data ) Ġ= Ġpokemon Data . name . isEmpty () Ġ|| Ġpokemon Data . name . isBlank () ĊĊĠĠĠ Ġfun Ġget Po ke dex Id ByName ( name : ĠString ) Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Po ke dex Id ByName ( name ) ĊĊĠĠĠ Ġfun Ġget Generation ByName ( name : ĠString ) Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Generation ByName ( name ) ĊĊĠĠĠ Ġfun Ġadd Pokemon To Database ( pokemon Data : ĠPokemon Data ): ĠPair < Boolean , ĠString > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġ( message , Ġdata ) Ġ= Ġvalidate Input ( pokemon Data ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( message Ġ== Ġnull Ġ&& Ġdata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . internal Id Ġ= Ġpokemon Dao . getMax Internal Id () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . generation Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Generation ByName ( pokemon Data . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Data . poke dex Id Ġ= ĠPokemon Database . android Pokemon Resources ( getApplication ()). get Po ke dex Id ByName ( pokemon Data . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon Dao . add Pokemon ( pokemon Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġ"${ pokemon Data . name } Ġ" Ġ+ Ġget Application < Application >(). application Context . resources . getString ( R . string . message _ has _ been _ added )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( false , Ġmessage !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }