From 5c1aee1c76adfd68b3e1583fe5ea2a10ba7cf284 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Mon, 31 Jan 2022 17:56:47 +0100 Subject: [PATCH] JSONPathWrapper dynamically loads JSON Implementation --- .../cms/plugins/JacksonProvider.java | 12 +++++++ geoportal-common/pom.xml | 29 ++++++++++------ .../common/JSONSerializationProvider.java | 7 ++++ .../common/utils/JSONPathWrapper.java | 34 +++++++++++-------- .../engine/mongo/ProfiledMongoManager.java | 1 + .../service/BasicServiceTestUnit.java | 19 +++++++++-- .../service/ProfiledDocumentsTests.java | 19 +++++++++-- pom.xml | 1 + 8 files changed, 90 insertions(+), 32 deletions(-) create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java new file mode 100644 index 0000000..51b616a --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java @@ -0,0 +1,12 @@ +package org.gcube.application.cms.plugins; + +import org.gcube.application.geoportal.common.JSONSerializationProvider; + +public class JacksonProvider implements JSONSerializationProvider { + + + @Override + public void setJSONWrapperDefaults() { + + } +} diff --git a/geoportal-common/pom.xml b/geoportal-common/pom.xml index d7600e4..4c429e6 100644 --- a/geoportal-common/pom.xml +++ b/geoportal-common/pom.xml @@ -54,6 +54,22 @@ compile + + + org.gcube.contentmanagement + storage-manager-core + + + + org.gcube.contentmanagement + storage-manager-wrapper + + + org.reflections + reflections + + + junit @@ -72,18 +88,9 @@ org.glassfish.jersey.media jersey-media-json-jackson - - - org.gcube.contentmanagement - storage-manager-core - - - - org.gcube.contentmanagement - storage-manager-wrapper - - + + \ No newline at end of file diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java new file mode 100644 index 0000000..2b7b619 --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java @@ -0,0 +1,7 @@ +package org.gcube.application.geoportal.common; + +public interface JSONSerializationProvider { + + public void setJSONWrapperDefaults(); + +} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java index 4e75137..d7295fe 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java @@ -7,33 +7,37 @@ import com.jayway.jsonpath.spi.json.JsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; import com.jayway.jsonpath.spi.mapper.MappingProvider; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.gcube.application.geoportal.common.JSONSerializationProvider; +import org.reflections.Reflections; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; import java.util.*; +@Slf4j public class JSONPathWrapper { public static Configuration JSON_PATH_ALWAYS_LIST_CONFIG=null; public static Configuration JSON_PATH_PATHS_CONFIGURATION=null; static { - Configuration.setDefaults(new Configuration.Defaults() { - private JsonProvider jacksonProvider = new JacksonJsonProvider(); + Reflections reflections = new Reflections( + new ConfigurationBuilder() + .forPackage("org.gcube.application") + .filterInputsBy(new FilterBuilder().includePackage("org.gcube.application"))); - private final MappingProvider mappingProvider = new JacksonMappingProvider(); - @Override - public JsonProvider jsonProvider() { - return jacksonProvider; + reflections.getSubTypesOf(JSONSerializationProvider.class).iterator().forEachRemaining(providerClass->{ + if(!providerClass.isInterface()){ + try { + log.warn("Loading JSON Provider {} ",providerClass); + JSONSerializationProvider provider = providerClass.newInstance(); + provider.setJSONWrapperDefaults(); + }catch (Throwable t){ + log.error("Unable to instantiate provider "+providerClass,t); + } } - @Override - public Set