Commit Graph

118 Commits

Author SHA1 Message Date
John Blum
1976a5f3e6 Refactor FileResourceWriter to throw a ResourceWriteException on a IOException.
Resolves gh-92.
2020-07-20 21:51:38 -07:00
John Blum
e60231e308 Refactor LifecycleAwareCacheDataImporterExporter to configure the ExportResourceResolver, ImportResourceResolver, ResourceLoader, ResourceReader and ResourceWriter on the decorated, wrapped CacheDataImporterExporter if the importer/exporter is ResourceLoaderAware and Resource capable.
Resolves gh-92.
2020-07-20 20:56:42 -07:00
John Blum
9aa818f398 Refactor ResourceCapableCacheDataImporterExporter to use setter injection instead of field injection.
Fix bug with FileSystemExportResourceResolve to append the file system path with the file system path separator.

Resolves gh-92.
2020-07-20 18:33:02 -07:00
John Blum
d38442af2a Refactor AbstractResourceWriter to throw a ResourcewWriteException on an IOException during doWrite(..).
Additionally, add a preProcess(:WritableResource) to process the WritableResource before data for the target Resource is written.

Resolves gh-92.
2020-07-20 18:25:05 -07:00
John Blum
94b16dafbe Refactor AbstractResourceReader to throw a ResourceReadException on an IOException during doRead(..).
Additionally, add a preProcess(:Resource) method to process the Resource before data from the target Resource is read.

Resolves gh-92.
2020-07-20 18:25:05 -07:00
John Blum
3ed0145ea7 Refactor ResourceUtils and rename getWritableResource(:Resource) as asStrictlyWritableResource(:Resource).
Add additional, lenient asWritableResource(:Resource) method return an Optional<WritableResource> if the given Resource is not an instance of WritableResource.

Resolves gh-92.
2020-07-20 17:43:41 -07:00
John Blum
2d1cc28188 Refactor JsonCacheDataImporterExporter to extend ResourceCapableCacheDataImporterExporter.
Change doImportInto(:Region) logic to make use of the ImportResourceResolver and ResourceReader on import.

Change doExportFrom(:Region) logic to make use of the ExportResourceResolver and ResourceWriter on export.

Resolves gh-92.
2020-07-20 13:25:26 -07:00
John Blum
e49ffa3d0f Add ResourceResolver implementation that resolves to a single (i.e. 'Singleton') Resource.
Resolve gh-92.
2020-07-20 12:41:34 -07:00
John Blum
681fd81ad2 Define new, abstract ResourceCapableCacheDataImporterExporter capable of handling dynamic Resources.
The primary concerns involve resolving Resources for import/export along with reading from and writing to any Resource using the Spring Resource abstraction.

Resolves gh-92.
2020-07-16 14:43:32 -07:00
John Blum
9a77049a76 Add new SpEL PropertyAccessor implementation to handle Spring Environment and EnvironmentCapable objects in safe way. 2020-07-10 14:59:57 -07:00
John Blum
a1ab9226eb Add Adapter class for a Spring Environment to use as a Map. 2020-07-10 14:59:57 -07:00
John Blum
d7f1091754 Add null-safe isReadable(:Resource) and isWritable(:Resource) utility methods.
Resolve gh-92.
2020-07-10 14:59:57 -07:00
John Blum
433d152c98 Add enumeration of supported Resource prefixes (e.g. classpath:).
Additionally, the enum defines operations on the Resource prefixes for convenience.

Resolves gh-92.
2020-07-10 14:59:57 -07:00
John Blum
251f762c2d Add initialize(..) operator to promote initialization safety.
The initialize operator replaces the common initialization safety pattern using an if-then-else or Java's ternary operator to ensure that a collaborator reference has bee properly initialized:

target = target != null ? target : new Target();
2020-07-08 14:19:06 -07:00
John Blum
2da58cc548 Add ResourceLoaderResourceResolver implementation using Spring's ResourceLoader to resolve Resources.
Resolves gh-92.
2020-07-08 14:18:48 -07:00
John Blum
7de8bde27a Define ResourceResolver interface encapsulating the algorithm or strategy for resolving Resources in different contexts.
Resolves gh-92.
2020-07-08 12:33:10 -07:00
John Blum
703cc43282 Add ResourceUtils abstract utility class containing operations for working with Resource objects and byte arrays.
Resolves gh-92.
2020-07-08 12:33:10 -07:00
John Blum
02f06500fc Add FileResourceWriter implementation to write data to a File-based Resource.
Resolves gh-92.
2020-07-07 11:24:50 -07:00
John Blum
edd0cab1af Add AbstractResourceWriter base class containing operations common to all ResourceWriters.
Resolves gh-92.
2020-07-07 11:23:26 -07:00
John Blum
d2591f7f8c Define ResourceWriter interface for writing data to a resource identified by a Resource handle.
Resolves gh-92.
2020-07-07 11:21:47 -07:00
John Blum
8ed0f24d8b Add ByteArrayResourceReader implementation that reads the data from a Resource (e.g. ClassPathResource) into a byte array.
Resolves gh-92.
2020-07-07 11:20:15 -07:00
John Blum
2b05bc5919 Add AbstractResourceReader base class defining operations common to all ResourceReaders.
Resolves gh-92.
2020-07-07 11:18:33 -07:00
John Blum
2437b0247e Define ResourceReader interface for reading data from a resource identified by a Resource handle.
Ressolves gh-92.
2020-07-07 11:16:36 -07:00
John Blum
01696b15af Refactor and polish JSON and base cache data import/export support. 2020-06-25 17:02:56 -07:00
John Blum
5318782bfb Fix bug to handle cache data import into client LOCAL Regions when no PDX type registry exists.
Resolves gh-91.
2020-06-10 23:16:11 -07:00
John Blum
98ee687a78 Include JacksonJsonToObjectConverter, Spring Converter implementation to convert/map JSON to a POJO using Jackson's ObjectMapper. 2020-06-10 22:24:50 -07:00
John Blum
dd439fe300 Include ObjectPdxInstanceAdapter class to adapt a regular Object (POJO) as an instance of PdxInstance. 2020-06-10 20:03:02 -07:00
John Blum
91a10a8ca1 Move PdxInstance identifier/identity resolution logic from JsonCacheDataImporterExporter to PdxInstanceWrapper. 2020-06-10 12:39:21 -07:00
John Blum
a0b4f60c77 Define Spring Converter interface extension to convert from JSON into an Object array (array of POJOs). 2020-06-10 12:21:35 -07:00
John Blum
2b2e03a764 Define Spring Converter interface extension to convert from JSON into an Object (POJO). 2020-06-10 12:21:35 -07:00
John Blum
db0a00e452 Rename toPdxArray(:byte[]) to toPdx(:byte[]). 2020-06-10 12:21:35 -07:00
John Blum
e05c627e13 Refactor toJson(:Region) to serialize the values from the Region using the AbstractObjectArrayToJsonConverter class and CacheUtils.collectValues(:Region) method. 2020-06-10 12:21:35 -07:00
John Blum
53dda1265b Remove unused and unnecessary code. 2020-06-09 20:47:04 -07:00
John Blum
895378be70 Add Spring Lifecycle-aware CacheDataImporterExporter implementation.
Resolves gh-90.
2020-06-09 14:10:04 -07:00
John Blum
cb291c844e Enable JSON data formatting on export.
Resolves gh-89.
2020-06-09 14:09:57 -07:00
John Blum
b07ca31e51 Add file system appropriate file path separator to Resource location on export. 2020-06-08 15:16:28 -07:00
John Blum
dcfb7eb186 Add configuration property to enable/disable data imports. 2020-05-14 22:32:31 -07:00
John Blum
a63d792898 Add getAtIdentifier(:PdxInstance) method and strategy for resolving ids from PdxInstances.
Add postProcess(:PdxInstance) method to allow subclasses to override the method in order to post process the PdxInstance(s) generated from JSON.

Edit Javadoc.

Rename getIdField(:PdxInstance) to getId(:PdxInstance).

Resolves gh-67.
2020-05-13 00:13:26 -07:00
John Blum
fa9b2e1ae6 Fix infinite recursion bug leading to a StackOverflowError.
Renamed the convertObjectToJson(:Object) method in the JSONFormatterPdxToJsonConverter class to convertPojoToJson(:Object).

Resolves gh-67.
2020-05-12 22:01:22 -07:00
John Blum
8fe13e01fb Add descriptive convertJsonToPdx(..) conversion method.
Add protected jsonFormatterFromJson(..) method to encapsulate the invocation of the JSONFormatter.fromJSON(..) method.

Add wrap(:PdxInstance) method to wrap the PdxInstance generated from JSON in a new instance of PdxInstanceWrapper.

Resolves gh-67.
2020-05-12 19:41:06 -07:00
John Blum
eba12bad17 Configure Jackson ObjectMapper to find and register additional modules declared on the application's classpath.
Resolves gh-67.
2020-05-12 19:23:20 -07:00
John Blum
22b01985b7 Add Integration Tests for JsonCacheDataImporterExporter asserting the functionality in a client/server topology with a ClientCache.
Resolves gh-67.
2020-05-11 00:04:43 -07:00
John Blum
f40685fb4e Refactor JSONFormatterPdxToJsonConverter to handle missing type metadata in both PdxInstances and in JSON, which is required to reconstitute the Object.
Resolves gh-67.
2020-05-10 13:23:47 -07:00
John Blum
30a84eefdd Add additional Integration Tests for JsonCacheDataImporterExporter class.
Added add test cases covering:

* exportImportWithRegionContainingMixOfObjectsAndPdxInstances
* geodeJsonFormatterCannotHandleTypedJsonObjects
* geodeJsonFormatterCannotRememberPdxInstanceClass

Edit Javadoc.

Resolves gh-67.
2020-05-10 00:26:59 -07:00
John Blum
596ea093ba Add null-safe asType(:Object, :Class) method to cast the given source Object into an instance of the given Class type. 2020-05-09 21:07:05 -07:00
John Blum
9dbd290322 Add Integration Tests for JsonCacheDataImporterExporter.
Resolves gh-67.
2020-05-08 01:45:05 -07:00
John Blum
33458ab4be Refactor POS PurchaseOrder application domain model class to include an identifyAs(:Long) builder method to set the ID of a PurchaseOrder instance.
Annotate the PurchaseOrder class with Jackson's JsonTypeInfo annotation.

Include statically defined Array and Map instance members for test purposes.
2020-05-08 01:42:56 -07:00
John Blum
4d7becad79 Simplify ObjectMapper configuration.
Remove activation of default typing configuration.

Change target Class type for ObjectTypeMetadataMixin (Mixin) to the (converted) source object's Class type.

Remove unnecessary SimpleModule registration including the addition of the custom BigDecimalSerializer, BigIntegerSerializer and TypelessCollectionSerializer objects.

Resolves gh-67.
2020-05-08 01:29:26 -07:00
John Blum
5b5e2e5db8 Add abstract base class implementing the ObjectArrayToJsonConverter interface to encapsulate operation common to all implementations.
The abstract base class provides convert methods to convert arrays, Iterables and Map.values(). Additionally it contains support to configure the ObjectToJsonConverter used to convert individual Objects into JSON.

Resolves gh-67.
2020-05-07 21:26:18 -07:00
John Blum
72443e95af Add ObjectArrayToJsonConverter interface specifying a contract to convert an array of Objects to JSON.
Resolves gh-67.
2020-05-07 21:24:09 -07:00