join Auditador

master
Fabio 2024-10-31 14:19:22 -03:00
parent b803c4c399
commit b6f387d145
21 changed files with 1324 additions and 1324 deletions

View File

View File

@ -1,28 +1,28 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** /**
* Anotação utilizada para atributos. * Anotação utilizada para atributos.
* *
* @author wilian * @author wilian
* *
*/ */
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarAtributo { 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. * 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 nome() default "";
/** /**
* Em caso de um atributo do tipo "DATE", informar o formato da data, valor padrão: "dd/MM/yyyy HH:mm" * 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"; String pattern() default "dd/MM/yyyy HH:mm";
} }

View File

@ -1,35 +1,35 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import br.com.rjconsultores.auditador.enums.TipoExtracaoDados; import br.com.rjconsultores.auditador.enums.TipoExtracaoDados;
/** /**
* Anotação responsável por indicar que a classe será auditada. * Anotação responsável por indicar que a classe será auditada.
* *
* @author wilian * @author wilian
* *
*/ */
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarClasse { public @interface AuditarClasse {
/** /**
* Caso seja necessário colocar um nome amigável para a classe, se não for informado o padrão será o nome da classe. * Caso seja necessário colocar um nome amigável para a classe, se não for informado o padrão será o nome da classe.
*/ */
String nome(); String nome();
/** /**
* Atributo para indicar qual tela que o objeto será auditado. * Atributo para indicar qual tela que o objeto será auditado.
*/ */
String tela(); String tela();
/** /**
* Define se as informações serão extraídas pelo atributo ou metodo. * Define se as informações serão extraídas pelo atributo ou metodo.
* @return * @return
*/ */
TipoExtracaoDados tipoExtracaoDados() default TipoExtracaoDados.ATRIBUTO; TipoExtracaoDados tipoExtracaoDados() default TipoExtracaoDados.ATRIBUTO;
} }

View File

@ -1,20 +1,20 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
/** /**
* Anotação responsável que indicará que o atributo é uma entidade e seus atributos deverão ser auditados individualmente. * Anotação responsável que indicará que o atributo é uma entidade e seus atributos deverão ser auditados individualmente.
* *
* @author wilian * @author wilian
* *
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarEntidade { 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. * 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 nome() default "";
} }

View File

@ -1,18 +1,18 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
/** /**
* Anotação responsável para indicar qual o atributo que representa a chave primária da classe. * Anotação responsável para indicar qual o atributo que representa a chave primária da classe.
* *
* @author wilian * @author wilian
* *
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarID { public @interface AuditarID {
String nome() default ""; String nome() default "";
String pattern() default ""; String pattern() default "";
} }

View File

@ -1,15 +1,15 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
/** /**
* Anotação responsável para indicar qual o atributo que representa a chave primária composta da classe. * Anotação responsável para indicar qual o atributo que representa a chave primária composta da classe.
* *
* @author wilian * @author wilian
* *
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarIDComposta { public @interface AuditarIDComposta {
} }

View File

@ -1,26 +1,26 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
/** /**
* Anotação responsável para auditar o campos que são listas. * Anotação responsável para auditar o campos que são listas.
* *
* @author wilian * @author wilian
* *
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarLista { 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. * 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 nome() default "";
/** /**
* Indica que os atributos da lista sao entidades e precisam ser auditados individualmente. O padrão é comparar apenas se os itens da lista foram removidos ou adicionados. * Indica que os atributos da lista sao entidades e precisam ser auditados individualmente. O padrão é comparar apenas se os itens da lista foram removidos ou adicionados.
* @return * @return
*/ */
boolean auditarEntidades() default false; boolean auditarEntidades() default false;
} }

View File

@ -1,28 +1,28 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** /**
* Anotação utilizada para methodos. * Anotação utilizada para methodos.
* *
* @author wilian * @author wilian
* *
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface AuditarMetodo { public @interface AuditarMetodo {
/** /**
* 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. * 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 nome() default "";
/** /**
* Em caso de um atributo do tipo "DATE", informar o formato da data, valor padrão: "dd/MM/yyyy HH:mm" * 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"; String pattern() default "dd/MM/yyyy HH:mm";
} }

View File

@ -1,15 +1,15 @@
package br.com.rjconsultores.auditador.annotations; package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
/** /**
* Anotação responsável para indicar que o atributo não deverá ser auditado, por padrão todos os atributos da classe sao auditados. * Anotação responsável para indicar que o atributo não deverá ser auditado, por padrão todos os atributos da classe sao auditados.
* *
* @author wilian * @author wilian
* *
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface NaoAuditar { public @interface NaoAuditar {
} }

View File

@ -1,42 +1,42 @@
package br.com.rjconsultores.auditador.auditadores; package br.com.rjconsultores.auditador.auditadores;
import java.lang.reflect.AccessibleObject; import java.lang.reflect.AccessibleObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import br.com.rjconsultores.auditador.exceptions.AuditadorException; import br.com.rjconsultores.auditador.exceptions.AuditadorException;
import br.com.rjconsultores.auditador.model.AuditadorObjects; import br.com.rjconsultores.auditador.model.AuditadorObjects;
class AuditadorAtributo { class AuditadorAtributo {
protected Auditador auditador; protected Auditador auditador;
public AuditadorAtributo(Auditador auditar) { public AuditadorAtributo(Auditador auditar) {
super(); super();
this.auditador = auditar; this.auditador = auditar;
} }
public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, String nomeClasse) { public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, String nomeClasse) {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>(); List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
try { try {
if(!auditador.isObjetosNulos(original, novo)) { if(!auditador.isObjetosNulos(original, novo)) {
String pattern = auditador.extrairPattern(campo); String pattern = auditador.extrairPattern(campo);
Object valorOriginal = auditador.getValor(campo, original, pattern); Object valorOriginal = auditador.getValor(campo, original, pattern);
Object valorNovo = auditador.getValor(campo, novo, pattern); Object valorNovo = auditador.getValor(campo, novo, pattern);
AuditadorObjects auditado = auditador.auditarCampo(campo, valorOriginal, valorNovo, nomeClasse); AuditadorObjects auditado = auditador.auditarCampo(campo, valorOriginal, valorNovo, nomeClasse);
if(auditado != null) { if(auditado != null) {
lsRetorno.add(auditado); lsRetorno.add(auditado);
} }
} }
} catch (Exception e) { } catch (Exception e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} catch (Throwable e) { } catch (Throwable e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} }
return lsRetorno; return lsRetorno;
} }
} }

View File

@ -1,76 +1,76 @@
package br.com.rjconsultores.auditador.auditadores; package br.com.rjconsultores.auditador.auditadores;
import java.lang.reflect.AccessibleObject; import java.lang.reflect.AccessibleObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import br.com.rjconsultores.auditador.exceptions.AuditadorException; import br.com.rjconsultores.auditador.exceptions.AuditadorException;
import br.com.rjconsultores.auditador.model.AuditadorObjects; import br.com.rjconsultores.auditador.model.AuditadorObjects;
class AuditadorEntidade { class AuditadorEntidade {
protected Auditador auditador; protected Auditador auditador;
public AuditadorEntidade(Auditador auditar) { public AuditadorEntidade(Auditador auditar) {
super(); super();
this.auditador = auditar; this.auditador = auditar;
} }
public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, String nomeClasse) { public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, String nomeClasse) {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>(); List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
try { try {
Object valorOriginal = campo != null && original != null ? auditador.extrairValor(campo, original) : original; Object valorOriginal = campo != null && original != null ? auditador.extrairValor(campo, original) : original;
Object valorNovo = campo != null && novo != null ? auditador.extrairValor(campo, novo) : novo; Object valorNovo = campo != null && novo != null ? auditador.extrairValor(campo, novo) : novo;
String localNomeClasse = nomeClasse != null ? nomeClasse : auditador.extrairNomeClasse(valorOriginal, valorNovo); String localNomeClasse = nomeClasse != null ? nomeClasse : auditador.extrairNomeClasse(valorOriginal, valorNovo);
AuditadorObjects objectNovo = auditador.auditarObjetoNovo(campo, valorOriginal, valorNovo); AuditadorObjects objectNovo = auditador.auditarObjetoNovo(campo, valorOriginal, valorNovo);
if(objectNovo != null) { if(objectNovo != null) {
lsRetorno.add(objectNovo); lsRetorno.add(objectNovo);
return lsRetorno; return lsRetorno;
} }
if(!auditador.isObjetosNulos(valorOriginal, valorNovo)) { if(!auditador.isObjetosNulos(valorOriginal, valorNovo)) {
Class<?> classe = valorOriginal != null ? valorOriginal.getClass() : valorNovo.getClass(); Class<?> classe = valorOriginal != null ? valorOriginal.getClass() : valorNovo.getClass();
List<AccessibleObject> camposAuditaveis = auditador.extrairCamposAuditaveis(classe); List<AccessibleObject> camposAuditaveis = auditador.extrairCamposAuditaveis(classe);
for (AccessibleObject campoEntidade : camposAuditaveis) { for (AccessibleObject campoEntidade : camposAuditaveis) {
String pattern = auditador.extrairPattern(campoEntidade); String pattern = auditador.extrairPattern(campoEntidade);
Object valorOriginalEntidade = auditador.getValor(campoEntidade, valorOriginal, pattern); Object valorOriginalEntidade = auditador.getValor(campoEntidade, valorOriginal, pattern);
Object valorNovoEntidade = auditador.getValor(campoEntidade, valorNovo, pattern); Object valorNovoEntidade = auditador.getValor(campoEntidade, valorNovo, pattern);
AuditadorObjects auditado = auditador.auditarCampo(campoEntidade, valorOriginalEntidade, valorNovoEntidade, localNomeClasse); AuditadorObjects auditado = auditador.auditarCampo(campoEntidade, valorOriginalEntidade, valorNovoEntidade, localNomeClasse);
if(auditado != null) { if(auditado != null) {
lsRetorno.add(auditado); lsRetorno.add(auditado);
} }
} }
// Field[] campos = classe.getDeclaredFields(); // Field[] campos = classe.getDeclaredFields();
// for (Field campoEntidade : campos) { // for (Field campoEntidade : campos) {
// campoEntidade.setAccessible(true); // campoEntidade.setAccessible(true);
// //
// NaoAuditar naoAuditar = auditador.extrairAnotacao.extrairNaoAuditar(campoEntidade); // NaoAuditar naoAuditar = auditador.extrairAnotacao.extrairNaoAuditar(campoEntidade);
// if(naoAuditar != null) { // if(naoAuditar != null) {
// continue; // continue;
// } // }
// //
// AuditarAtributo auditarAtributo = auditador.extrairAnotacao.extrairAuditarAtributo(campoEntidade); // AuditarAtributo auditarAtributo = auditador.extrairAnotacao.extrairAuditarAtributo(campoEntidade);
// String pattern = auditarAtributo != null && StringUtils.isNotBlank(auditarAtributo.pattern()) ? auditarAtributo.pattern() : null; // String pattern = auditarAtributo != null && StringUtils.isNotBlank(auditarAtributo.pattern()) ? auditarAtributo.pattern() : null;
// //
// Object valorOriginalEntidade = auditador.getValor(campoEntidade, valorOriginal, pattern); // Object valorOriginalEntidade = auditador.getValor(campoEntidade, valorOriginal, pattern);
// Object valorNovoEntidade = auditador.getValor(campoEntidade, valorNovo, pattern); // Object valorNovoEntidade = auditador.getValor(campoEntidade, valorNovo, pattern);
// //
// AuditadorObjects auditado = auditador.auditarCampo(campoEntidade, valorOriginalEntidade, valorNovoEntidade, localNomeClasse); // AuditadorObjects auditado = auditador.auditarCampo(campoEntidade, valorOriginalEntidade, valorNovoEntidade, localNomeClasse);
// if(auditado != null) { // if(auditado != null) {
// lsRetorno.add(auditado); // lsRetorno.add(auditado);
// } // }
// } // }
} }
} catch (Exception e) { } catch (Exception e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} catch (Throwable e) { } catch (Throwable e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} }
return lsRetorno; return lsRetorno;
} }
} }

View File

@ -1,131 +1,131 @@
package br.com.rjconsultores.auditador.auditadores; package br.com.rjconsultores.auditador.auditadores;
import java.lang.reflect.AccessibleObject; import java.lang.reflect.AccessibleObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao; import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao;
import br.com.rjconsultores.auditador.exceptions.AuditadorException; import br.com.rjconsultores.auditador.exceptions.AuditadorException;
import br.com.rjconsultores.auditador.model.AuditadorObjects; import br.com.rjconsultores.auditador.model.AuditadorObjects;
class AuditadorList { class AuditadorList {
protected Auditador auditador; protected Auditador auditador;
public AuditadorList(Auditador auditar) { public AuditadorList(Auditador auditar) {
super(); super();
this.auditador = auditar; this.auditador = auditar;
} }
public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, boolean auditarEntidades) { public List<AuditadorObjects> auditar(AccessibleObject campo, Object original, Object novo, boolean auditarEntidades) {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>(); List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
try { try {
List<Object> lsOriginal = auditador.getValorList(campo, original); List<Object> lsOriginal = auditador.getValorList(campo, original);
List<Object> lsNovo = auditador.getValorList(campo, novo); List<Object> lsNovo = auditador.getValorList(campo, novo);
lsRetorno.addAll(auditarList(campo, auditarEntidades, lsOriginal, lsNovo)); lsRetorno.addAll(auditarList(campo, auditarEntidades, lsOriginal, lsNovo));
} catch (Exception e) { } catch (Exception e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} catch (Throwable e) { } catch (Throwable e) {
throw new AuditadorException(e.getMessage(), e); throw new AuditadorException(e.getMessage(), e);
} }
return lsRetorno; return lsRetorno;
} }
public List<AuditadorObjects> auditarList(AccessibleObject campo, boolean auditarEntidades, public List<AuditadorObjects> auditarList(AccessibleObject campo, boolean auditarEntidades,
List<Object> lsOriginal, List<Object> lsNovo) throws CloneNotSupportedException { List<Object> lsOriginal, List<Object> lsNovo) throws CloneNotSupportedException {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>(); List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
List<Object> lsObjetosInseridos = new ArrayList<Object>(0); List<Object> lsObjetosInseridos = new ArrayList<Object>(0);
List<Object> lsObjetosRemovidos = new ArrayList<Object>(0); List<Object> lsObjetosRemovidos = new ArrayList<Object>(0);
List<Object> lsObjetosMantidos = new ArrayList<Object>(0); List<Object> lsObjetosMantidos = new ArrayList<Object>(0);
if(lsNovo != null) { if(lsNovo != null) {
lsObjetosInseridos.addAll(lsNovo); lsObjetosInseridos.addAll(lsNovo);
if(lsOriginal != null) { if(lsOriginal != null) {
lsObjetosInseridos.removeAll(lsOriginal); lsObjetosInseridos.removeAll(lsOriginal);
} }
lsRetorno.addAll(auditarRegistros(campo, lsObjetosInseridos, true)); lsRetorno.addAll(auditarRegistros(campo, lsObjetosInseridos, true));
if(auditarEntidades) { if(auditarEntidades) {
lsObjetosMantidos.addAll(lsNovo); lsObjetosMantidos.addAll(lsNovo);
} }
} }
if(lsOriginal != null) { if(lsOriginal != null) {
lsObjetosRemovidos.addAll(lsOriginal); lsObjetosRemovidos.addAll(lsOriginal);
if(lsNovo != null) { if(lsNovo != null) {
lsObjetosRemovidos.removeAll(lsNovo); lsObjetosRemovidos.removeAll(lsNovo);
} }
lsRetorno.addAll(auditarRegistros(campo, lsObjetosRemovidos, false)); lsRetorno.addAll(auditarRegistros(campo, lsObjetosRemovidos, false));
if(auditarEntidades) { if(auditarEntidades) {
lsObjetosMantidos.retainAll(lsOriginal); lsObjetosMantidos.retainAll(lsOriginal);
} }
} }
if(auditarEntidades) { if(auditarEntidades) {
for (Object object : lsObjetosMantidos) { for (Object object : lsObjetosMantidos) {
Object originalEntidade = lsOriginal.get(lsOriginal.indexOf(object)); Object originalEntidade = lsOriginal.get(lsOriginal.indexOf(object));
Object novoEntidade = lsNovo.get(lsNovo.indexOf(object)); Object novoEntidade = lsNovo.get(lsNovo.indexOf(object));
String nomeClasse = auditador.extrairNomeClasse(originalEntidade, novoEntidade); String nomeClasse = auditador.extrairNomeClasse(originalEntidade, novoEntidade);
lsRetorno.addAll(auditador.auditadorEntidade.auditar(null, originalEntidade, novoEntidade, nomeClasse)); lsRetorno.addAll(auditador.auditadorEntidade.auditar(null, originalEntidade, novoEntidade, nomeClasse));
} }
} }
return lsRetorno; return lsRetorno;
} }
protected List<AuditadorObjects> auditarRegistros(AccessibleObject campo, List<Object> lsObjetosRemovidos, boolean inserido) protected List<AuditadorObjects> auditarRegistros(AccessibleObject campo, List<Object> lsObjetosRemovidos, boolean inserido)
throws CloneNotSupportedException { throws CloneNotSupportedException {
List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>(); List<AuditadorObjects> lsRetorno = new ArrayList<AuditadorObjects>();
String nomeCampo = auditador.extrairNomeCampo(campo); String nomeCampo = auditador.extrairNomeCampo(campo);
for (Object removido : lsObjetosRemovidos) { for (Object removido : lsObjetosRemovidos) {
AuditadorObjects objectInserido = null; AuditadorObjects objectInserido = null;
if(inserido) { if(inserido) {
objectInserido = auditarObjetoInserido(nomeCampo, removido); objectInserido = auditarObjetoInserido(nomeCampo, removido);
} else { } else {
objectInserido = auditarObjetoRemovido(nomeCampo, removido); objectInserido = auditarObjetoRemovido(nomeCampo, removido);
} }
if(objectInserido != null) { if(objectInserido != null) {
lsRetorno.add(objectInserido); lsRetorno.add(objectInserido);
} }
} }
return lsRetorno; return lsRetorno;
} }
protected boolean isObjetosList(Object objeto) { protected boolean isObjetosList(Object objeto) {
return objeto != null && objeto instanceof Collection; return objeto != null && objeto instanceof Collection;
} }
protected AuditadorObjects auditarObjetoInserido(String nomeCampo, Object objeto) throws CloneNotSupportedException { protected AuditadorObjects auditarObjetoInserido(String nomeCampo, Object objeto) throws CloneNotSupportedException {
if(objeto != null) { if(objeto != null) {
AuditadorObjects auditado = criarObjetoInseridoRemovido(nomeCampo, objeto); AuditadorObjects auditado = criarObjetoInseridoRemovido(nomeCampo, objeto);
auditado.setValorNovo(String.format("Registro inserido [%s]", auditador.extrairTextoInclusaoExclusao(objeto))); auditado.setValorNovo(String.format("Registro inserido [%s]", auditador.extrairTextoInclusaoExclusao(objeto)));
return auditado; return auditado;
} }
return null; return null;
} }
private AuditadorObjects criarObjetoInseridoRemovido(String nomeCampo, Object objeto) throws CloneNotSupportedException { private AuditadorObjects criarObjetoInseridoRemovido(String nomeCampo, Object objeto) throws CloneNotSupportedException {
AuditadorObjects auditado = auditador.getPadrao().clonar(); AuditadorObjects auditado = auditador.getPadrao().clonar();
auditado.setTipoAlteracao(AuditadorTipoAlteracao.ALTERACAO); auditado.setTipoAlteracao(AuditadorTipoAlteracao.ALTERACAO);
auditado.setCampoAlterado(nomeCampo); auditado.setCampoAlterado(nomeCampo);
auditado.setClasseAlterada(objeto.getClass().getSimpleName()); auditado.setClasseAlterada(objeto.getClass().getSimpleName());
return auditado; return auditado;
} }
protected AuditadorObjects auditarObjetoRemovido(String nomeCampo, Object objeto) throws CloneNotSupportedException { protected AuditadorObjects auditarObjetoRemovido(String nomeCampo, Object objeto) throws CloneNotSupportedException {
if(objeto != null) { if(objeto != null) {
AuditadorObjects auditado = criarObjetoInseridoRemovido(nomeCampo, objeto); AuditadorObjects auditado = criarObjetoInseridoRemovido(nomeCampo, objeto);
auditado.setValorNovo(String.format("Registro removido [%s]", auditador.extrairTextoInclusaoExclusao(objeto))); auditado.setValorNovo(String.format("Registro removido [%s]", auditador.extrairTextoInclusaoExclusao(objeto)));
return auditado; return auditado;
} }
return null; return null;
} }
} }

View File

@ -1,79 +1,79 @@
package br.com.rjconsultores.auditador.auditadores; package br.com.rjconsultores.auditador.auditadores;
import java.lang.reflect.AccessibleObject; import java.lang.reflect.AccessibleObject;
import br.com.rjconsultores.auditador.annotations.AuditarAtributo; import br.com.rjconsultores.auditador.annotations.AuditarAtributo;
import br.com.rjconsultores.auditador.annotations.AuditarClasse; import br.com.rjconsultores.auditador.annotations.AuditarClasse;
import br.com.rjconsultores.auditador.annotations.AuditarEntidade; import br.com.rjconsultores.auditador.annotations.AuditarEntidade;
import br.com.rjconsultores.auditador.annotations.AuditarID; import br.com.rjconsultores.auditador.annotations.AuditarID;
import br.com.rjconsultores.auditador.annotations.AuditarIDComposta; import br.com.rjconsultores.auditador.annotations.AuditarIDComposta;
import br.com.rjconsultores.auditador.annotations.AuditarLista; import br.com.rjconsultores.auditador.annotations.AuditarLista;
import br.com.rjconsultores.auditador.annotations.AuditarMetodo; import br.com.rjconsultores.auditador.annotations.AuditarMetodo;
import br.com.rjconsultores.auditador.annotations.NaoAuditar; import br.com.rjconsultores.auditador.annotations.NaoAuditar;
class ExtrairAnotacao { class ExtrairAnotacao {
protected AuditarClasse extrair(Class<?> classe) { protected AuditarClasse extrair(Class<?> classe) {
if(classe == null) { if(classe == null) {
return null; return null;
} }
return classe.getAnnotation(AuditarClasse.class); return classe.getAnnotation(AuditarClasse.class);
} }
protected AuditarAtributo extrairAuditarAtributo(AccessibleObject campo) { protected AuditarAtributo extrairAuditarAtributo(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarAtributo.class); return campo.getAnnotation(AuditarAtributo.class);
} }
protected AuditarEntidade extrairAuditarEntidade(AccessibleObject campo) { protected AuditarEntidade extrairAuditarEntidade(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarEntidade.class); return campo.getAnnotation(AuditarEntidade.class);
} }
protected AuditarID extrairAuditarID(AccessibleObject campo) { protected AuditarID extrairAuditarID(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarID.class); return campo.getAnnotation(AuditarID.class);
} }
protected AuditarIDComposta extrairAuditarIDComposta(AccessibleObject campo) { protected AuditarIDComposta extrairAuditarIDComposta(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarIDComposta.class); return campo.getAnnotation(AuditarIDComposta.class);
} }
protected AuditarLista extrairAuditarLista(AccessibleObject campo) { protected AuditarLista extrairAuditarLista(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarLista.class); return campo.getAnnotation(AuditarLista.class);
} }
protected NaoAuditar extrairNaoAuditar(AccessibleObject campo) { protected NaoAuditar extrairNaoAuditar(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(NaoAuditar.class); return campo.getAnnotation(NaoAuditar.class);
} }
protected AuditarMetodo extrairAuditarMetodo(AccessibleObject campo) { protected AuditarMetodo extrairAuditarMetodo(AccessibleObject campo) {
if(campo == null) { if(campo == null) {
return null; return null;
} }
campo.setAccessible(true); campo.setAccessible(true);
return campo.getAnnotation(AuditarMetodo.class); return campo.getAnnotation(AuditarMetodo.class);
} }
} }

View File

@ -1,16 +1,16 @@
package br.com.rjconsultores.auditador.enums; package br.com.rjconsultores.auditador.enums;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
public enum AuditadorTipoAlteracao { public enum AuditadorTipoAlteracao {
INCLUSAO, INCLUSAO,
ALTERACAO, ALTERACAO,
EXCLUSAO; EXCLUSAO;
public static List<AuditadorTipoAlteracao> getList() { public static List<AuditadorTipoAlteracao> getList() {
return Arrays.asList(values()); return Arrays.asList(values());
} }
} }

View File

@ -1,8 +1,8 @@
package br.com.rjconsultores.auditador.enums; package br.com.rjconsultores.auditador.enums;
public enum TipoExtracaoDados { public enum TipoExtracaoDados {
ATRIBUTO, ATRIBUTO,
METODO; METODO;
} }

View File

@ -1,11 +1,11 @@
package br.com.rjconsultores.auditador.exceptions; package br.com.rjconsultores.auditador.exceptions;
public class AuditadorException extends RuntimeException { public class AuditadorException extends RuntimeException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public AuditadorException(String message, Throwable throwable) { public AuditadorException(String message, Throwable throwable) {
super(message, throwable); super(message, throwable);
} }
} }

View File

@ -1,33 +1,33 @@
package br.com.rjconsultores.auditador.interfaces; package br.com.rjconsultores.auditador.interfaces;
/** /**
* Interface que deverá ser implementada quando o objeto for auditado, interface estende a interface Cloneable. * Interface que deverá ser implementada quando o objeto for auditado, interface estende a interface Cloneable.
* *
* @author wilian * @author wilian
* *
* @param <T> * @param <T>
*/ */
public interface Auditavel<T> extends Cloneable { 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 metodo logo apos recuperar o objeto do banco de dados. * 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 metodo logo apos recuperar o objeto do banco de dados.
* *
* @throws CloneNotSupportedException * @throws CloneNotSupportedException
*/ */
public void clonar() throws CloneNotSupportedException; public void clonar() throws CloneNotSupportedException;
/** /**
* Apos executar o metodo "clonar" retorna o objeto clonado. * Apos executar o metodo "clonar" retorna o objeto clonado.
* *
* @return * @return
* @throws CloneNotSupportedException * @throws CloneNotSupportedException
*/ */
public T getCloneObject() throws CloneNotSupportedException; public T getCloneObject() throws CloneNotSupportedException;
/** /**
* Metodo que descreve informações do objeto quando o registro e criado/incluido/excluido. * Metodo que descreve informações do objeto quando o registro e criado/incluido/excluido.
* @return * @return
*/ */
public String getTextoInclusaoExclusao(); public String getTextoInclusaoExclusao();
} }

View File

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

View File

@ -1,97 +1,97 @@
package br.com.rjconsultores.auditador.model; package br.com.rjconsultores.auditador.model;
import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao; import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao;
public class AuditadorObjects implements Cloneable { public class AuditadorObjects implements Cloneable {
private String valorAnterior; private String valorAnterior;
private String valorNovo; private String valorNovo;
private String campoAlterado; private String campoAlterado;
private String classeAlterada; private String classeAlterada;
private String classePrincipal; private String classePrincipal;
private String tela; private String tela;
private AuditadorTipoAlteracao tipoAlteracao; private AuditadorTipoAlteracao tipoAlteracao;
private String idAuditado; private String idAuditado;
public String getValorAnterior() { public String getValorAnterior() {
return valorAnterior; return valorAnterior;
} }
public void setValorAnterior(String valorAnterior) { public void setValorAnterior(String valorAnterior) {
this.valorAnterior = valorAnterior; this.valorAnterior = valorAnterior;
} }
public String getValorNovo() { public String getValorNovo() {
return valorNovo; return valorNovo;
} }
public void setValorNovo(String valorNovo) { public void setValorNovo(String valorNovo) {
this.valorNovo = valorNovo; this.valorNovo = valorNovo;
} }
public String getCampoAlterado() { public String getCampoAlterado() {
return campoAlterado; return campoAlterado;
} }
public void setCampoAlterado(String campoAlterado) { public void setCampoAlterado(String campoAlterado) {
this.campoAlterado = campoAlterado; this.campoAlterado = campoAlterado;
} }
public String getClasseAlterada() { public String getClasseAlterada() {
return classeAlterada; return classeAlterada;
} }
public void setClasseAlterada(String classeAlterada) { public void setClasseAlterada(String classeAlterada) {
this.classeAlterada = classeAlterada; this.classeAlterada = classeAlterada;
} }
public String getClassePrincipal() { public String getClassePrincipal() {
return classePrincipal; return classePrincipal;
} }
public void setClassePrincipal(String classePrincipal) { public void setClassePrincipal(String classePrincipal) {
this.classePrincipal = classePrincipal; this.classePrincipal = classePrincipal;
} }
public String getTela() { public String getTela() {
return tela; return tela;
} }
public void setTela(String tela) { public void setTela(String tela) {
this.tela = tela; this.tela = tela;
} }
public AuditadorTipoAlteracao getTipoAlteracao() { public AuditadorTipoAlteracao getTipoAlteracao() {
return tipoAlteracao; return tipoAlteracao;
} }
public void setTipoAlteracao(AuditadorTipoAlteracao tipoAlteracao) { public void setTipoAlteracao(AuditadorTipoAlteracao tipoAlteracao) {
this.tipoAlteracao = tipoAlteracao; this.tipoAlteracao = tipoAlteracao;
} }
public String getIdAuditado() { public String getIdAuditado() {
return idAuditado; return idAuditado;
} }
public void setIdAuditado(String idAuditado) { public void setIdAuditado(String idAuditado) {
this.idAuditado = idAuditado; this.idAuditado = idAuditado;
} }
@Override @Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
return super.clone(); return super.clone();
} }
public AuditadorObjects clonar() throws CloneNotSupportedException { public AuditadorObjects clonar() throws CloneNotSupportedException {
return (AuditadorObjects) this.clone(); return (AuditadorObjects) this.clone();
} }
@Override @Override
public String toString() { public String toString() {
return "AuditadorObjects [valorAnterior=" + valorAnterior + ", valorNovo=" + valorNovo + ", campoAlterado=" return "AuditadorObjects [valorAnterior=" + valorAnterior + ", valorNovo=" + valorNovo + ", campoAlterado="
+ campoAlterado + ", classeAlterada=" + classeAlterada + ", classePrincipal=" + classePrincipal + campoAlterado + ", classeAlterada=" + classeAlterada + ", classePrincipal=" + classePrincipal
+ ", tela=" + tela + ", tipoAlteracao=" + tipoAlteracao + ", idAuditado=" + ", tela=" + tela + ", tipoAlteracao=" + tipoAlteracao + ", idAuditado="
+ idAuditado + "]"; + idAuditado + "]";
} }
} }