From af82f20ca531350be867dba16ebd6c55ae75a5b2 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 24 May 2023 12:19:02 +0200 Subject: [PATCH] Read configuration and deserialization of "GROUPED_CROSS_FILTERING_LAYERS" --- .../ConvertToDataValueObjectModel.java | 46 +++++++++-- .../GroupedLayersDV.java} | 22 +++--- .../layers/ConfiguredLayerDV.java} | 46 ++++++++--- .../config/layers/CrossFilteringLayerDV.java | 78 +++++++++++++++++++ .../geoportal/config/layers/LayerIDV.java | 10 +++ .../ucd/GEOPORTAL_CONFIGURATION_TYPE.java | 6 +- .../geoportal/ucd/GEOPORTAL_DATA_HANDLER.java | 2 +- .../org/gcube/application/TestGNACommon.java | 2 - .../java/org/gcube/application/UCD_Tests.java | 56 ++++++++++--- 9 files changed, 229 insertions(+), 39 deletions(-) rename src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/{materialization/GroupedCustomLayersDV.java => config/GroupedLayersDV.java} (70%) rename src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/{materialization/CustomLayerDV.java => config/layers/ConfiguredLayerDV.java} (51%) create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/CrossFilteringLayerDV.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/LayerIDV.java diff --git a/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java b/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java index 012ea51..e6af43d 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java +++ b/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java @@ -42,10 +42,12 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.FilePathDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV; +import org.gcube.application.geoportalcommon.shared.geoportal.config.GroupedLayersDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV; +import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.ConfiguredLayerDV; +import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.CrossFilteringLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.geojson.Crs; import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; -import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GroupedCustomLayersDV; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.PayloadDV; import org.gcube.application.geoportalcommon.shared.geoportal.project.AccessDV; @@ -72,9 +74,11 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.jayway.jsonpath.DocumentContext; @@ -377,20 +381,48 @@ public class ConvertToDataValueObjectModel { case grouped_overlay_layers: { - List listGroupedCL = new ArrayList( + List> listGroupedCL = new ArrayList>( jsonConfigurations.size()); int i = 0; + ObjectMapper mapper = new ObjectMapper(); for (String asJSONString : jsonConfigurations) { - LOG.debug( - ++i + ") the " + GroupedCustomLayersDV.class.getSimpleName() + " is: " + asJSONString); - GroupedCustomLayersDV profile = org.gcube.application.geoportal.client.utils.Serialization - .read(asJSONString, GroupedCustomLayersDV.class); + LOG.debug(++i + ") the " + GroupedLayersDV.class.getSimpleName() + " is: " + asJSONString); + TypeReference> typeRef = new TypeReference>() {}; + GroupedLayersDV profile = mapper.readValue(asJSONString, typeRef); +// GroupedLayersDV profile = org.gcube.application.geoportal.client.utils.Serialization +// .read(asJSONString, typeRef); // listGroupedCL.add(toGcubeProfileDV(profile)); listGroupedCL.add(profile); } - ConfigurationDV> dDV = new ConfigurationDV>( + ConfigurationDV>> dDV = new ConfigurationDV>>( + listGroupedCL); + dDV.setConfiguration(listGroupedCL); + dDV.setConfigurationType(geoportalConfigType); + hdDV.setConfiguration(dDV); + LOG.info("returning {}", hdDV); + return hdDV; + } + + case grouped_cross_filtering_layers: { + + List> listGroupedCL = new ArrayList>( + jsonConfigurations.size()); + + int i = 0; + ObjectMapper mapper = new ObjectMapper(); + for (String asJSONString : jsonConfigurations) { + LOG.debug(++i + ") the " + GroupedLayersDV.class.getSimpleName() + " is: " + asJSONString); + TypeReference> typeRef = new TypeReference>() {}; + GroupedLayersDV profile = mapper.readValue(asJSONString, typeRef); +// GroupedLayersDV profile = org.gcube.application.geoportal.client.utils.Serialization +// .read(asJSONString, GroupedLayersDV.class); + // listGroupedCL.add(toGcubeProfileDV(profile)); + listGroupedCL.add(profile); + } + + ConfigurationDV>> dDV = new ConfigurationDV>>( listGroupedCL); dDV.setConfiguration(listGroupedCL); dDV.setConfigurationType(geoportalConfigType); diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/GroupedCustomLayersDV.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/GroupedLayersDV.java similarity index 70% rename from src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/GroupedCustomLayersDV.java rename to src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/GroupedLayersDV.java index e43bbd5..72a5c87 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/GroupedCustomLayersDV.java +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/GroupedLayersDV.java @@ -1,26 +1,30 @@ -package org.gcube.application.geoportalcommon.shared.geoportal.materialization; +package org.gcube.application.geoportalcommon.shared.geoportal.config; import java.io.Serializable; import java.util.List; -import org.gcube.application.geoportalcommon.shared.geoportal.config.GeoportalConfigurationID; +import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.LayerIDV; import com.fasterxml.jackson.annotation.JsonProperty; /** - * The Class GroupedCustomLayersDV. + * The Class GroupedLayersDV. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * May 12, 2023 */ -public class GroupedCustomLayersDV implements Serializable, GeoportalConfigurationID { +public class GroupedLayersDV implements Serializable, GeoportalConfigurationID { + /** + * + */ + private static final long serialVersionUID = -2021774489849084231L; private String name; private String description; @JsonProperty(value = "layers") - private List listCustomLayers; + private List listCustomLayers; @Override public String getID() { @@ -34,7 +38,7 @@ public class GroupedCustomLayersDV implements Serializable, GeoportalConfigurati } - public GroupedCustomLayersDV() { + public GroupedLayersDV() { } @@ -46,7 +50,7 @@ public class GroupedCustomLayersDV implements Serializable, GeoportalConfigurati return description; } - public List getListCustomLayers() { + public List getListCustomLayers() { return listCustomLayers; } @@ -58,14 +62,14 @@ public class GroupedCustomLayersDV implements Serializable, GeoportalConfigurati this.description = description; } - public void setListCustomLayers(List listCustomLayers) { + public void setListCustomLayers(List listCustomLayers) { this.listCustomLayers = listCustomLayers; } @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("GroupedCustomLayersDV [name="); + builder.append("GroupedLayersDV [name="); builder.append(name); builder.append(", description="); builder.append(description); diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/CustomLayerDV.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/ConfiguredLayerDV.java similarity index 51% rename from src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/CustomLayerDV.java rename to src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/ConfiguredLayerDV.java index 1607f5f..b7f17db 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/materialization/CustomLayerDV.java +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/ConfiguredLayerDV.java @@ -1,22 +1,29 @@ -package org.gcube.application.geoportalcommon.shared.geoportal.materialization; +package org.gcube.application.geoportalcommon.shared.geoportal.config.layers; import java.io.Serializable; /** - * The Class CustomLayerDV. + * The Class ConfiguredLayerDV. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * May 12, 2023 */ -public class CustomLayerDV implements Serializable { +public class ConfiguredLayerDV implements Serializable, LayerIDV { - String title; - String name; - String wms_url; + /** + * + */ + private static final long serialVersionUID = 6910607957385140987L; + + private String title; + private String description; + private String name; + private String wms_url; + private String wfs_url; boolean display = false; - public CustomLayerDV() { + public ConfiguredLayerDV() { } @@ -24,14 +31,22 @@ public class CustomLayerDV implements Serializable { return title; } + public String getDescription() { + return description; + } + public String getName() { return name; } - public String getWms_url() { + public String getWMS_URL() { return wms_url; } + public String getWFS_URL() { + return wfs_url; + } + public boolean isDisplay() { return display; } @@ -40,6 +55,10 @@ public class CustomLayerDV implements Serializable { this.title = title; } + public void setDescription(String description) { + this.description = description; + } + public void setName(String name) { this.name = name; } @@ -48,6 +67,10 @@ public class CustomLayerDV implements Serializable { this.wms_url = wms_url; } + public void setWfs_url(String wfs_url) { + this.wfs_url = wfs_url; + } + public void setDisplay(boolean display) { this.display = display; } @@ -55,16 +78,21 @@ public class CustomLayerDV implements Serializable { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("CustomLayerDV [title="); + builder.append("ConfiguredLayerDV [title="); builder.append(title); + builder.append(", description="); + builder.append(description); builder.append(", name="); builder.append(name); builder.append(", wms_url="); builder.append(wms_url); + builder.append(", wfs_url="); + builder.append(wfs_url); builder.append(", display="); builder.append(display); builder.append("]"); return builder.toString(); } + } diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/CrossFilteringLayerDV.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/CrossFilteringLayerDV.java new file mode 100644 index 0000000..f65bef7 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/CrossFilteringLayerDV.java @@ -0,0 +1,78 @@ +package org.gcube.application.geoportalcommon.shared.geoportal.config.layers; + +import java.util.List; + +public class CrossFilteringLayerDV extends ConfiguredLayerDV { + + /** + * + */ + private static final long serialVersionUID = 1130075528037312939L; + String table_show_field; + String table_key_field; + String table_parent_key_field; + String table_geometry_name; + List related_to; + + public CrossFilteringLayerDV() { + + } + + public String getTable_show_field() { + return table_show_field; + } + + public String getTable_key_field() { + return table_key_field; + } + + public String getTable_parent_key_field() { + return table_parent_key_field; + } + + public String getTable_geometry_name() { + return table_geometry_name; + } + + public List getRelated_to() { + return related_to; + } + + public void setTable_show_field(String table_show_field) { + this.table_show_field = table_show_field; + } + + public void setTable_key_field(String table_key_field) { + this.table_key_field = table_key_field; + } + + public void setTable_parent_key_field(String table_parent_key_field) { + this.table_parent_key_field = table_parent_key_field; + } + + public void setTable_geometry_name(String table_geometry_name) { + this.table_geometry_name = table_geometry_name; + } + + public void setRelated_to(List related_to) { + this.related_to = related_to; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("CrossFilteringLayerDV [table_show_field="); + builder.append(table_show_field); + builder.append(", table_key_field="); + builder.append(table_key_field); + builder.append(", table_parent_key_field="); + builder.append(table_parent_key_field); + builder.append(", table_geometry_name="); + builder.append(table_geometry_name); + builder.append(", related_to="); + builder.append(related_to); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/LayerIDV.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/LayerIDV.java new file mode 100644 index 0000000..8e9743a --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/config/layers/LayerIDV.java @@ -0,0 +1,10 @@ +package org.gcube.application.geoportalcommon.shared.geoportal.config.layers; + +public interface LayerIDV { + + String getName(); + String getTitle(); + String getWMS_URL(); + String getWFS_URL(); + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_CONFIGURATION_TYPE.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_CONFIGURATION_TYPE.java index f8f1134..72999fe 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_CONFIGURATION_TYPE.java +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_CONFIGURATION_TYPE.java @@ -1,7 +1,11 @@ package org.gcube.application.geoportalcommon.shared.geoportal.ucd; public enum GEOPORTAL_CONFIGURATION_TYPE { - item_fields("itemFields"), gcube_profiles("gcubeProfiles"), actions_definition("actionsDefinition"), grouped_overlay_layers("grouped_overlay_layers"); + item_fields("itemFields"), + gcube_profiles("gcubeProfiles"), + actions_definition("actionsDefinition"), + grouped_overlay_layers("grouped_overlay_layers"), + grouped_cross_filtering_layers("grouped_cross_filtering_layers"); String id; diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java index 2ca5648..1e72518 100644 --- a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportal/ucd/GEOPORTAL_DATA_HANDLER.java @@ -7,7 +7,7 @@ public enum GEOPORTAL_DATA_HANDLER { geoportal_data_entry("org.gcube.portlets.user.geoportal-data-entry-app", "DATA_ENTRY_GUI"), geoportal_workflow_action_list("org.gcube.portlets.user.geoportal-workflow-action-list","WORKFLOW_ACTION_LIST_GUI"), geoportal_timeline_json_template("org.gcube.portlets.user.geoportal-timeline-json-template","TIMELINE_JSON_TEMPLATE"), - geoportal_cross_filtering("org.gcube.portlets.user.cross-filtering","CROSS_FILTERING"), + geoportal_grouped_cross_filtering("org.gcube.portlets.user.grouped_cross_filtering_layers","GROUPED_CROSS_FILTERING_LAYERS"), geoportal_grouped_overlay_layers("org.gcube.portlets.user.grouped_overlay_layers","GROUPED_OVERLAY_LAYERS"), gna_concessioni_lc("GNA-CONCESSIONI-LC", "LifecycleManagement"); diff --git a/src/test/java/org/gcube/application/TestGNACommon.java b/src/test/java/org/gcube/application/TestGNACommon.java index 99c35aa..aec7f19 100644 --- a/src/test/java/org/gcube/application/TestGNACommon.java +++ b/src/test/java/org/gcube/application/TestGNACommon.java @@ -15,8 +15,6 @@ import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences; import org.gcube.application.geoportalcommon.shared.config.RoleRights; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; -import org.junit.Before; -import org.junit.Test; public class TestGNACommon { diff --git a/src/test/java/org/gcube/application/UCD_Tests.java b/src/test/java/org/gcube/application/UCD_Tests.java index fd7a171..001e661 100644 --- a/src/test/java/org/gcube/application/UCD_Tests.java +++ b/src/test/java/org/gcube/application/UCD_Tests.java @@ -23,8 +23,6 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ConfigurationDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.GcubeProfileDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV; -import org.gcube.application.geoportalcommon.shared.geoportal.materialization.CustomLayerDV; -import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GroupedCustomLayersDV; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_CONFIGURATION_TYPE; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV; @@ -232,7 +230,7 @@ public class UCD_Tests { } //@Test - public void getUCDGroupedCustomLayers() throws Exception { + public void getUCDGroupedOverlayLayers() throws Exception { ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); @@ -264,6 +262,43 @@ public class UCD_Tests { System.out.println(listUCDDV); } + + + //@Test + public void getUCDGroupedCrossFilteringLayers() throws Exception { + System.out.println("Running getUCDGroupedCrossFilteringLayers"); + ScopeProvider.instance.set(CONTEXT); + SecurityTokenProvider.instance.set(TOKEN); + + List handlersIds = null; + List listUseCaseDescriptor; + + try { + UseCaseDescriptorCaller client = GeoportalClientCaller.useCaseDescriptors(); + + if (handlersIds == null) { + handlersIds = Arrays.asList(GEOPORTAL_DATA_HANDLER.geoportal_grouped_cross_filtering.getId()); + System.out.println("handlersIds is null, so using default: " + handlersIds); + } + listUseCaseDescriptor = client.getListForHandlerIds(handlersIds); + } catch (Exception e) { + e.printStackTrace(); + return; + } + + if (listUseCaseDescriptor == null) { + listUseCaseDescriptor = new ArrayList(); + } + + List listUCDDV = new ArrayList(listUseCaseDescriptor.size()); + for (UseCaseDescriptor ucd : listUseCaseDescriptor) { + listUCDDV.add(ConvertToDataValueObjectModel.toUseCaseDescriptorDV(ucd, null)); + } + + System.out.println(listUCDDV); + System.out.println("Terminated getUCDGroupedCrossFilteringLayers"); + + } /** * Gets the UCD for handler types. @@ -273,10 +308,11 @@ public class UCD_Tests { */ //@Test public void getUCDForHandlerTypes() throws Exception { + System.out.println("Running getUCDForHandlerTypes"); ScopeProvider.instance.set(CONTEXT); SecurityTokenProvider.instance.set(TOKEN); - String handlerType = GEOPORTAL_DATA_HANDLER.geoportal_grouped_overlay_layers.getType(); + String handlerType = GEOPORTAL_DATA_HANDLER.geoportal_grouped_cross_filtering.getType(); UseCaseDescriptor ucd = null; List handlers = null; @@ -290,15 +326,15 @@ public class UCD_Tests { return; } + int i = 0; for (HandlerDeclaration handlerDeclaration : handlers) { System.out.println(handlerDeclaration); - System.out.println("Config json: "+handlerDeclaration.getConfiguration().toJson()); - HandlerDeclarationDV handlerDV = ConvertToDataValueObjectModel.toHandlerDeclarationDV(handlerDeclaration, ucd, GEOPORTAL_CONFIGURATION_TYPE.grouped_overlay_layers); - System.out.println("handlerDV is: "+handlerDV); + System.out.println(++i+")##Config json: "+handlerDeclaration.getConfiguration().toJson()); + HandlerDeclarationDV handlerDV = ConvertToDataValueObjectModel.toHandlerDeclarationDV(handlerDeclaration, ucd, GEOPORTAL_CONFIGURATION_TYPE.grouped_cross_filtering_layers); + System.out.println("\nhandlerDV is: "+handlerDV); } - - - + System.out.println("\n"); + System.out.println("Terminated getUCDForHandlerTypes"); }