From f23675fec56393603e0c7de8241ca60c7497ed59 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 22 Jul 2020 12:41:32 -0700 Subject: [PATCH] Refactor ResourceCapableCacheDataImporterExporter to use ObjectAwareUtils to initialize the import & export ResourceResolvers with the ApplicationContext, Environment and ResourceLoader managed objects if present. Resolves gh-92. --- ...ourceCapableCacheDataImporterExporter.java | 51 ++++--------------- ...bleCacheDataImporterExporterUnitTests.java | 20 +++++--- 2 files changed, 21 insertions(+), 50 deletions(-) diff --git a/spring-geode/src/main/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporter.java b/spring-geode/src/main/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporter.java index b7d5bef9..cc091452 100644 --- a/spring-geode/src/main/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporter.java +++ b/spring-geode/src/main/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporter.java @@ -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 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))); } /** diff --git a/spring-geode/src/test/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporterUnitTests.java index faee5db8..56a044a3 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporterUnitTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/support/ResourceCapableCacheDataImporterExporterUnitTests.java @@ -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; } }