package Ġcom . atar ax ia . gab riel _ vz . controller . editor Ċ Ċ import Ġcom . atar ax ia . gab riel _ vz . factory .* Ċ import Ġcom . atar ax ia . gab riel _ vz . model . Dis co graphy Ċ import Ġcom . atar ax ia . gab riel _ vz . model . L iter ature Ċ import Ġcom . atar ax ia . gab riel _ vz . model . Person Ċ import Ġcom . atar ax ia . gab riel _ vz . model . Work Ċ import Ġcom . atar ax ia . gab riel _ vz . repository . Work Repository Ċ import Ġcom . atar ax ia . gab riel _ vz . service .* Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . ui . Model Ċ import Ġorg . springframework . validation . Binding Result Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjavax . validation . Valid Ċ Ċ @ RequestMapping ("/ editor /") Ċ @ Controller Ċ class ĠEditor Work Controller ( ĊĠĠĠĠĠĠĠ Ġval Ġwork Service : ĠWork Service , ĊĠĠĠĠĠĠĠ Ġval Ġwork Factory : ĠWork Factory , ĊĠĠĠĠĠĠĠ Ġval Ġplace Factory : ĠPlace Factory , ĊĠĠĠĠĠĠĠ Ġval Ġplace Service : ĠPlace Service , ĊĠĠĠĠĠĠĠ Ġval Ġtext Service : ĠText Service , ĊĠĠĠĠĠĠĠ Ġval Ġliter ature Factory : ĠL iter ature Factory , ĊĠĠĠĠĠĠĠ Ġval Ġliter ature Service : ĠL iter ature Service , ĊĠĠĠĠĠĠĠ Ġval Ġdisco graphy Service : ĠDis co graphy Service , ĊĠĠĠĠĠĠĠ Ġval Ġdisco graphy Factory : ĠDis co graphy Factory , ĊĠĠĠĠĠĠĠ Ġval Ġperson Service : ĠPerson Service , ĊĠĠĠĠĠĠĠ Ġval Ġperson Factory : ĠPerson Factory Ċ ) Ġ: Ġcom . atar ax ia . gab riel _ vz . root . Controller < Model , ĠWork >() Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġwork Repository : ĠWork Repository ĊĊĠĠĠ Ġ@ GetMapping ("/ create Work ") ĊĠĠĠ Ġoverride Ġfun Ġshow Add Form ( m : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" work ", ĠWork ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" places ", Ġplace Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" texts ", Ġtext Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" l iter ature ", Ġliter ature Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" dis co graphy ", Ġdisco graphy Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" persons ", Ġperson Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" editor / add Work " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( value Ġ= Ġ["/ add Work "]) ĊĠĠĠ Ġoverride Ġfun Ġadd ( type : ĠWork , Ġbinding Result : ĠBinding Result ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding Result . has Errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( binding Result . all Errors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( place Of Pre mi ere ?. id Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . place Of Pre mi ere Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( related Text ?. id Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . related Text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( related Text ?. id Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . related Text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( incip it ?. cle f Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . incip it Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype . related L iter ature ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġtype . related L iter ature ?. map Ġ{ Ġliter ature Factory . entity From Model ( it ). related Works ?. add ( work Factory . entity From Model ( type )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype . dis co graph ies ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġtype . dis co graph ies ?. map Ġ{ Ġdisco graphy Factory . entity From Model ( it ). related Works ?. add ( work Factory . entity From Model ( type )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype . related Pers ons ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġtype . related Pers ons ?. map Ġ{ Ġperson Factory . entity From Model ( it ). related Works ?. add ( work Factory . entity From Model ( type )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġwork Service . create ( type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" redirect :/ works " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ edit Work ") ĊĠĠĠ Ġoverride Ġfun Ġshow Update Form (@ RequestParam (" id ") Ġid : ĠString , Ġm : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwork Ġ= Ġwork Service . get ( id ). or Null () ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" work ", Ġwork ) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" places ", Ġplace Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" texts ", Ġtext Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" l iter ature ", Ġliter ature Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" dis co graphy ", Ġdisco graphy Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġm . addAttribute (" persons ", Ġperson Service . getAll (). or Null ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"/ editor / edit Work " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ("/ update Work /{ id }") ĊĠĠĠ Ġoverride Ġfun Ġupdate (@ PathVariable (" id ") Ġid : ĠString , Ġ@ Valid Ġtype : ĠWork ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated L iter ature Ġ= Ġmutable ListOf < L iter ature >() ĊĠĠĠĠĠĠĠ Ġval Ġupdated Dis co graphy Ġ= Ġmutable ListOf < Dis co graphy >() ĊĠĠĠĠĠĠĠ Ġval Ġupdated Pers ons Ġ= Ġmutable ListOf < Person >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . place Of Pre mi ere ?. id Ġ== Ġ"") Ġtype . place Of Pre mi ere Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġtype . place Of Pre mi ere Ġ= Ġplace Service . get ( type . place Of Pre mi ere ?. id !! ). or Null () ĊĠĠĠĠĠĠĠ Ġif Ġ( type . related Text ?. id Ġ== Ġ"") Ġtype . related Text Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġtype . related Text Ġ= Ġtext Service . get ( type . related Text ?. id !! ). or Null () ĊĠĠĠĠĠĠĠ Ġif Ġ( type . incip it ?. cle f Ġ== Ġ"") Ġtype . incip it Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . related L iter ature ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} !! ) Ġtype . related L iter ature Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġtype . related L iter ature !!. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġliter ature Service . get ( item . id !! ). or Null ()?. let Ġ{ Ġupdated L iter ature . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . dis co graph ies ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} !! ) Ġtype . dis co graph ies Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġtype . dis co graph ies !!. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisco graphy Service . get ( item . id !! ). or Null ()?. let Ġ{ Ġupdated Dis co graphy . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . related Pers ons ?. remove If Ġ{ Ġit . id Ġ== Ġnull Ġ} !! ) Ġtype . related Pers ons Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġtype . related Pers ons !!. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Service . get ( item . id !! ). or Null ()?. let Ġ{ Ġupdated Pers ons . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype . related L iter ature Ġ= Ġupdated L iter ature ĊĠĠĠĠĠĠĠ Ġtype . dis co graph ies Ġ= Ġupdated Dis co graphy ĊĠĠĠĠĠĠĠ Ġtype . related Pers ons Ġ= Ġupdated Pers ons ĊĊĠĠĠĠĠĠĠ Ġwork Service . update ( id , Ġtype ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" redirect :/ works " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ delete Work ") ĊĠĠĠ Ġoverride Ġfun Ġdelete ById (@ RequestParam (" id ") Ġid : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġwork Service . delete ( id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" redirect :/ works " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ delete Works ") ĊĠĠĠ Ġoverride Ġfun Ġdelete All (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġwork Service . delete All () ĊĠĠĠĠĠĠĠ Ġreturn Ġ" redirect :/ works " ĊĠĠĠ Ġ} Ċ }