Polishing.
Renamed RepositoryPersister(Factory) to AggregatePersister(Factory). Issue #2558.
This commit is contained in:
@@ -38,7 +38,6 @@ import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.data.repository.core.CrudMethods;
|
||||
import org.springframework.data.repository.core.RepositoryInformation;
|
||||
import org.springframework.data.repository.core.RepositoryMetadata;
|
||||
import org.springframework.data.repository.core.support.DefaultCrudMethods;
|
||||
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
|
||||
import org.springframework.data.repository.support.Repositories;
|
||||
import org.springframework.data.repository.util.ReactiveWrapperConverters;
|
||||
@@ -127,7 +126,7 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
|
||||
Assert.notNull(repositories, "Repositories must not be null!");
|
||||
|
||||
RepositoryPersisterFactory persisterFactory = new RepositoryPersisterFactory(repositories);
|
||||
AggregatePersisterFactory persisterFactory = new AggregatePersisterFactory(repositories);
|
||||
|
||||
for (Resource resource : resources) {
|
||||
|
||||
@@ -173,43 +172,45 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
* @param object must not be {@literal null}.
|
||||
* @param persisterFactory must not be {@literal null}.
|
||||
*/
|
||||
private void persist(Object object, RepositoryPersisterFactory persisterFactory) {
|
||||
private void persist(Object object, AggregatePersisterFactory persisterFactory) {
|
||||
|
||||
RepositoryPersister persister = persisterFactory.getPersisterFor(object.getClass());
|
||||
AggregatePersister persister = persisterFactory.getPersisterFor(object.getClass());
|
||||
logger.debug(String.format("Persisting %s using repository %s", object, persister));
|
||||
persister.save(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory to create {@link RepositoryPersister} instances.
|
||||
* Factory to create {@link AggregatePersister} instances.
|
||||
*/
|
||||
static class RepositoryPersisterFactory {
|
||||
static class AggregatePersisterFactory {
|
||||
|
||||
private final Map<Class<?>, RepositoryPersister> persisters = new HashMap<>();
|
||||
private final Map<Class<?>, AggregatePersister> persisters = new HashMap<>();
|
||||
private final Repositories repositories;
|
||||
|
||||
public RepositoryPersisterFactory(Repositories repositories) {
|
||||
public AggregatePersisterFactory(Repositories repositories) {
|
||||
this.repositories = repositories;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain a {@link RepositoryPersister}.
|
||||
* Obtain a {@link AggregatePersister}.
|
||||
*
|
||||
* @param domainType
|
||||
* @return
|
||||
*/
|
||||
public RepositoryPersister getPersisterFor(Class<?> domainType) {
|
||||
public AggregatePersister getPersisterFor(Class<?> domainType) {
|
||||
return persisters.computeIfAbsent(domainType, this::createPersisterFor);
|
||||
}
|
||||
|
||||
private RepositoryPersister createPersisterFor(Class<?> domainType) {
|
||||
private AggregatePersister createPersisterFor(Class<?> domainType) {
|
||||
|
||||
RepositoryInformation repositoryInformation = repositories.getRequiredRepositoryInformation(domainType);
|
||||
Object repository = repositories.getRepositoryFor(domainType).orElseThrow(
|
||||
() -> new IllegalStateException(String.format("No repository found for domain type: %s", domainType)));
|
||||
|
||||
if (repositoryInformation.isReactiveRepository()) {
|
||||
return repository instanceof ReactiveCrudRepository ? new ReactiveCrudRepositoryPersister(repository)
|
||||
|
||||
return repository instanceof ReactiveCrudRepository //
|
||||
? new ReactiveCrudRepositoryPersister(repository) //
|
||||
: new ReflectiveReactivePersister(repositoryInformation, repository);
|
||||
}
|
||||
|
||||
@@ -224,7 +225,7 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
/**
|
||||
* Interface defining a save method to persist an object within a repository.
|
||||
*/
|
||||
interface RepositoryPersister {
|
||||
interface AggregatePersister {
|
||||
|
||||
/**
|
||||
* Saves the {@code object} in an appropriate repository.
|
||||
@@ -235,9 +236,9 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
}
|
||||
|
||||
/**
|
||||
* Reflection variant of a {@link RepositoryPersister}.
|
||||
* Reflection variant of a {@link AggregatePersister}.
|
||||
*/
|
||||
private static class ReflectivePersister implements RepositoryPersister {
|
||||
private static class ReflectivePersister implements AggregatePersister {
|
||||
|
||||
private final CrudMethods methods;
|
||||
private final Object repository;
|
||||
@@ -291,9 +292,9 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link RepositoryPersister} to operate with {@link CrudRepository}.
|
||||
* {@link AggregatePersister} to operate with {@link CrudRepository}.
|
||||
*/
|
||||
private static class CrudRepositoryPersister implements RepositoryPersister {
|
||||
private static class CrudRepositoryPersister implements AggregatePersister {
|
||||
|
||||
private final CrudRepository<Object, Object> repository;
|
||||
|
||||
@@ -316,9 +317,9 @@ public class ResourceReaderRepositoryPopulator implements RepositoryPopulator, A
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link RepositoryPersister} to operate with {@link ReactiveCrudRepository}.
|
||||
* {@link AggregatePersister} to operate with {@link ReactiveCrudRepository}.
|
||||
*/
|
||||
private static class ReactiveCrudRepositoryPersister implements RepositoryPersister {
|
||||
private static class ReactiveCrudRepositoryPersister implements AggregatePersister {
|
||||
|
||||
private final ReactiveCrudRepository<Object, Object> repository;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.repository.init;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Optional;
|
||||
@@ -29,7 +30,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.data.repository.Repository;
|
||||
import org.springframework.data.repository.core.RepositoryInformation;
|
||||
import org.springframework.data.repository.init.ResourceReaderRepositoryPopulator.RepositoryPersisterFactory;
|
||||
import org.springframework.data.repository.init.ResourceReaderRepositoryPopulator.AggregatePersisterFactory;
|
||||
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
|
||||
import org.springframework.data.repository.support.Repositories;
|
||||
|
||||
@@ -37,15 +38,15 @@ import org.springframework.data.repository.support.Repositories;
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class RepositoryPersisterFactoryUnitTests {
|
||||
class AggregatePersisterFactoryUnitTests {
|
||||
|
||||
@Mock Repositories repositories;
|
||||
@Mock RepositoryInformation repoInfo;
|
||||
RepositoryPersisterFactory factory;
|
||||
AggregatePersisterFactory factory;
|
||||
|
||||
@BeforeEach
|
||||
void beforeEach() {
|
||||
factory = new RepositoryPersisterFactory(repositories);
|
||||
factory = new AggregatePersisterFactory(repositories);
|
||||
}
|
||||
|
||||
@Test // GH-2558
|
||||
@@ -59,6 +60,7 @@ class RepositoryPersisterFactoryUnitTests {
|
||||
void usesCrudRepoPersisterForNonReactiveCrudRepo() {
|
||||
|
||||
CrudRepository<?, ?> crudRepository = mock(CrudRepository.class);
|
||||
|
||||
when(repositories.getRequiredRepositoryInformation(any())).thenReturn(repoInfo);
|
||||
when(repoInfo.isReactiveRepository()).thenReturn(false);
|
||||
when(repositories.getRepositoryFor(Mockito.any())).thenReturn(Optional.of(crudRepository));
|
||||
@@ -71,6 +73,7 @@ class RepositoryPersisterFactoryUnitTests {
|
||||
void usesReactiveCrudRepoPersisterForReactiveCrudRepo() {
|
||||
|
||||
ReactiveCrudRepository<?, ?> crudRepository = mock(ReactiveCrudRepository.class);
|
||||
|
||||
when(repositories.getRequiredRepositoryInformation(any())).thenReturn(repoInfo);
|
||||
when(repoInfo.isReactiveRepository()).thenReturn(true);
|
||||
when(repositories.getRepositoryFor(Mockito.any())).thenReturn(Optional.of(crudRepository));
|
||||
@@ -83,6 +86,7 @@ class RepositoryPersisterFactoryUnitTests {
|
||||
void usesReflectiveRepoPersisterForNonReactiveNonCrudRepo() {
|
||||
|
||||
Repository<?, ?> repository = mock(Repository.class);
|
||||
|
||||
when(repositories.getRequiredRepositoryInformation(any())).thenReturn(repoInfo);
|
||||
when(repoInfo.isReactiveRepository()).thenReturn(false);
|
||||
when(repositories.getRepositoryFor(Mockito.any())).thenReturn(Optional.of(repository));
|
||||
@@ -95,6 +99,7 @@ class RepositoryPersisterFactoryUnitTests {
|
||||
void usesReactiveReflectiveRepoPersisterForReactiveNonCrudRepo() {
|
||||
|
||||
Repository<?, ?> repository = mock(Repository.class);
|
||||
|
||||
when(repositories.getRequiredRepositoryInformation(any())).thenReturn(repoInfo);
|
||||
when(repoInfo.isReactiveRepository()).thenReturn(true);
|
||||
when(repositories.getRepositoryFor(Mockito.any())).thenReturn(Optional.of(repository));
|
||||
Reference in New Issue
Block a user