diff --git a/pom.xml b/pom.xml
new file mode 100644
index 000000000..5a467c501
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+ br.com.rjconsultores
+ Auditador
+ 0.0.1-SNAPSHOT
+
+
+ src/main/java
+ src/test/java
+
+
+ maven-compiler-plugin
+ 3.3
+
+ 1.6
+ 1.6
+
+
+
+ ${project.artifactId}
+
+
+
+
+ commons-lang
+ commons-lang
+ 2.2
+
+
+
\ No newline at end of file
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java
new file mode 100644
index 000000000..0f9dd7381
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarAtributo.java
@@ -0,0 +1,15 @@
+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;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarAtributo {
+
+ String nome() default "";
+ String pattern() default "";
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java
new file mode 100644
index 000000000..3211c6b90
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarClasse.java
@@ -0,0 +1,16 @@
+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;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarClasse {
+
+ String nome();
+ String campoEmpresa() default "";
+ String tela();
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java
new file mode 100644
index 000000000..b6fda7ae8
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarEntidade.java
@@ -0,0 +1,15 @@
+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;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarEntidade {
+
+ String nome() default "";
+ boolean auditarCampos() default false;
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java
new file mode 100644
index 000000000..1b40ab82f
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarID.java
@@ -0,0 +1,12 @@
+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;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarID {
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java
new file mode 100644
index 000000000..f0710b180
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/AuditarLista.java
@@ -0,0 +1,15 @@
+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;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AuditarLista {
+
+ String nome() default "";
+ boolean auditarEntidades() default false;
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java b/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java
new file mode 100644
index 000000000..9136cbf03
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/annotations/NaoAuditar.java
@@ -0,0 +1,12 @@
+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;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface NaoAuditar {
+
+}
diff --git a/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java b/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java
new file mode 100644
index 000000000..21ed54d05
--- /dev/null
+++ b/src/main/java/br/com/rjconsultores/auditador/auditadores/Auditador.java
@@ -0,0 +1,384 @@
+package br.com.rjconsultores.auditador.auditadores;
+
+import java.lang.reflect.Field;
+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.AuditarLista;
+import br.com.rjconsultores.auditador.annotations.NaoAuditar;
+import br.com.rjconsultores.auditador.enums.AuditadorTipoAlteracao;
+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;
+
+public class Auditador {
+
+ AuditadorAtributo auditadorAtributo;
+ AuditadorEntidade auditadorEntidade;
+ AuditadorList auditadorList;
+ ExtrairAnotacao extrairAnotacao;
+
+ private AuditadorObjects padrao;
+
+ 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;
+ }
+
+ public List auditar(Object original, Object novo) {
+ List lsRetorno = new ArrayList();
+ try {
+
+ if(isObjetosNulos(original, novo) || !iniciarObjetoPadrao(novo != null ? novo : original, original == null)) {
+ 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);
+ }
+ }
+
+ public List auditarList(Object objeto, String nomeCampoListAuditar, List