bug#20776

dev:wilian
qua:

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/Outros/Auditador/trunk@104211 d1611594-4594-4d17-8e1d-87c2c4800839
master
wilian 2020-11-10 02:14:56 +00:00
parent 97e0cd98d2
commit 89ea4fae2d
9 changed files with 128 additions and 3 deletions

View File

@ -5,11 +5,24 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação utilizada para atributos.
*
* @author wilian
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditarAtributo {
/**
* Caso seja necessário colocar um nome amigável para o atributo, senão for informado o padrão será o nome do atributo da classe.
*/
String nome() default "";
String pattern() default "";
/**
* Em caso de um atributo do tipo "DATE", informar o formato da data, valor padrão: "dd/MM/yyyy HH:mm"
*/
String pattern() default "dd/MM/yyyy HH:mm";
}

View File

@ -5,12 +5,29 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação responsável por indicar que a classe será auditada.
*
* @author wilian
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditarClasse {
/**
* Caso seja necessário colocar um nome amigável para a classe, senão for informado o padrão será o nome da classe.
*/
String nome();
/**
* Quando a classe possuir o campo que indica a empresa.
*/
String campoEmpresa() default "";
/**
* Atributo para indicar qual tela que o objeto será auditado.
*/
String tela();
}

View File

@ -5,11 +5,19 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação responsável que indicará que o atributo é uma entidade e seus atributos deverão ser auditados individualmente.
*
* @author wilian
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditarEntidade {
/**
* Caso seja necessário colocar um nome amigável para o atributo, senão for informado o padrão será o nome do atributo da classe.
*/
String nome() default "";
boolean auditarCampos() default false;
}

View File

@ -5,6 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação responsável para indicar qual o atributo que representa a chave primária da classe.
*
* @author wilian
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditarID {

View File

@ -5,11 +5,25 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação responsável para auditar o campos que são listas.
*
* @author wilian
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditarLista {
/**
* Caso seja necessário colocar um nome amigável para o atributo, senão for informado o padrão será o nome do atributo da classe.
*/
String nome() default "";
/**
* Indica que os atributos da lista são entidades e precisam ser auditados individualmente. O padrão é comparar apenas se os itens da lista foram removidos ou adicionados.
* @return
*/
boolean auditarEntidades() default false;
}

View File

@ -5,6 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação responsável para indicar que o atributo não deverá ser auditado, por padrão todos os atributos da classe são auditados.
*
* @author wilian
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NaoAuditar {

View File

@ -25,6 +25,12 @@ import br.com.rjconsultores.auditador.interfaces.Auditavel;
import br.com.rjconsultores.auditador.interfaces.AuditavelTelaAlternativa;
import br.com.rjconsultores.auditador.model.AuditadorObjects;
/**
* Classe responsável para listar as alterações do objeto.
*
* @author wilian
*
*/
public class Auditador {
AuditadorAtributo auditadorAtributo;
@ -47,6 +53,13 @@ public class Auditador {
return auditar;
}
/**
* Responsável por auditar os registros.
*
* @param original
* @param novo
* @return
*/
public List<AuditadorObjects> auditar(Object original, Object novo) {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
try {
@ -70,6 +83,15 @@ public class Auditador {
}
}
/**
* Responsável por auditar a lista quando a alteração acontece exclusivamente nos atributos lista do objeto
*
* @param objeto
* @param nomeCampoListAuditar
* @param original
* @param novo
* @return
*/
public List<AuditadorObjects> auditarList(Object objeto, String nomeCampoListAuditar, List<Object> original, List<Object> novo) {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
try {
@ -101,6 +123,12 @@ public class Auditador {
return lsRetorno;
}
/**
* Responsável por auditar quando o objeto é excluído.
*
* @param objeto
* @return
*/
public List<AuditadorObjects> auditarExclusao(Object objeto) {
try {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
@ -215,7 +243,7 @@ public class Auditador {
AuditarEntidade auditarEntidade = extrairAnotacao.extrairAuditarEntidade(campo);
AuditarLista auditarLista = extrairAnotacao.extrairAuditarLista(campo);
if(auditarEntidade != null && auditarEntidade.auditarCampos()) {
if(auditarEntidade != null) {
lsRetorno.addAll(auditadorEntidade.auditar(campo, original, novo, null));
} else if(auditarLista != null) {
lsRetorno.addAll(auditadorList.auditar(campo, original, novo, auditarLista.auditarEntidades()));

View File

@ -1,11 +1,33 @@
package br.com.rjconsultores.auditador.interfaces;
/**
* Interface que deverá ser implementada quando o objeto for auditado, interface estende a interface Cloneable.
*
* @author wilian
*
* @param <T>
*/
public interface Auditavel<T> extends Cloneable {
/**
* Método deverá ser implementado com o recurso de clonagem da Interface Cloneable. Executa o processo de clonagem do objeto para ser comparado com o alterado, executar esse método logo após recuperar o objeto do banco de dados.
*
* @throws CloneNotSupportedException
*/
public void clonar() throws CloneNotSupportedException;
/**
* Após executar o método "clonar" retorna o objeto clonado.
*
* @return
* @throws CloneNotSupportedException
*/
public T getCloneObject() throws CloneNotSupportedException;
/**
* Método que descreve informações do objeto quando o registro é criado/incluído/excluído.
* @return
*/
public String getTextoInclusaoExclusao();
}

View File

@ -1,7 +1,18 @@
package br.com.rjconsultores.auditador.interfaces;
/**
* Interface que permite informar uma tela alternativa para auditoria do objeto quando o mesmo é alterado em telas diferentes.
*
* @author wilian
*
*/
public interface AuditavelTelaAlternativa {
/**
* Quando o objeto auditado implementar a interface, o valor do retorno desse método será priorizado.
*
* @return
*/
public String getTelaAlternativa();
}