package Ġservices . dao Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġjavafx . stage . FileChooser Ċ import Ġservices . dao . exceptions . No File Ch osen Exception Ċ import Ġservices . utils . Resources Ċ import Ġt orn ad of x . Controller Ċ import Ġjava . io . File Ċ import Ġjava . io . PrintWriter Ċ Ċ class ĠJson DAO < T > Ġ: ĠDAO < T >, ĠController () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠNF CE _ MESSAGE _ IMPORT Ġ= Ġ" Please , Ġchoose Ġthe Ġfile Ġwhich Ġyou Ġwant Ġto Ġimport " ĊĠĠĠ Ġprivate Ġval ĠNF CE _ MESSAGE _ SAVE Ġ= Ġ" Please , Ġchoose Ġthe Ġfile Ġwhich Ġyou Ġwant Ġto Ġsave " ĊĊĠĠĠ Ġprivate Ġval Ġfile Chooser : ĠFile Chooser Ġ= ĠFile Chooser (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Select Ġfile " ĊĠĠĠĠĠĠĠ Ġinitial Directory Ġ= ĠFile ( System . getProperty (" user . home ")) ĊĠĠĠĠĠĠĠ Ġextension Filters . add ( FileChooser . Extension Filter (" JSON ", Ġ"*. json ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġsave Item ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile To Save Ġ= Ġfile Chooser . show Save Dialog ( null ) Ġ?: Ġthrow ĠNo File Ch osen Exception ( NF CE _ MESSAGE _ SAVE ) ĊĠĠĠĠĠĠĠ ĠPrintWriter ( file To Save ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( toJson ( t )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll ( clazz : ĠClass < T >, Ġmode : ĠMode ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles : ĠMutable List < T > Ġ= Ġarray ListOf () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . RESOURCE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( res Ġin ĠResources . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . add ( getItem ( clazz , ĠMode . RESOURCE , Ġres . source )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfiles . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ( clazz : ĠClass < T >, Ġmode : ĠMode , Ġsource : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile Chooser . show Open Dialog ( null ) Ġ?: Ġthrow ĠNo File Ch osen Exception ( NF CE _ MESSAGE _ IMPORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Json ( file . read Text (), Ġclazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . RESOURCE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġresources . json ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Json ( file . toString (), Ġclazz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠtoJson ( t : ĠT ): ĠString Ġ= ĠGson (). toJson ( t ) ĊĊĠĠĠ Ġprivate Ġfun Ġparse Json ( content : ĠString , Ġclazz : ĠClass < T >): ĠT Ġ= ĠGson (). fromJson ( content , Ġclazz ) Ċ }