package Ġcom . gab riel sch m ith . ped id ov enda . repository Ċ Ċ import Ġjava . io . Serializable Ċ import Ġjava . util . ArrayList Ċ Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . persistence . EntityManager Ċ import Ġjavax . persistence . Persistence Exception Ċ import Ġjavax . persistence . Typed Query Ċ import Ġjavax . persistence . criteria .* Ċ Ċ import Ġcom . gab riel sch m ith . ped id ov enda . model . Cliente Ċ import Ġcom . gab riel sch m ith . ped id ov enda . model . Produto Ċ import Ġcom . gab riel sch m ith . ped id ov enda . repository . filter . Cliente Filter Ċ import Ġcom . gab riel sch m ith . ped id ov enda . service . Neg oc io Exception Ċ import Ġcom . gab riel sch m ith . ped id ov enda . util . jpa . Transactional Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ Ċ open Ġclass ĠClient es Repository Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġvar Ġmanager : ĠEntity Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġopen Ġfun Ġpor Id ( id : ĠLong ?): ĠCliente Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . manager !!. find ( Cliente :: class . java , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġguard ar ( cliente : ĠCliente ): ĠCliente Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager !!. merge ( cliente ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġ@ Throws ( Neg oc io Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġremo ver ( cliente : ĠCliente ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcliente Ġ= Ġcliente ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcliente Ġ= Ġpor Id ( cliente . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager !!. remove ( cliente ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager !!. flush () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPersistence Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNeg oc io Exception (" Cliente ĠnÃ£o Ġpode Ġser Ġex cl uÃŃ do .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġpor Nome ( nome : ĠString ): ĠList < Cliente > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . manager !!. createQuery (" from ĠCliente Ġwhere Ġupper ( nome ) Ġlike Ġ: nome Ġorder Ġby Ġnome Ġasc ", ĠCliente :: class . java ). setParameter (" nome ", Ġnome . toUpperCase () Ġ+ Ġ"% "). result List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġfil tr ados ( filt ro : ĠCliente Filter ): ĠMutable List < Cliente > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmanager !!. criteria Builder ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Query Ġ= Ġbuilder . createQuery ( Cliente :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġpredicates Ġ= ĠArrayList < Predicate >() ĊĊĠĠĠĠĠĠĠ Ġval Ġcliente Root Ġ= Ġcriteria Query . from ( Cliente :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . isNotBlank ( filt ro . nome )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpredicates . add ( builder . like ( builder . lower ( cliente Root . get < String >(" nome ")), Ġ"% " Ġ+ Ġfilt ro . nome . toLowerCase () Ġ+ Ġ"% ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( filt ro . id Ġ!= Ġnull Ġ&& Ġfilt ro . id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpredicates . add ( builder . equal ( cliente Root . get < Any >(" id "), Ġfilt ro . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcriteria Query . select ( cliente Root ) ĊĠĠĠĠĠĠĠ Ġcriteria Query . where (* predicates . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġcriteria Query . orderBy ( builder . asc ( cliente Root . get < Any >(" nome "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġmanager !!. createQuery ( criteria Query ) ĊĠĠĠĠĠĠĠ Ġreturn Ġquery . result List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠserialVersionUID Ġ= Ġ 1 L ĊĠĠĠ Ġ} Ċ }