Skip to content

Commit

Permalink
SHIBUI-1262(1306) WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Jun 5, 2019
1 parent 69a404a commit 50896d7
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Configuration
public class EntitiesVersioningConfiguration {

@PersistenceContext
private EntityManager entityManager;

@Bean
EntityDescriptorVersionService entityDescriptorVersionService(EntityManager entityManager) {
EntityDescriptorVersionService entityDescriptorVersionService() {
return new EnversEntityDescriptorVersionService(entityManager);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@
public class PrincipalAwareRevisionEntity extends DefaultTrackingModifiedEntitiesRevisionEntity {

private String principalUserName;

public String idAsString() {
return String.valueOf(getId());
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
package edu.internet2.tier.shibboleth.admin.ui.service;

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor;
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation;
import edu.internet2.tier.shibboleth.admin.ui.domain.versioning.Version;
import edu.internet2.tier.shibboleth.admin.ui.envers.PrincipalAwareRevisionEntity;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.hibernate.envers.RevisionEntity;
import org.hibernate.envers.query.AuditEntity;
import org.springframework.data.jpa.repository.JpaContext;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
* Hibernate Envers based implementation of {@link EntityDescriptorVersionService}.
Expand All @@ -15,14 +25,31 @@ public class EnversEntityDescriptorVersionService implements EntityDescriptorVer

private AuditReader auditReader;

public EnversEntityDescriptorVersionService(EntityManager em) {
private EntityManager entityManager;

this.auditReader = AuditReaderFactory.get(em);
public EnversEntityDescriptorVersionService(EntityManager entityManager) {
this.entityManager = entityManager;
}

@Override
public List<Version> findVersionsForEntityDescriptor(String resourceId) {
return null;
List revs = AuditReaderFactory.get(entityManager).createQuery()
.forRevisionsOfEntity(EntityDescriptor.class, false, false)
.add(AuditEntity.property("resourceId").eq(resourceId))
.getResultList();

//TODO: sort
Object revEntities = revs.stream()
.map(it -> (PrincipalAwareRevisionEntity)((Object[])it)[1])
.map(it -> {
return new Version(((PrincipalAwareRevisionEntity) it).idAsString(),
((PrincipalAwareRevisionEntity) it).getPrincipalUserName(),
((PrincipalAwareRevisionEntity) it).getRevisionDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
})
.collect(Collectors.toList());


return (List<Version>)revEntities;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package edu.internet2.tier.shibboleth.admin.ui.service

import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.EntitiesVersioningConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.ContactRepresentation
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
import org.springframework.test.context.ContextConfiguration
import org.springframework.transaction.PlatformTransactionManager
import spock.lang.Specification

import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.*
import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.doInExplicitTransaction

@DataJpaTest
@ContextConfiguration(classes = [CoreShibUiConfiguration, InternationalizationConfiguration, TestConfiguration, SearchConfiguration, EntitiesVersioningConfiguration])
@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"])
@EntityScan("edu.internet2.tier.shibboleth.admin.ui")
class EnversEntityDescriptorVersionServiceTests extends Specification {

@Autowired
EntityDescriptorVersionService entityDescriptorVersionService

@Autowired
EntityDescriptorRepository entityDescriptorRepository

@Autowired
EntityDescriptorService entityDescriptorService

@Autowired
PlatformTransactionManager txMgr

def "temp test"() {
def representation = new EntityDescriptorRepresentation().with {
it.contacts = [new ContactRepresentation(type: 'administrative', name: 'name', emailAddress: 'test@test')]
it
}
EntityDescriptor ed = entityDescriptorService.createDescriptorFromRepresentation(representation)
ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}
entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId)

ed.entityID = "Entity ID"
ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}

def versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId)

expect:
true
}
}

0 comments on commit 50896d7

Please sign in to comment.