package Ġcom . github . vh rom ada . catalog . web . controller Ċ Ċ import Ġcom . github . vh rom ada . catalog . web . connector . Genre Connector Ċ import Ġcom . github . vh rom ada . catalog . web . fo . Genre FO Ċ import Ġcom . github . vh rom ada . catalog . web . mapper . Genre Mapper Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . ui . Model Ċ import Ġorg . springframework . validation . Errors Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . Model Attribute Ċ import Ġorg . springframework . web . bind . annotation . PathVariable Ċ import Ġorg . springframework . web . bind . annotation . PostMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġjavax . validation . Valid Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġrepresents Ġcontroller Ġfor Ġgen res . Ċ Ġ* Ċ Ġ* Ġ@ author ĠV lad im ir ĠH rom ada Ċ Ġ*/ Ċ @ Controller (" genre Controller ") Ċ @ RequestMapping ("/ genres ") Ċ class ĠGen re Controller ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConnector Ġfor Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġconnector : ĠGen re Connector , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMapper Ġfor Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠGen re Mapper Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġnew Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ new ") ĊĠĠĠ Ġfun Ġprocess New (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . new Data () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġpage Ġwith Ġlist Ġof Ġgen res . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġmodel ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("", Ġ"/ list ") ĊĠĠĠ Ġfun Ġshow List ( model : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgen res Ġ= Ġconnector . getAll () ĊĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" genres ", Ġgen res ) ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" title ", Ġ" Gen res ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" genre / index " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġpage Ġfor Ġadding Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġmodel ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġpage Ġfor Ġadding Ġgenre ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ add ") ĊĠĠĠ Ġfun Ġshow Add ( model : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Form View ( model Ġ= Ġmodel , Ġgenre Ġ= ĠGen re FO ( uuid Ġ= Ġnull , Ġname Ġ= Ġnull ), Ġtitle Ġ= Ġ" Add Ġgenre ", Ġaction Ġ= Ġ" add ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġadding Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġ Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġgenre Ġ ĠFO Ġfor Ġgenre ĊĠĠĠĠ Ġ* Ġ@ param Ġerrors Ġerrors ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res Ġ( no Ġerrors ) Ġor Ġview Ġfor Ġpage Ġfor Ġadding Ġgenre Ġ( errors ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif ĠUUID Ġisn 't Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ add "], Ġparams Ġ= Ġ[" create "]) ĊĠĠĠ Ġfun Ġprocess Add ( model : ĠModel , Ġ@ Model Attribute (" genre ") Ġ@ Valid Ġgenre : ĠGen re FO , Ġerrors : ĠErrors ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( genre . uuid Ġ== Ġnull ) Ġ{ Ġ" UUID Ġmust Ġbe Ġnull ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( errors . has Errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Form View ( model Ġ= Ġmodel , Ġgenre Ġ= Ġgenre , Ġtitle Ġ= Ġ" Add Ġgenre ", Ġaction Ġ= Ġ" add ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconnector . add ( request Ġ= Ġmapper . map Request ( source Ġ= Ġgenre )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġadding Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ add "], Ġparams Ġ= Ġ[" cancel "]) ĊĠĠĠ Ġfun Ġcancel Add (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġpage Ġfor Ġediting Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġuuid Ġ ĠUUID Ġof Ġediting Ġgenre ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġpage Ġfor Ġediting Ġgenre ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ edit /{ uuid }") ĊĠĠĠ Ġfun Ġshow Edit ( model : ĠModel , Ġ@ PathVariable (" uuid ") Ġuuid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenre Ġ= Ġconnector . get ( uuid Ġ= Ġuuid ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Form View ( model Ġ= Ġmodel , Ġgenre Ġ= Ġmapper . map ( source Ġ= Ġgenre ), Ġtitle Ġ= Ġ" Edit Ġgenre ", Ġaction Ġ= Ġ" edit ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġediting Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġ Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġgenre Ġ ĠFO Ġfor Ġgenre ĊĠĠĠĠ Ġ* Ġ@ param Ġerrors Ġerrors ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res Ġ( no Ġerrors ) Ġor Ġview Ġfor Ġpage Ġfor Ġediting Ġgenre Ġ( errors ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif ĠUUID Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ edit "], Ġparams Ġ= Ġ[" update "]) ĊĠĠĠ Ġfun Ġprocess Edit ( model : ĠModel , Ġ@ Model Attribute (" genre ") Ġ@ Valid Ġgenre : ĠGen re FO , Ġerrors : ĠErrors ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( genre . uuid Ġ!= Ġnull ) Ġ{ Ġ" UUID Ġmust n 't Ġbe Ġnull ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( errors . has Errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Form View ( model Ġ= Ġmodel , Ġgenre Ġ= Ġgenre , Ġtitle Ġ= Ġ" Edit Ġgenre ", Ġaction Ġ= Ġ" edit ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconnector . update ( uuid Ġ= Ġgenre . uuid , Ġrequest Ġ= Ġmapper . map Request ( source Ġ= Ġgenre )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġediting Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ edit "], Ġparams Ġ= Ġ[" cancel "]) ĊĠĠĠ Ġfun Ġcancel Edit (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġd uplic ating Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuuid ĠUUID Ġof Ġd uplic ating Ġgenre ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ duplicate /{ uuid }") ĊĠĠĠ Ġfun Ġprocess Duplicate (@ PathVariable (" uuid ") Ġuuid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . duplicate ( uuid Ġ= Ġuuid ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġremoving Ġgenre . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuuid ĠUUID Ġof Ġremoving Ġgenre ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ remove /{ uuid }") ĊĠĠĠ Ġfun Ġprocess Remove (@ PathVariable (" uuid ") Ġuuid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . remove ( uuid Ġ= Ġuuid ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġmoving Ġgenre Ġup . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuuid ĠUUID Ġof Ġmoving Ġgenre ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ move Up /{ uuid }") ĊĠĠĠ Ġfun Ġprocess Move Up (@ PathVariable (" uuid ") Ġuuid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . move Up ( uuid Ġ= Ġuuid ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġmoving Ġgenre Ġdown . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuuid ĠUUID Ġof Ġmoving Ġgenre ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ move Down /{ uuid }") ĊĠĠĠ Ġfun Ġprocess Move Down (@ PathVariable (" uuid ") Ġuuid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . move Down ( uuid Ġ= Ġuuid ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġupdating Ġpositions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġfor Ġredirect Ġto Ġpage Ġwith Ġlist Ġof Ġgen res ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ update ") ĊĠĠĠ Ġfun Ġprocess Update Positions (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġconnector . update Positions () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLIST _ RE DIRECT _ URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġpage 's Ġview Ġwith Ġform . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Ġ Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġgenre Ġ ĠFO Ġfor Ġgenre ĊĠĠĠĠ Ġ* Ġ@ param Ġtitle Ġ Ġpage 's Ġtitle ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġaction ĊĠĠĠĠ Ġ* Ġ@ return Ġpage 's Ġview Ġwith Ġform ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Form View ( model : ĠModel , Ġgenre : ĠGen re FO , Ġtitle : ĠString , Ġaction : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" genre ", Ġgenre ) ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" title ", Ġtitle ) ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" action ", Ġaction ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" genre / form " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRedirect ĠURL Ġto Ġlist ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLIST _ RE DIRECT _ URL Ġ= Ġ" redirect :/ genres / list " ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ