package Ġcom . b ns an tos . offline . di Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . support . v 4 . util . Array Map Ċ Ċ import Ġcom . b ns an tos . offline . di . component . ViewModels Component Ċ import Ġcom . b ns an tos . offline . view model . Comments ViewModel Ċ import Ġcom . b ns an tos . offline . view model . Create Comment ViewModel Ċ import Ġcom . b ns an tos . offline . view model . User ViewModel Ċ import Ġjava . util . concurrent . Callable Ċ Ċ class ĠViewModel Factory Ġ( view Models Component : ĠView Models Component ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcre ators Ġ= ĠArray Map < Class <* >, ĠCallable < out ĠViewModel >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcre ators . put ( Comments ViewModel :: class . java , ĠCallable Ġ{ Ġview Models Component . comment ViewModel () Ġ}) ĊĠĠĠĠĠĠĠ Ġcre ators . put ( User ViewModel :: class . java , ĠCallable Ġ{ Ġview Models Component . user ViewModel () Ġ}) ĊĠĠĠĠĠĠĠ Ġcre ators . put ( Create Comment ViewModel :: class . java , ĠCallable Ġ{ Ġview Models Component . create Comment ViewModel () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >? ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcreator : ĠCallable < out ĠViewModel >? Ġ= Ġcre ators [ model Class ] ĊĠĠĠĠĠĠĠ Ġif Ġ( creator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġcre ators ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( model Class Ġ!= Ġnull Ġ&& Ġmodel Class . isAssignableFrom ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreator Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( creator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" unknown Ġmodel Ġclass Ġ" Ġ+ Ġmodel Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreator . call () Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ