diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewer.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewer.java index 4b3bb32..ba0a812 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewer.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewer.java @@ -25,8 +25,8 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.AddLayerToMapEv import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent.LAYER_TYPE; import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler; -import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerMapEvent; -import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerMapEventHandler; +import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerOnMapEvent; +import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerOnMapEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.events.ClosedViewDetailsEvent; @@ -59,6 +59,7 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.collections.Ope import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped; import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils; import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerMap; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerMap.CQL_FACILITY_ORIGIN; import org.gcube.portlets.user.geoportaldataviewer.client.resources.GNAImages; import org.gcube.portlets.user.geoportaldataviewer.client.ui.GeonaDataViewMainPanel; import org.gcube.portlets.user.geoportaldataviewer.client.ui.cms.project.relation.TimelineManagerStatus; @@ -848,7 +849,7 @@ public class GeoportalDataViewer implements EntryPoint { // TODO: handle exception } - String setCqlFilter = null; // default + String newCqlFilter = null; // default // setCqlFilter = "INTERSECTS(geom,querySingle('limiti_amministrativi:regioni','the_geom','DEN_REG=''Calabria'''));INCLUDE"; // GWT.log("HARD-CODED CQL FILTER: "+setCqlFilter); @@ -864,32 +865,34 @@ public class GeoportalDataViewer implements EntryPoint { cqlFilter += "'" + projectId + "',"; } cqlFilter = cqlFilter.substring(0, cqlFilter.length() - 1) + ")"; - setCqlFilter = cqlFilter; - olMapMng.getOLMap().setCQLFilterToWMSLayer(layerName, setCqlFilter); + newCqlFilter = olMapMng.getOLMap().setCQLFilterToWMSLayer(CQL_FACILITY_ORIGIN.SEARCH, layerName, + cqlFilter); } else { - olMapMng.getOLMap().setCQLFilterToWMSLayer(layerName, null); - setCqlFilter = null; // is already null + newCqlFilter = olMapMng.getOLMap().setCQLFilterToWMSLayer(CQL_FACILITY_ORIGIN.SEARCH, layerName, + null); } if (searchPerformedEvent.isSearchReset()) { - olMapMng.getOLMap().setCQLFilterToWMSLayer(layerName, null); - setCqlFilter = null; // is already null + newCqlFilter = olMapMng.getOLMap().setCQLFilterToWMSLayer(CQL_FACILITY_ORIGIN.SEARCH, layerName, + null); } + + GWT.log("New CQL Filter is: "+newCqlFilter); if (layerName != null) - layerManager.setCQLForLayerToIndexLayer(layerName, setCqlFilter); + layerManager.setCQLForLayerToIndexLayer(layerName, newCqlFilter); } } }); - applicationBus.addHandler(ApplyCQLToLayerMapEvent.TYPE, new ApplyCQLToLayerMapEventHandler() { + applicationBus.addHandler(ApplyCQLToLayerOnMapEvent.TYPE, new ApplyCQLToLayerOnMapEventHandler() { @Override - public void onApplyCQL(ApplyCQLToLayerMapEvent applyCQLToLayerMapEvent) { + public void onApplyCQL(ApplyCQLToLayerOnMapEvent applyCQLToLayerMapEvent) { GWT.log("Fired: " + applyCQLToLayerMapEvent); if (applyCQLToLayerMapEvent != null) { @@ -904,21 +907,22 @@ public class GeoportalDataViewer implements EntryPoint { } catch (Exception e) { // TODO: handle exception } - + String setCqlFilter = null; - + if (layerName != null) { - GWT.log("ApplyCQLToLayerMapEvent: " + layerName + ", filter : " + GWT.log("ApplyCQLToLayerOnMapEvent: " + layerName + ", filter : " + applyCQLToLayerMapEvent.getCqlFilterValue()); - if (applyCQLToLayerMapEvent.getCqlFilterValue() == null) { - olMapMng.getOLMap().setCQLFilterToWMSLayer(layerName, null); + olMapMng.getOLMap().setCQLFilterToWMSLayer(CQL_FACILITY_ORIGIN.CROSS_FILTERING, layerName, + null); setCqlFilter = null; // is already null } else { setCqlFilter = applyCQLToLayerMapEvent.getCqlFilterValue(); - olMapMng.getOLMap().setCQLFilterToWMSLayer(layerName, setCqlFilter); + olMapMng.getOLMap().setCQLFilterToWMSLayer(CQL_FACILITY_ORIGIN.CROSS_FILTERING, layerName, + setCqlFilter); } layerManager.setCQLForLayerToIndexLayer(layerName, setCqlFilter); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java index 458fa56..ef77a8a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java @@ -582,9 +582,7 @@ public class LayerManager { public void setCQLForLayerToIndexLayer(String layerName, String cqlFilter) { LayerObject theLo = mapIndexLayerObjects.get(layerName); if (theLo != null) { - boolean isCQLFilter = cqlFilter != null; theLo.getLayerItem().setCqlFilter(cqlFilter); - theLo.getLayerItem().setCqlFilterAvailable(isCQLFilter); } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerMapEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerOnMapEvent.java similarity index 72% rename from src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerMapEvent.java rename to src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerOnMapEvent.java index 0b38f07..fdd2c97 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerMapEvent.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ApplyCQLToLayerOnMapEvent.java @@ -11,8 +11,8 @@ import com.google.gwt.event.shared.GwtEvent; * * Nov 18, 2020 */ -public class ApplyCQLToLayerMapEvent extends GwtEvent { - public static Type TYPE = new Type(); +public class ApplyCQLToLayerOnMapEvent extends GwtEvent { + public static Type TYPE = new Type(); private IndexLayerDV theIndeLayer; private String cqlFilterValue; @@ -22,7 +22,7 @@ public class ApplyCQLToLayerMapEvent extends GwtEvent getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -43,7 +43,7 @@ public class ApplyCQLToLayerMapEvent extends GwtEvent MAX_LENGHT_CQL_FOR_GET_REQUEST) { - imageWMSParams.delete(CQL_FILTER_PARAMETER); - } else { - imageWMSParams.set(CQL_FILTER_PARAMETER, cqlFilterExpression); + // Setting new CQL filter for Origin + cqlFilterMap.put(origin, newCQLFilterExpression); + + String setCQLFilter = ""; + + // Building new CQL filter + for (CQL_FACILITY_ORIGIN originKey : cqlFilterMap.keySet()) { + + String originCQLFilter = cqlFilterMap.get(originKey); + if (originCQLFilter != null) { + if (setCQLFilter.isEmpty()) { + setCQLFilter = originCQLFilter; + } else { + setCQLFilter += " AND " + originCQLFilter; + } + } } + if (setCQLFilter.isEmpty()) + imageWMSParams.delete(CQL_FILTER_PARAMETER); + else + imageWMSParams.set(CQL_FILTER_PARAMETER, setCQLFilter); + imageWMSSource.updateParams(imageWMSParams); wmsLayer.setSource(imageWMSSource); wmsLayer.changed(); + + GWT.log("returning " + CQL_FILTER_PARAMETER + ": " + setCQLFilter); + return setCQLFilter; } /** diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml index 2a7d6e9..d18b74d 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml @@ -56,17 +56,17 @@ + title="Select the base Map" text="Map" ui:field="linkMap" icon="GLOBE"> + title="Add overlay layers.." text="Overlay" ui:field="linkCustomOverlayLayers" icon="REORDER"> + title="Apply spatial filtering.." text="Filter" ui:field="linkCrossFilteringLayers" icon="FILTER"> @@ -85,7 +85,7 @@ + ui:field="linkPresetLocation" addStyleNames="preset-location"> diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/crossfiltering/CrossFilteringLayerPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/crossfiltering/CrossFilteringLayerPanel.java index c93fbd1..db86a25 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/crossfiltering/CrossFilteringLayerPanel.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/crossfiltering/CrossFilteringLayerPanel.java @@ -12,7 +12,7 @@ import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GC import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync; -import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerMapEvent; +import org.gcube.portlets.user.geoportaldataviewer.client.events.ApplyCQLToLayerOnMapEvent; import org.gcube.portlets.user.geoportaldataviewer.client.ui.util.OLGeoJSONUtil; import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon; import org.gcube.portlets.user.geoportaldataviewer.client.util.URLUtil; @@ -152,7 +152,7 @@ public class CrossFilteringLayerPanel extends Composite { List listBox = mapInnestedListBoxes.get(0); listBox.get(0).setSelectedIndex(0); // Resetting CQL filtering - applicationBus.fireEvent(new ApplyCQLToLayerMapEvent(gCubeCollection.getIndexes().get(0), null)); + applicationBus.fireEvent(new ApplyCQLToLayerOnMapEvent(gCubeCollection.getIndexes().get(0), null)); setFilterHighLighted(false); } }); @@ -434,7 +434,7 @@ public class CrossFilteringLayerPanel extends Composite { // TODO: handle exception } - applicationBus.fireEvent(new ApplyCQLToLayerMapEvent(indexLayer, setCqlFilter)); + applicationBus.fireEvent(new ApplyCQLToLayerOnMapEvent(indexLayer, setCqlFilter)); } public void showCountResultsOfWFSCrossFiltering(String wfsQuery) { diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java index 10c3f9c..37c2e1d 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java @@ -23,7 +23,6 @@ import com.google.gwt.core.client.GWT; */ public class LayerItem implements Serializable, Cloneable { - /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1664082688635256899L; @@ -102,9 +101,6 @@ public class LayerItem implements Serializable, Cloneable { /** The server wms request. */ public String wmsLink; - /** The cql filter available. */ - private boolean cqlFilterAvailable = false; - /** The uuid. */ private String UUID; @@ -722,7 +718,7 @@ public class LayerItem implements Serializable, Cloneable { public String getCqlFilter() { return cqlFilter; } - + /** * Sets the cql filter. * @@ -756,16 +752,7 @@ public class LayerItem implements Serializable, Cloneable { * @return true, if is cql filter available */ public boolean isCqlFilterAvailable() { - return cqlFilterAvailable; - } - - /** - * Sets the cql filter available. - * - * @param cqlFilterAvailable the new cql filter available - */ - public void setCqlFilterAvailable(boolean cqlFilterAvailable) { - this.cqlFilterAvailable = cqlFilterAvailable; + return (cqlFilter != null) && (!cqlFilter.isEmpty()); } /** @@ -894,11 +881,6 @@ public class LayerItem implements Serializable, Cloneable { return maxResolution; } - /** - * To string. - * - * @return the string - */ @Override public String toString() { StringBuilder builder = new StringBuilder(); @@ -952,8 +934,6 @@ public class LayerItem implements Serializable, Cloneable { builder.append(isNcWms); builder.append(", wmsLink="); builder.append(wmsLink); - builder.append(", cqlFilterAvailable="); - builder.append(cqlFilterAvailable); builder.append(", UUID="); builder.append(UUID); builder.append(", zAxis="); @@ -968,7 +948,6 @@ public class LayerItem implements Serializable, Cloneable { return builder.toString(); } - /** * To layer item. * @@ -991,9 +970,8 @@ public class LayerItem implements Serializable, Cloneable { * @param maxResolution the max resolution * @return the layer item */ - - - // TODO Constructor from IndexLayerDV, GCUBESDILAeryDV or direct info + + // TODO Constructor from IndexLayerDV, GCUBESDILAeryDV or direct info private LayerItem toLayerItem(LayerType layerType, String layerTitle, String layerName, String layerURL, String mapServerHost, boolean isExternal, boolean isBase, boolean displayInLayerSwitcher, ArrayList styles, String wmsLink, boolean onTop, HashMap wmsNotStandardParams, diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css index e43201d..53d5764 100644 --- a/src/main/webapp/GeoportalDataViewer.css +++ b/src/main/webapp/GeoportalDataViewer.css @@ -158,6 +158,11 @@ body { padding-top: 1px; } +.preset-location ul a { + margin: 5px !important; +} + + .my-control-group .controls { margin-left: 70px !important; } @@ -211,7 +216,7 @@ body { } .inner-toolbar .btn-group { - margin-left: 0px !important; + margin-left: 2px !important; } .inner-toolbar .btn-link { @@ -426,6 +431,7 @@ body { .map-layers-radio label { margin-left: 5px; padding-top: 5px; + font-weight: bold; }