Mudanças entre as edições de "RFWValidator"
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada) | |||
Linha 3: | Linha 3: | ||
= Preparando = | = Preparando = | ||
A classe '''RFWValidator''' | A classe '''RFWValidator''' precisa fazer consultas no banco de dados para conseguir testar a unicidade de valores nos objetos, se o objeto a ser alterado de fato já está consta no banco de dados, se objetos associados existem no banco, entre outras diversas validações que precisam consultar o banco de dados. | ||
Para que todas as validações sejam realiadas o '''RFWValidator''' deve receber uma instância do [[RFWDataProviderInterface]] na sua construção. Veja a documentação da interface para mais detalhes, mas seu objetivo é justamente promover acesso a leitura de objetos do banco de dados para componentes do RFW. | |||
Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível instanciar o '''RFWValidator''' sem passar a instância do [[RFWDataProviderInterface]], ele fará todas as validações possívels sem consultar outros objetos. | |||
= Como Utilizar = | = Como Utilizar = |
Edição atual tal como às 18h53min de 29 de julho de 2023
O RFWValidator é um serviço capaz de realizar validações nos RFWVO a partir das RFWMetaAnnotations. Todas as RFWMetaAnnotations serão lidas e analizadas, sempre que o valor de algum atributo não satisfazer as definições dos meta dados definidos nas annotations o RFWValidator resultará em erros de validação.
Preparando
A classe RFWValidator precisa fazer consultas no banco de dados para conseguir testar a unicidade de valores nos objetos, se o objeto a ser alterado de fato já está consta no banco de dados, se objetos associados existem no banco, entre outras diversas validações que precisam consultar o banco de dados.
Para que todas as validações sejam realiadas o RFWValidator deve receber uma instância do RFWDataProviderInterface na sua construção. Veja a documentação da interface para mais detalhes, mas seu objetivo é justamente promover acesso a leitura de objetos do banco de dados para componentes do RFW.
Caso não tenha interesse em fazer essa ligação com o banco de dados, é possível instanciar o RFWValidator sem passar a instância do RFWDataProviderInterface, ele fará todas as validações possívels sem consultar outros objetos.
Como Utilizar
O modo de usar é bem simples. O RFWValidator oferece uma classe estática de mesmo nome, com apenas 3 métodos estáticos e públicos. São eles:
- validateDelete(...) - Usado para validar o objeto antes de excluí-lo.
- validateInsert(...) - Valida o objeto para inseri-lo no banco.
- validateUpdate(...) - Valida o objeto antes de atualiza-lo no banco de dados.
Cada método deve ser chamado de acordo com a operação que o CRUD realizará com a entidade.
As validações realizadas são dividias em dois grupos: Validações de Operação e Validações da Entidade.
Validações de Operação
Validações de operação são as validações que precisam ser feitas de acordo com a operação à ser realizada (Insert/Update/Delete). De acordo com a operação temos as seguintes validações:
- Operação de Inserir
- Validamos se a entidade não tem um ID definido - Nenhuma entidade pode ser inserida já com um ID definido. Em geral se um ID já existe para o objeto indica um provável erro de programação, indicando que o objeto devia ser atualizado e não inserido.
- Validamos se todas as entidades dos relacionamentos do tipo COMPOSITION' também estão sem ID - sub entidade que compõe o objeto principal não devem preexistir no banco de dados uma vez que não existem "por conta própria" muito menos são utilizadas por outras instâncias. A existência de um ID geralmente indica que o tipo de relacionamento está declarado errado.
- Realiza as Validações da Entidade - Valida se os demais dados da entidade são válidos de acordo com seus meta dados definidos nas annotations.
- Operação de Atualizar
- Validamos se a entidade tem um ID definido - A entidade para ser alterada precisa de um ID definido. Caso contrário não é possível identificar a entidade correta no banco de dados.
- Realiza as Validações da Entidade - Valida se os demais dados da entidade são válidos de acordo com seus meta dados definidos nas annotations.
![]() |
|
- Operação de Excluir
- Validamos se o Objeto realmente existe no banco - Para evitar problemas ou mesmo detectar problemas no sistema, verificamos se o objeto com o ID especificado ainda existe no banco de dados.
- Valida se a instância está em uso - Algumas entidades criam dependências umas com as outras, e caso a entidade tenha a marcação com a RFWMetaAnnotations @RFWUsedBy, o RFWValidator validará se a instância que deseja apagar não está em uso por alguma instância da entidade marcada na annotation.
Validações da Entidade
Validações da entidade são as validações que devem ser feitas indiferente da operação que será realizada com o objeto. Geralmente são validações da estrutura e coesão das informações da entidade. Como por exemplo as validações individuais de cada atributo e seus meta dados. As validações geram mensagens de validações padrões indicadas abaixo. Para melhorar ou personalizar a mensagem de erro, basta tratar as RFWValidationException lançadas pelo RFWValidator comparar o código da exception encapsular em uma nova exception. As validações realizadas automaticamente pelo RFWValidator são:
Validação das RFWMetaField Annotations
Todas as RFWMetaField são encontradas e validadas de acordo com os meta-dados disponíveis.
RFWMetaFields Comuns
São as meta annotation para os fields de acordo com o seu tipo Java.
- RFWMetaBigDecimalField
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Valor Máximo - O valor máximo do BigDecimal é dividido em dois atributos, já que não é possível definir um BigDecimal diretamente na annotation. Os atributos maxIntegerValue e maxFloatValue definem respectivamente o a parte inteira e a parte fracionária do maior valor aceito. Internamente os dois valores serão combinados em um BigDecimal para comparar com o valor definido na entidade. "RFW_000352"
- Valor Mínimo - Assim como o valor máximo, a definição do valor mínimo é dividido nos atributos minIntegerValue e minFloatValue. Os valores são combinados em um novo BigDecimal e comparados com o valor definido na entidade. "RFW_000353"
- RFWMetaBooleanField
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- RFWMetaEnumField
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- RFWMetaIntegerField
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Valor Máximo - Se definido, valida se o valor do atributo não é maior que o valor definido no meta dado. "RFW_000352".
- Valor Mínimo - Se definido, valida se o valor do atributo não é menor que o valor definido no meta dado. "RFW_000353".
- RFWMetaStringField
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Comprimento Máximo - Valida se o comprimento da String é menor que o tamanho máximo definido. "RFW_000348"
- Comprimento Mínimo - Valida se o comprimento da String é maior que o tamanho mínimo definido. "RFW_000350"
![]() |
|
RFWMetaFields Especiais
São RFWMetaFields que modificam um tipo padrão do java para aceitar algum tipo específico de informação dos sistema.
- RFWMetaStringCEPField - Transforma um atributo string em um atributo de CEP
- Tipo Suportado - Valida se a annotation está sendo usada em um atributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Valida CEP - Valida se é um CEP Válido. Lança diferentes exceções dependendo do problema do CEP. A validação é feita pela RFWCEPDataFormatter.
- RFWMetaStringCNPJField - Transforma um atributo string em um atributo de CNPJ
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Valida CNPJ - Valida se é um CNPJ válido. Lança diferentes exceções dependendo do problema do CNPJ. A validação é feita pela RFWDocumentValidationUtils.validateCNPJ(...).
- RFWMetaStringIEField - Transforma um atributo string em um atributo de IE (Inscrição Estadual)
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- UF - Permite definir para qual UF esta IE deverá ser validada.
- UF Field - Permite ao invés de definir uma UF fixa no atributo UF, definir o atributo da entidade onde encontrar a UF para validação. Caso o atributo definido na UF Field esteja nulo, a IE será validada contra qualquer estado.
- Valida IE - Valida se é uma IE válida. Lança diferentes exceções de acordo com a falha da IE.
- RFWMetaStringPhoneField - Transforma um atributo string em um atributo de Telefone no padrão do RFW: DDI|DDD|Telefone
- Tipo Suportado - Valida se a annotation está sendo usada em um attributo do tipo suportado. "RFW_000349"
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se está preenchida. "RFW_000344"
- Campo Único - Se estiver marcado como único, valida se nenhum outro objeto existente está definido com o mesmo valor. "RFW_000345"
- Valida Telefone - Valida se o valor encontrado satisfaz os valores do padrão RFW de telefone. As validações são feitas pela classe RFWPhoneDataFormatter.
RFWMetaRelationship
A RFWMetaRelationship tem a finalidade de definir o relacionamento entre entidades. De acordo com o relacionamento e as definições o RFWValidator faz as seguintes validações:
- Associação - Validações para relacionamento do tipo Associação. (Veja em RFWMetaAnnotations#RFWMetaRelationshipField)
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. "RFW_000344"
- : Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.
- Verifica se o Objeto tem um ID - Para relacionamentos do tipo Associação é obrigatório que o objeto já exista no banco. A validação verifica se o objeto tem um ID definido e em seguinda busca no banco para garantir que o objeto exista de verdade e não apenas que o ID tenha sido definido.
- Há casos em que o objeto sendo validado para inserção (ou mesmo novos objetos dentro de uma atualização) tem um relacionamento bi-direcional. Nestes casos o objeto principal pode ter um relacionamento do tipo composição, forçando a validação do objeto relacionado, enquanto que o objeto do relacionamento tem um relacionamento do tipo Associação. Nestes casos do relacionamento de Associação com objeto sem ID não falha, pois ela detecta que o relacionamento referencia um objeto que será inserido na mesma transação.
- Ocorrências Mínimas - Em caso de Lista ou Maps, o RFWValidator pode verificar se a coleção contém o mínimo de ocorrências dentro deles. Para isso é obrigatório definir o atributo minSize no relacionamento.
- Unicidade - Quando um relacionamento Associação é marcado como único o RFWValidator procura no banco para ver se algum outro objeto já está "se relacionando" com esse mesmo objeto (ou com algum dos objetos em caso de coleção). RFW_000345
- Em caso de coleções, O RFWValidator também procura se o não há relacionamentos múltiplos com o mesmo objeto dentro da coleção. RFW_000412
- Composição - Validações para relacionamento do tipo Composição. (Veja em RFWMetaAnnotations#RFWMetaRelationshipField)
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. "RFW_000344"
- Note que verificar se o atributo não está nulo pode não significar que o relacionamento existe em casos em que o atributo é uma List ou Map. Nesses casos convêm declarar o tamanho mínimo da lista.
- Validação Recursiva - Para os objetos em um relacionamento do tipo Composição o RFWValidator validará campo a campo dos objetos presentes no relacionamento recursivamente. Isto quer dizer que o objeto será validado completamente como se a validação tivesse sido chamada para ele. Mesmo para relacionamentos em coleções, a validação será feita em cada um dos objetos.
- Campo Obrigatório - Se estiver definida como obrigatória (required = true), valida se o atributo não é nulo. "RFW_000344"
RFWAttributeRelation
Caso a entidade tenha uma ou mais anotações de RFWAttributeRelation o RFWValidator validará as relações dos atributos conforme indicado e caso falhe, lançará a exceção definida no atributo exceptioncode.
![]() |
|
RFWUniqueConstraint
Entidades que definem a RFWUniqueConstraint são validadas de forma que a unicidade do conjunto de atributos da entidade não se repita em nenhuma outra instância da mesma entidade.
![]() |
|
![]() |
|