Polishing.

Renamed RepositoryPersister(Factory) to AggregatePersister(Factory).

Issue #2558.
This commit is contained in:
Oliver Drotbohm
2022-05-12 12:37:23 +02:00
parent f08c473b43
commit 042c1a0149
2 changed files with 29 additions and 23 deletions

View File

@@ -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;

View File

@@ -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));