Definindo maxSize de forma dinâmica para classes Groovy que implementam Validateable
-
Geralmente nossas classes groovy (DomainClass, Command, DTO) precisam validar o limite de dados dos atributos e quase sempre um valor fixo resolve:
class ControlePessoa { String nome constraints = { nome nullable: false, maxSize: 50 } }Embora esse formato seja o mais comum, eventualmente será necessário definir um valor dinâmico para o limite desse atributo.
E como fazemos isso?
Definindo um validator customizado.
Implementação do validator dentro da própria classe
class ControlePessoa { String nome constraints = { nome nullable: false, validator: { val, obj -> boolean possuiIntegracao = new PackIntegracaoAkitaDao().getPossuiIntegracao() == '4' int maxSize = possuiIntegracao ? 60 : 100 if (val && val.size() > maxSize) { return ['maxSize.exceeded', maxSize] } return null } }Implementação do validator em uma classe própria
class ControlePessoa { String nome constraints = { nome nullable: false, validator: IntegracaoAkitaValidator.maxSize(60, 100) } } class IntegracaoAkitaValidator { static Closure maxSize(int maxSizeComIntegracao, int maxSizeSemIntegracao) { return { val, obj -> boolean possuiIntegracao = new PackIntegracaoAkitaDao().getPossuiIntegracao() == '4' int maxSize = possuiIntegracao ? maxSizeComIntegracao : maxSizeSemIntegracao if (val && val.size() > maxSize) { return ['maxSize.exceeded', maxSize] } return null } } }