package Ġcom . cat en ax . gp dm . service Ċ Ċ import Ġcom . cat en ax . gp dm . dto . request . Legal Form Request Ċ import Ġcom . cat en ax . gp dm . dto . response . Legal Form Response Ċ import Ġcom . cat en ax . gp dm . dto . response . Page Response Ċ import Ġcom . cat en ax . gp dm . dto . response . type . Type KeyName Dto Ċ import Ġcom . cat en ax . gp dm . dto . response . type . Type KeyName Url Dto Ċ import Ġcom . cat en ax . gp dm . entity .* Ċ import Ġcom . cat en ax . gp dm . exception . Bp dm AlreadyExists Ċ import Ġcom . cat en ax . gp dm . repository .* Ċ import Ġorg . springframework . data . domain . Page able Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ Ċ /** Ċ Ġ* ĠService Ġfor Ġfetching Ġand Ġcreating Ġmetadata Ġentities Ċ Ġ*/ Ċ @ Service Ċ class ĠMetadata Service ( ĊĠĠĠ Ġval Ġidentifier Type Repository : ĠIdentifier Type Repository , ĊĠĠĠ Ġval Ġiss uing Body Repository : ĠIss uing Body Repository , ĊĠĠĠ Ġval Ġlegal Form Repository : ĠLeg al Form Repository , ĊĠĠĠ Ġval Ġlegal Form Category Repository : ĠLeg al Form Category Repository , ĊĠĠĠ Ġval Ġidentifier Status Repository : ĠIdentifier Status Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġget OrCreate Identifier Type ( type : ĠType KeyName Url Dto < String >): ĠType KeyName Url Dto < String >{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Identifier Ġ= Ġidentifier Type Repository . findBy Technical Key ( type . technical Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġthrow ĠB p dm AlreadyExists ( Identifier Type :: class . simple Name !! , Ġtype . technical Key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠIdentifier Type ( type . name , Ġtype . url , Ġtype . technical Key ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġidentifier Type Repository . save ( new Identifier ). to Dto () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Identifier Types ( page Request : ĠPage able ): ĠPage Response < Type KeyName Url Dto < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġidentifier Type Repository . findAll ( page Request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpage . to Dto ( Ġpage . content . map Ġ{ Ġit . to Dto () Ġ} Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġget OrCreate Identifier Status ( status : ĠType KeyName Dto < String >): ĠType KeyName Dto < String >{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Status Ġ= Ġidentifier Status Repository . findBy Technical Key ( status . technical Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġthrow ĠB p dm AlreadyExists ( Identifier Status :: class . simple Name !! , Ġstatus . technical Key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠIdentifier Status ( status . name , Ġstatus . technical Key ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġidentifier Status Repository . save ( new Status ). to Dto () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Identifier Stat i ( page Request : ĠPage able ): ĠPage Response < Type KeyName Dto < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġidentifier Status Repository . findAll ( page Request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpage . to Dto ( Ġpage . content . map Ġ{ Ġit . to Dto () Ġ} Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġget OrCreate Iss uing Body ( type : ĠType KeyName Url Dto < String >): ĠType KeyName Url Dto < String >{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Iss uing Body Ġ= Ġiss uing Body Repository . findBy Technical Key ( type . technical Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġthrow ĠB p dm AlreadyExists ( Iss uing Body :: class . simple Name !! , Ġtype . technical Key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠIss uing Body ( type . name , Ġtype . url , Ġtype . technical Key ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġiss uing Body Repository . save ( new Iss uing Body ). to Dto () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Iss uing B odies ( page Request : ĠPage able ): ĠPage Response < Type KeyName Url Dto < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġiss uing Body Repository . findAll ( page Request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpage . to Dto ( Ġpage . content . map Ġ{ Ġit . to Dto () Ġ} Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġget OrCreate Legal Form ( request : ĠLeg al Form Request ): ĠLeg al Form Response { ĊĠĠĠĠĠĠĠ Ġval Ġlegal Form Ġ= Ġlegal Form Repository . findBy Technical Key ( request . technical Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġthrow ĠB p dm AlreadyExists ( Legal Form :: class . simple Name !! , Ġrequest . name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġbuild Legal Form ( request ) ĊĊĠĠĠĠĠĠĠ Ġlegal Form Category Repository . save All ( legal Form . categories ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlegal Form Repository . save ( legal Form ). to Dto () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Legal Forms ( page Request : ĠPage able ): ĠPage Response < Legal Form Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġlegal Form Repository . findAll ( page Request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpage . to Dto ( Ġpage . content . map Ġ{ Ġit . to Dto () Ġ} Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Legal Form ( dto : ĠLeg al Form Request ): ĠLeg al Form { ĊĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= Ġdto . category . map Ġ{ ĠLeg al Form Category ( it . name , Ġit . url ) Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġreturn ĠLeg al Form ( dto . name , Ġdto . url , Ġdto . language , Ġdto . main Abbre viation , Ġcategories , Ġdto . technical Key ) ĊĠĠĠ Ġ} Ċ Ċ }