Refactor ResourceCapableCacheDataImporterExporter to use ObjectAwareUtils to initialize the import & export ResourceResolvers with the ApplicationContext, Environment and ResourceLoader managed objects if present.
Resolves gh-92.
This commit is contained in:
@@ -21,6 +21,8 @@ import java.io.File;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.geode.cache.GemFireCache;
|
||||
import org.apache.geode.cache.Region;
|
||||
@@ -56,6 +58,7 @@ import org.springframework.geode.core.io.support.FileResourceWriter;
|
||||
import org.springframework.geode.core.io.support.ResourceLoaderResourceResolver;
|
||||
import org.springframework.geode.core.io.support.ResourcePrefix;
|
||||
import org.springframework.geode.core.io.support.ResourceUtils;
|
||||
import org.springframework.geode.core.util.ObjectAwareUtils;
|
||||
import org.springframework.geode.data.AbstractCacheDataImporterExporter;
|
||||
import org.springframework.geode.data.CacheDataImporterExporter;
|
||||
import org.springframework.geode.expression.SmartEnvironmentAccessor;
|
||||
@@ -126,51 +129,15 @@ public abstract class ResourceCapableCacheDataImporterExporter extends AbstractC
|
||||
setResourceReader(initialize(getResourceReader(), ByteArrayResourceReader::new));
|
||||
setResourceWriter(initialize(getResourceWriter(), FileResourceWriter::new));
|
||||
|
||||
initApplicationContext();
|
||||
initEnvironment();
|
||||
initResourceLoader();
|
||||
Stream.of(getExportResourceResolver(), getImportResourceResolver())
|
||||
.forEach(this.newCompositeObjectAwareInitializer());
|
||||
}
|
||||
|
||||
private void initApplicationContext() {
|
||||
Consumer<Object> newCompositeObjectAwareInitializer() {
|
||||
|
||||
getApplicationContext().ifPresent(applicationContext -> {
|
||||
|
||||
if (this.exportResourceResolver instanceof ApplicationContextAware) {
|
||||
((ApplicationContextAware) this.exportResourceResolver).setApplicationContext(applicationContext);
|
||||
}
|
||||
|
||||
if (this.importResourceResolver instanceof ApplicationContextAware) {
|
||||
((ApplicationContextAware) this.importResourceResolver).setApplicationContext(applicationContext);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initEnvironment() {
|
||||
|
||||
getEnvironment().ifPresent(environment -> {
|
||||
|
||||
if (this.exportResourceResolver instanceof EnvironmentAware) {
|
||||
((EnvironmentAware) this.exportResourceResolver).setEnvironment(environment);
|
||||
}
|
||||
|
||||
if (this.importResourceResolver instanceof EnvironmentAware) {
|
||||
((EnvironmentAware) this.importResourceResolver).setEnvironment(environment);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initResourceLoader() {
|
||||
|
||||
getResourceLoader().ifPresent(resourceLoader -> {
|
||||
|
||||
if (this.exportResourceResolver instanceof ResourceLoaderAware) {
|
||||
((ResourceLoaderAware) this.exportResourceResolver).setResourceLoader(resourceLoader);
|
||||
}
|
||||
|
||||
if (this.importResourceResolver instanceof ResourceLoaderAware) {
|
||||
((ResourceLoaderAware) this.importResourceResolver).setResourceLoader(resourceLoader);
|
||||
}
|
||||
});
|
||||
return ObjectAwareUtils.applicationContextAwareObjectInitializer(getApplicationContext().orElse(null))
|
||||
.andThen(ObjectAwareUtils.environmentAwareObjectInitializer(getEnvironment().orElse(null)))
|
||||
.andThen(ObjectAwareUtils.resourceLoaderAwareObjectInitializer(getResourceLoader().orElse(null)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -116,7 +116,8 @@ public class ResourceCapableCacheDataImporterExporterUnitTests {
|
||||
|
||||
ResourceWriter mockResourceWriter = mock(ResourceWriter.class);
|
||||
|
||||
ResourceCapableCacheDataImporterExporter importerExporter = new TestResourceCapableCacheDataImporterExporter();
|
||||
ResourceCapableCacheDataImporterExporter importerExporter =
|
||||
spy(new TestResourceCapableCacheDataImporterExporter());
|
||||
|
||||
importerExporter.setApplicationContext(mockApplicationContext);
|
||||
importerExporter.setEnvironment(mockEnvironment);
|
||||
@@ -133,6 +134,7 @@ public class ResourceCapableCacheDataImporterExporterUnitTests {
|
||||
assertThat(importerExporter.getResourceReader()).isEqualTo(mockResourceReader);
|
||||
assertThat(importerExporter.getResourceWriter()).isEqualTo(mockResourceWriter);
|
||||
|
||||
verify(importerExporter, times(1)).newCompositeObjectAwareInitializer();
|
||||
verify(mockExportResourceResolver, times(1)).setApplicationContext(eq(mockApplicationContext));
|
||||
verify(mockExportResourceResolver, times(1)).setEnvironment(eq(mockEnvironment));
|
||||
verify(mockExportResourceResolver, times(1)).setResourceLoader(eq(mockResourceLoader));
|
||||
@@ -153,7 +155,8 @@ public class ResourceCapableCacheDataImporterExporterUnitTests {
|
||||
ApplicationContextAndResourceLoaderAwareImportResourceResolver mockImportResourceResolver =
|
||||
mock(ApplicationContextAndResourceLoaderAwareImportResourceResolver.class);
|
||||
|
||||
ResourceCapableCacheDataImporterExporter importerExporter = new TestResourceCapableCacheDataImporterExporter();
|
||||
ResourceCapableCacheDataImporterExporter importerExporter =
|
||||
spy(new TestResourceCapableCacheDataImporterExporter());
|
||||
|
||||
importerExporter.setApplicationContext(mockApplicationContext);
|
||||
importerExporter.setEnvironment(mockEnvironment);
|
||||
@@ -173,6 +176,7 @@ public class ResourceCapableCacheDataImporterExporterUnitTests {
|
||||
assertThat(importerExporter.getResourceReader()).isInstanceOf(ByteArrayResourceReader.class);
|
||||
assertThat(importerExporter.getResourceWriter()).isInstanceOf(FileResourceWriter.class);
|
||||
|
||||
verify(importerExporter, times(1)).newCompositeObjectAwareInitializer();
|
||||
verify(mockImportResourceResolver, times(1)).setApplicationContext(eq(mockApplicationContext));
|
||||
verify(mockImportResourceResolver, never()).setResourceLoader(any());
|
||||
verifyNoMoreInteractions(mockImportResourceResolver);
|
||||
@@ -846,24 +850,24 @@ public class ResourceCapableCacheDataImporterExporterUnitTests {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@NonNull @Override
|
||||
protected String getResourcePath() {
|
||||
@Override
|
||||
protected @NonNull String getResourcePath() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static class TestExportResourceResolver extends AbstractExportResourceResolver {
|
||||
|
||||
@NonNull @Override
|
||||
protected String getResourcePath() {
|
||||
@Override
|
||||
protected @NonNull String getResourcePath() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static class TestImportResourceResolver extends AbstractImportResourceResolver {
|
||||
|
||||
@NonNull @Override
|
||||
protected String getResourcePath() {
|
||||
@Override
|
||||
protected @NonNull String getResourcePath() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user