diff --git a/pom.xml b/pom.xml
index 6af279bf1..164b56a7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
@@ -36,4 +37,45 @@
2.2
-
\ No newline at end of file
+
+=======
+
+ 4.0.0
+ br.com.rjconsultores
+ Auditador
+ 1.0.0
+
+
+
+ rj-releases
+ http://52.5.53.15:8081/nexus/content/repositories/releases/
+
+
+
+
+ src/main/java
+ src/test/java
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+
+ ${project.artifactId}
+
+
+
+
+ commons-lang
+ commons-lang
+ 2.2
+
+
+
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java
index 27b3a81ce..74dc411a2 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType;
@@ -26,3 +27,33 @@ public @interface AuditarAtributo {
String pattern() default "dd/MM/yyyy HH:mm";
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.ElementType;
+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 "";
+
+ /**
+ * 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";
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java
index 2611fac44..2903ed253 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType;
@@ -33,3 +34,40 @@ public @interface AuditarClasse {
*/
TipoExtracaoDados tipoExtracaoDados() default TipoExtracaoDados.ATRIBUTO;
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import br.com.rjconsultores.auditador.enums.TipoExtracaoDados;
+
+/**
+ * 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();
+
+ /**
+ * Atributo para indicar qual tela que o objeto será auditado.
+ */
+ String tela();
+
+ /**
+ * Define se as informações serão extraídas pelo atributo ou metodo.
+ * @return
+ */
+ TipoExtracaoDados tipoExtracaoDados() default TipoExtracaoDados.ATRIBUTO;
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java
index ae2370025..a18272c6e 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention;
@@ -18,3 +19,25 @@ public @interface AuditarEntidade {
String nome() default "";
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Anotação responsável que indicará que o atributo é uma entidade e seus atributos deverão ser auditados individualmente.
+ *
+ * @author wilian
+ *
+ */
+@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 "";
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java
index 6ab8916f9..76e7384a9 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention;
@@ -16,3 +17,23 @@ public @interface AuditarID {
String pattern() default "";
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Anotação responsável para indicar qual o atributo que representa a chave primária da classe.
+ *
+ * @author wilian
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarID {
+
+ String nome() default "";
+ String pattern() default "";
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarIDComposta.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarIDComposta.java
index 143666170..9797354fe 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarIDComposta.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarIDComposta.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention;
@@ -13,3 +14,20 @@ import java.lang.annotation.RetentionPolicy;
public @interface AuditarIDComposta {
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Anotação responsável para indicar qual o atributo que representa a chave primária composta da classe.
+ *
+ * @author wilian
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarIDComposta {
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java
index 0e852110e..bcf09fadc 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention;
@@ -24,3 +25,31 @@ public @interface AuditarLista {
boolean auditarEntidades() default false;
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Anotação responsável para auditar o campos que são listas.
+ *
+ * @author wilian
+ *
+ */
+@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;
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarMetodo.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarMetodo.java
index 2a472fd5f..67ef6d970 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarMetodo.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarMetodo.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.ElementType;
@@ -26,3 +27,33 @@ public @interface AuditarMetodo {
String pattern() default "dd/MM/yyyy HH:mm";
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Anotação utilizada para methodos.
+ *
+ * @author wilian
+ *
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+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.
+ */
+ String nome() 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";
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java b/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java
index bc8d73c4f..8e6d58896 100644
--- a/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.annotations;
import java.lang.annotation.Retention;
@@ -13,3 +14,20 @@ import java.lang.annotation.RetentionPolicy;
public @interface NaoAuditar {
}
+=======
+package br.com.rjconsultores.auditador.annotations;
+
+import java.lang.annotation.Retention;
+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 são auditados.
+ *
+ * @author wilian
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface NaoAuditar {
+
+}
+>>>>>>> cdb83713aef1ad0033f6129385ee0bda81737f2d
diff --git a/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java b/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java
index 3219b0531..e1524a476 100644
--- a/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java
+++ b/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package br.com.rjconsultores.auditador.auditadores;
import java.lang.reflect.AccessibleObject;
@@ -626,3 +627,633 @@ public class Auditador {
}
}
+=======
+package br.com.rjconsultores.auditador.auditadores;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.commons.lang.StringUtils;
+
+import br.com.rjconsultores.auditador.annotations.AuditarAtributo;
+import br.com.rjconsultores.auditador.annotations.AuditarClasse;
+import br.com.rjconsultores.auditador.annotations.AuditarEntidade;
+import br.com.rjconsultores.auditador.annotations.AuditarID;
+import br.com.rjconsultores.auditador.annotations.AuditarIDComposta;
+import br.com.rjconsultores.auditador.annotations.AuditarLista;
+import br.com.rjconsultores.auditador.annotations.AuditarMetodo;
+import br.com.rjconsultores.auditador.annotations.NaoAuditar;
+import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao;
+import br.com.rjconsultores.auditador.enums.TipoExtracaoDados;
+import br.com.rjconsultores.auditador.exceptions.AuditadorException;
+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;
+ AuditadorEntidade auditadorEntidade;
+ AuditadorList auditadorList;
+ ExtrairAnotacao extrairAnotacao;
+
+ private AuditadorObjects padrao;
+ private TipoExtracaoDados tipoExtracaoDados;
+
+ private Auditador() {
+ super();
+ }
+
+ public static Auditador getInstance( ) {
+ Auditador auditar = new Auditador();
+ auditar.auditadorAtributo = new AuditadorAtributo(auditar);
+ auditar.auditadorEntidade = new AuditadorEntidade(auditar);
+ auditar.auditadorList = new AuditadorList(auditar);
+ auditar.extrairAnotacao = new ExtrairAnotacao();
+ return auditar;
+ }
+
+ /**
+ * Responsável por auditar os registros.
+ *
+ * @param original
+ * @param novo
+ * @param empresaId
+ * @return
+ */
+ public List auditar(Object original, Object novo) {
+ List lsRetorno = new ArrayList();
+ try {
+
+ if(isObjetosNulos(original, novo) || !iniciarObjetoPadrao(novo != null ? novo : original, original == null ? AuditadorTipoAlteracao.INCLUSAO : AuditadorTipoAlteracao.ALTERACAO)) {
+ return lsRetorno;
+ }
+
+ AuditadorObjects objectNovo = auditarObjetoNovo(null, original, novo);
+ if(objectNovo != null) {
+ lsRetorno.add(objectNovo);
+ return lsRetorno;
+ }
+
+ lsRetorno.addAll(auditarCampos(original, novo, padrao.getClasseAlterada()));
+ return lsRetorno;
+ } catch (Exception e) {
+ throw new AuditadorException(e.getMessage(), e);
+ } catch (Throwable e) {
+ throw new AuditadorException(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * Responsável por auditar os registros filhos do objeto de referencia.
+ *
+ * @param objetoReferencia
+ * @param original
+ * @param novo
+ * @return
+ */
+ public List auditar(Object objetoReferencia, Object original, Object novo) {
+ List lsRetorno = new ArrayList();
+ try {
+
+ if(!iniciarObjetoPadrao(objetoReferencia, AuditadorTipoAlteracao.ALTERACAO)) {
+ return lsRetorno;
+ }
+
+ AuditadorObjects objectNovo = auditarObjetoNovo(null, original, novo);
+ if(objectNovo != null) {
+ lsRetorno.add(objectNovo);
+ return lsRetorno;
+ }
+
+ lsRetorno.addAll(auditarCampos(original, novo, original != null ? original.getClass().getSimpleName() : novo.getClass().getSimpleName()));
+ return lsRetorno;
+ } catch (Exception e) {
+ throw new AuditadorException(e.getMessage(), e);
+ } catch (Throwable e) {
+ throw new AuditadorException(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * 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 auditarList(Object objeto, String nomeCampoListAuditar, List> original, List> novo) {
+ List lsRetorno = new ArrayList();
+ try {
+ if(!iniciarObjetoPadrao(objeto, AuditadorTipoAlteracao.ALTERACAO) || isObjetosNulos(original, novo)) {
+ return lsRetorno;
+ }
+
+ Class> classe = objeto.getClass();
+
+ List camposAuditaveis = extrairCamposAuditaveis(classe);
+ for (AccessibleObject campo : camposAuditaveis) {
+ campo.setAccessible(true);
+ String nome = extrairDeclaredNomeCampo(campo);
+
+ if(!nome.equals(nomeCampoListAuditar)) {
+ continue;
+ }
+
+ NaoAuditar naoAuditar = extrairAnotacao.extrairNaoAuditar(campo);
+ if(naoAuditar != null) {
+ continue;
+ }
+
+ List