Skip to content

Commit

Permalink
https://github.com/javers/javers/issues/417
Browse files Browse the repository at this point in the history
  • Loading branch information
bartoszwalacik committed Sep 4, 2016
1 parent 0c93d36 commit ed2c978
Show file tree
Hide file tree
Showing 13 changed files with 125 additions and 67 deletions.
Expand Up @@ -9,7 +9,8 @@
import org.javers.repository.api.JaversRepository;
import org.javers.repository.mongo.MongoRepository;
import org.javers.spring.auditable.*;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -81,7 +82,12 @@ public CommitPropertiesProvider commitPropertiesProvider() {
}

@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
return new JaversAuditableRepositoryAspect(javers, authorProvider, commitPropertiesProvider());
public JaversAuditableAspect javersAuditableAspect(Javers javers, AuthorProvider authorProvider) {
return new JaversAuditableAspect(javers, authorProvider, commitPropertiesProvider());
}

@Bean
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect(Javers javers, AuthorProvider authorProvider) {
return new JaversSpringDataAuditableRepositoryAspect(javers, authorProvider, commitPropertiesProvider());
}
}
Expand Up @@ -12,7 +12,8 @@
import org.javers.repository.sql.JaversSqlRepository;
import org.javers.repository.sql.SqlRepositoryBuilder;
import org.javers.spring.auditable.*;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.javers.spring.jpa.JpaHibernateConnectionProvider;
import org.javers.spring.jpa.TransactionalJaversBuilder;
import org.slf4j.Logger;
Expand Down Expand Up @@ -110,7 +111,12 @@ public ConnectionProvider jpaConnectionProvider() {
}

@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
return new JaversAuditableRepositoryAspect(javers, authorProvider, commitPropertiesProvider);
public JaversAuditableAspect javersAuditableAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
return new JaversAuditableAspect(javers, authorProvider, commitPropertiesProvider());
}

@Bean
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
return new JaversSpringDataAuditableRepositoryAspect(javers, authorProvider, commitPropertiesProvider());
}
}
@@ -0,0 +1,45 @@
package org.javers.spring.auditable.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.javers.core.Javers;
import org.javers.spring.auditable.AuthorProvider;
import org.javers.spring.auditable.CommitPropertiesProvider;
import org.javers.spring.auditable.EmptyPropertiesProvider;

/**
* Commits all arguments passed to advised methods
* (only if the method exits normally, i.e. no Exception has been thrown).
*
* Spring @Transactional attributes (like noRollbackFor or noRollbackForClassName)
* have no effects on this aspect.
* <br/><br/>
*
* Creates the following @AfterReturning pointcuts:
* <ul>
* <li/>any method annotated with @JaversAuditable
* <li/>all save() and delete() methods of CrudRepositories with (class-level) @JaversSpringDataAuditable
* </ul>
*/
@Aspect
public class JaversAuditableAspect {
private final JaversCommitAdvice javersCommitAdvice;

public JaversAuditableAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
this(new JaversCommitAdvice(javers, authorProvider, commitPropertiesProvider) );
}

public JaversAuditableAspect(Javers javers, AuthorProvider authorProvider) {
this(javers, authorProvider, new EmptyPropertiesProvider());
}

JaversAuditableAspect(JaversCommitAdvice javersCommitAdvice) {
this.javersCommitAdvice = javersCommitAdvice;
}

@AfterReturning("@annotation(org.javers.spring.annotation.JaversAuditable)")
public void commitAdvice(JoinPoint pjp) {
javersCommitAdvice.commitMethodArguments(pjp);
}
}
@@ -1,4 +1,4 @@
package org.javers.spring.auditable.aspect;
package org.javers.spring.auditable.aspect.springdata;

import org.javers.core.Javers;
import org.javers.spring.auditable.AuthorProvider;
Expand Down
@@ -1,4 +1,4 @@
package org.javers.spring.auditable.aspect;
package org.javers.spring.auditable.aspect.springdata;

import org.springframework.data.repository.core.RepositoryMetadata;

Expand Down
@@ -1,4 +1,4 @@
package org.javers.spring.auditable.aspect;
package org.javers.spring.auditable.aspect.springdata;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
Expand All @@ -14,45 +14,23 @@
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.core.support.DefaultRepositoryMetadata;

/**
* Commits all arguments passed to advised methods
* (only if the method exits normally, i.e. no Exception has been thrown).
*
* Spring @Transactional attributes (like noRollbackFor or noRollbackForClassName)
* have no effects on this aspect.
* <br/><br/>
*
* Creates the following @AfterReturning pointcuts:
* <ul>
* <li/>any method annotated with @JaversAuditable
* <li/>all save() and delete() methods of CrudRepositories with (class-level) @JaversSpringDataAuditable
* </ul>
*/
@Aspect
public class JaversAuditableRepositoryAspect {
public class JaversSpringDataAuditableRepositoryAspect {
private final AuditChangeHandler saveHandler;
private final AuditChangeHandler deleteHandler;
private final JaversCommitAdvice javersCommitAdvice;

public JaversAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
public JaversSpringDataAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
this(new OnSaveAuditChangeHandler(javers, authorProvider, commitPropertiesProvider),
new OnDeleteAuditChangeHandler(javers, authorProvider, commitPropertiesProvider),
new JaversCommitAdvice(javers, authorProvider, commitPropertiesProvider) );
new OnDeleteAuditChangeHandler(javers, authorProvider, commitPropertiesProvider));
}

public JaversAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider) {
public JaversSpringDataAuditableRepositoryAspect(Javers javers, AuthorProvider authorProvider) {
this(javers, authorProvider, new EmptyPropertiesProvider());
}

JaversAuditableRepositoryAspect(AuditChangeHandler saveHandler, AuditChangeHandler deleteHandler, JaversCommitAdvice javersCommitAdvice) {
JaversSpringDataAuditableRepositoryAspect(AuditChangeHandler saveHandler, AuditChangeHandler deleteHandler) {
this.saveHandler = saveHandler;
this.deleteHandler = deleteHandler;
this.javersCommitAdvice = javersCommitAdvice;
}

@AfterReturning("@annotation(org.javers.spring.annotation.JaversAuditable)")
public void commitAdvice(JoinPoint pjp) {
javersCommitAdvice.commitMethodArguments(pjp);
}

@AfterReturning("execution(public * delete(..)) && this(org.springframework.data.repository.CrudRepository)")
Expand Down
@@ -1,4 +1,4 @@
package org.javers.spring.auditable.aspect;
package org.javers.spring.auditable.aspect.springdata;

import org.javers.core.Javers;
import org.javers.spring.auditable.AuthorProvider;
Expand All @@ -13,7 +13,7 @@
* Created by gessnerfl on 22.02.15.
*/
class OnDeleteAuditChangeHandler extends AbstractAuditChangeHandler {
public OnDeleteAuditChangeHandler(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
OnDeleteAuditChangeHandler(Javers javers, AuthorProvider authorProvider, CommitPropertiesProvider commitPropertiesProvider) {
super(javers, authorProvider, commitPropertiesProvider);
}

Expand Down
@@ -1,4 +1,4 @@
package org.javers.spring.auditable.aspect;
package org.javers.spring.auditable.aspect.springdata;

import org.javers.core.Javers;
import org.javers.spring.auditable.AuthorProvider;
Expand Down
Expand Up @@ -65,7 +65,6 @@ class JaversSpringDataAspectIntegrationTest extends Specification {
}
}


def "should create a new version on update via audited repository"() {
setup:
def o = new DummyObject("foo")
Expand Down
Expand Up @@ -2,14 +2,14 @@

import com.google.common.collect.ImmutableMap;
import org.javers.core.Javers;
import org.javers.core.commit.Commit;
import org.javers.repository.sql.ConnectionProvider;
import org.javers.repository.sql.JaversSqlRepository;
import org.javers.spring.annotation.JaversAuditable;
import org.javers.spring.annotation.JaversSpringDataAuditable;
import org.javers.spring.auditable.AuthorProvider;
import org.javers.spring.auditable.CommitPropertiesProvider;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.javers.spring.jpa.JpaHibernateConnectionProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
Expand Down Expand Up @@ -68,17 +68,14 @@ public DataSource dataSource() {
return dataSource;
}

@Bean
public JaversAuditableAspect javersAuditableAspect(Javers javers) {
return new JaversAuditableAspect(javers, authorProvider(), commitPropertiesProvider());
}

/**
* Enables Repository auto-audit aspect. <br/>
* <p>
* Use {@link JaversSpringDataAuditable}
* to annotate Spring Data Repositories
* or {@link JaversAuditable} for ordinary Repositories.
*/
@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect(Javers javers) {
return new JaversAuditableRepositoryAspect(javers, authorProvider(), commitPropertiesProvider());
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect(Javers javers) {
return new JaversSpringDataAuditableRepositoryAspect(javers, authorProvider(), commitPropertiesProvider());
}

/**
Expand Down
Expand Up @@ -6,7 +6,8 @@
import org.javers.repository.sql.JaversSqlRepository;
import org.javers.repository.sql.SqlRepositoryBuilder;
import org.javers.spring.auditable.AuthorProvider;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.javers.spring.jpa.JpaHibernateConnectionProvider;
import org.javers.spring.jpa.TransactionalJaversBuilder;
import org.springframework.context.annotation.Bean;
Expand All @@ -33,8 +34,13 @@ public Javers javers() {
}

@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect() {
return new JaversAuditableRepositoryAspect(javers(), authorProvider());
public JaversAuditableAspect javersAuditableAspect() {
return new JaversAuditableAspect(javers(), authorProvider());
}

@Bean
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect() {
return new JaversSpringDataAuditableRepositoryAspect(javers(), authorProvider());
}

@Bean
Expand Down
Expand Up @@ -9,9 +9,9 @@
import org.javers.repository.sql.SqlRepositoryBuilder;
import org.javers.spring.auditable.AuthorProvider;
import org.javers.spring.auditable.CommitPropertiesProvider;
import org.javers.spring.auditable.EmptyPropertiesProvider;
import org.javers.spring.auditable.SpringSecurityAuthorProvider;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.javers.spring.jpa.JpaHibernateConnectionProvider;
import org.javers.spring.jpa.TransactionalJaversBuilder;
import org.springframework.context.annotation.Bean;
Expand Down Expand Up @@ -64,15 +64,25 @@ public Javers javers() {
}

/**
* Enables Repository auto-audit aspect. <br/>
* Enables auto-audit aspect for ordinary repositories.<br/>
*
* Use {@link org.javers.spring.annotation.JaversAuditable}
* to mark data writing methods that you want to audit.
*/
@Bean
public JaversAuditableAspect javersAuditableAspect() {
return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider());
}

/**
* Enables auto-audit aspect for Spring Data repositories. <br/>
*
* Use {@link org.javers.spring.annotation.JaversSpringDataAuditable}
* to annotate Spring Data Repositories
* or {@link org.javers.spring.annotation.JaversAuditable} for ordinary Repositories.
* to annotate CrudRepositories you want to audit.
*/
@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect() {
return new JaversAuditableRepositoryAspect(javers(), authorProvider(), commitPropertiesProvider());
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect() {
return new JaversSpringDataAuditableRepositoryAspect(javers(), authorProvider(), commitPropertiesProvider());
}

/**
Expand Down
Expand Up @@ -9,7 +9,8 @@
import org.javers.spring.auditable.AuthorProvider;
import org.javers.spring.auditable.CommitPropertiesProvider;
import org.javers.spring.auditable.SpringSecurityAuthorProvider;
import org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect;
import org.javers.spring.auditable.aspect.JaversAuditableAspect;
import org.javers.spring.auditable.aspect.springdata.JaversSpringDataAuditableRepositoryAspect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
Expand Down Expand Up @@ -48,15 +49,25 @@ public MongoDatabase mongoDB() {
}

/**
* Enables Repository auto-audit aspect. <br/>
* Enables auto-audit aspect for ordinary repositories.<br/>
*
* Use {@link org.javers.spring.annotation.JaversAuditable}
* to mark data writing methods that you want to audit.
*/
@Bean
public JaversAuditableAspect javersAuditableAspect() {
return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider());
}

/**
* Enables auto-audit aspect for Spring Data repositories. <br/>
*
* Use {@link org.javers.spring.annotation.JaversSpringDataAuditable}
* to annotate Spring Data Repositories
* or {@link org.javers.spring.annotation.JaversAuditable} for ordinary Repositories.
* to annotate CrudRepositories you want to audit.
*/
@Bean
public JaversAuditableRepositoryAspect javersAuditableRepositoryAspect() {
return new JaversAuditableRepositoryAspect(javers(), authorProvider(), commitPropertiesProvider());
public JaversSpringDataAuditableRepositoryAspect javersSpringDataAuditableAspect() {
return new JaversSpringDataAuditableRepositoryAspect(javers(), authorProvider(), commitPropertiesProvider());
}

/**
Expand Down

0 comments on commit ed2c978

Please sign in to comment.