diff --git a/.classpath b/.classpath
index 3f84059..2d08333 100644
--- a/.classpath
+++ b/.classpath
@@ -1,12 +1,12 @@
-
+
-
+
@@ -35,5 +35,5 @@
-
+
diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs
index 4c65c64..5367c1d 100644
--- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs
+++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs
@@ -1,4 +1,4 @@
eclipse.preferences.version=1
-lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-2.1.0-SNAPSHOT
+lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-2.2.0-SNAPSHOT
warSrcDir=src/main/webapp
warSrcDirIsOutput=false
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index af45588..db1d6e9 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -1,41 +1,54 @@
-
+
-
-
+
+
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+ uses
+
+
+
-
+
+
-
+
+
-
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95a8e22..87fc667 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,17 @@ All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v2.2.0-SNAPSHOT] - 2021-12-07
+
+#### Enhancements
+
+- [#22518] Added the search for fields facility
+
## [v2.1.0-SNAPSHOT] - 2021-11-10
#### Enhancements
+- [#22518] Added the search for name facility
- [#22027] Integrated with MapBox Satellite
- Added link "Open Project" in the pop-up of WFS details
- Moved to gwt-ol3 v8.1.0-gwt2_9
diff --git a/pom.xml b/pom.xml
index eccb30a..a7fea41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
org.gcube.portlets.user
geoportal-data-viewer-app
war
- 2.1.0-SNAPSHOT
+ 2.2.0-SNAPSHOT
GeoPortal Data Viewer App
The GeoPortal Data Viewer App is an application to access, discovery and navigate the GeoNa products by a Web-Map Interface
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 9dd16d9..664bfdd 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
@@ -1,11 +1,17 @@
package org.gcube.portlets.user.geoportaldataviewer.client;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
-import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile;
+import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
import org.gcube.application.geoportalcommon.shared.LayerItem;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.RecordDV;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
@@ -24,8 +30,12 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetai
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEventHandler;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped;
@@ -52,6 +62,7 @@ import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import ol.Coordinate;
+import ol.layer.Image;
/**
* Entry point classes define onModuleLoad()
.
@@ -89,7 +100,7 @@ public class GeoportalDataViewer implements EntryPoint {
private String paramGeonaItemID;
- private GeoNaDataViewerProfile geonaDataViewerProfile;
+ private GNADataViewerConfigProfile geonaDataViewerProfile;
private OLMapManager olMapMng = null;
@@ -100,6 +111,10 @@ public class GeoportalDataViewer implements EntryPoint {
private HTML attributionDiv = new HTML();
private static List listBaseMapLayers = null;
+
+ private List displayFields = new ArrayList();
+ private List sortByFields = new ArrayList();
+ private List searchByFields = new ArrayList();
/**
* This is the entry point method.
@@ -120,8 +135,50 @@ public class GeoportalDataViewer implements EntryPoint {
RootPanel.get(APP_DIV).add(loaderApp);
- mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight());
- RootPanel.get(APP_DIV).add(mainPanel);
+ GeoportalDataViewerServiceAsync.Util.getInstance().listOfFieldsForSearching(new AsyncCallback>() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Window.alert(caught.getMessage());
+
+ }
+
+ @Override
+ public void onSuccess(List result) {
+ GWT.log("Loaded item fields: "+result);
+
+ for (ItemField itemField : result) {
+ if(itemField.isDisplayAsResult()) {
+ displayFields.add(itemField);
+ }
+
+ if(itemField.isSearchable()) {
+ searchByFields.add(itemField);
+ }
+
+ if(itemField.isSortable()) {
+ sortByFields.add(itemField);
+ }
+ }
+
+
+ GWT.log("List display fields: "+result);
+ SearchingFilter initialSortFilter = new SearchingFilter();
+ initialSortFilter.setOrder(ORDER.ASC);
+ initialSortFilter.setOrderByFields(Arrays.asList(new ItemField("Name", Arrays.asList("name"), true, true, true)));
+
+ mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight(),sortByFields,searchByFields,initialSortFilter);
+ RootPanel.get(APP_DIV).add(mainPanel);
+
+ initApplication();
+ }
+
+
+ });
+
+ }
+
+ private void initApplication() {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@@ -176,11 +233,10 @@ public class GeoportalDataViewer implements EntryPoint {
}
});
-
-
bindEvents();
RootPanel.get(APP_DIV).add(attributionDiv);
+
}
public static List getListBaseMapLayers() {
@@ -194,7 +250,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
public void execute() {
GeoportalDataViewerServiceAsync.Util.getInstance()
- .getGeoNaDataViewProfile(new AsyncCallback() {
+ .getGeoNaDataViewProfile(new AsyncCallback() {
@Override
public void onFailure(Throwable caught) {
@@ -203,7 +259,7 @@ public class GeoportalDataViewer implements EntryPoint {
}
@Override
- public void onSuccess(GeoNaDataViewerProfile profile) {
+ public void onSuccess(GNADataViewerConfigProfile profile) {
geonaDataViewerProfile = profile;
GWT.log("Profile: " + geonaDataViewerProfile);
Iterator it;
@@ -332,7 +388,7 @@ public class GeoportalDataViewer implements EntryPoint {
public void run() {
attempt++;
GWT.log("waiting get record: " + attempt);
- RecordDV record = mainPanel.getDisplyedRecord();
+ RecordDV record = mainPanel.getDisplayedRecord();
if (record != null) {
this.cancel();
GWT.log("cancelled timer");
@@ -378,7 +434,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
public void onZoomOut(ZoomOutOverMinimumEvent zoomOutEvent) {
- if (mainPanel.getDisplyedRecord() == null && !olMapMng.isQueryPointActive()) {
+ if (mainPanel.getDisplayedRecord() == null && !olMapMng.isQueryPointActive()) {
olMapMng.hidePopInfo();
layerManager.removeAllDetailLayers();
@@ -469,6 +525,52 @@ public class GeoportalDataViewer implements EntryPoint {
}
});
+
+ applicationBus.addHandler(ShowPopupOnCentroiEvent.TYPE, new ShowPopupOnCentroiEventHandler() {
+
+ @Override
+ public void onShowPopup(ShowPopupOnCentroiEvent showPopupOnCentroiEvent) {
+
+ if(showPopupOnCentroiEvent.getRecord()!=null)
+ performWFSQueryOnCentroid(showPopupOnCentroiEvent.getRecord());
+
+ }
+ });
+
+ applicationBus.addHandler(SearchPerformedEvent.TYPE, new SearchPerformedEventHandler() {
+
+ @Override
+ public void onSearchDone(SearchPerformedEvent searchPerformedEvent) {
+
+ if(searchPerformedEvent!=null) {
+
+
+
+ LinkedHashMap wmsMap = olMapMng.getOLMap().getWmsLayerMap();
+ String firstWMSKey = wmsMap.keySet().iterator().next();
+ List result = searchPerformedEvent.getData();
+
+ if(result!=null && result.size()>0) {
+ String cqlFilter = "product_id IN(";
+ for (ConcessioneDV concessioneDV : result) {
+ cqlFilter+="'"+concessioneDV.getItemId()+"',";
+ }
+ cqlFilter = cqlFilter.substring(0,cqlFilter.length()-1)+")";
+
+ olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, cqlFilter);
+ }else {
+ olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, null);
+ }
+
+ if(searchPerformedEvent.isSearchReset()) {
+ olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, null);
+ }
+
+ }
+
+
+ }
+ });
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java
index e1117c0..5f7b211 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java
@@ -67,6 +67,10 @@ public class GeoportalDataViewerConstants {
}
}
+
+ public enum RECORD_TYPE {
+ CONCESSIONE
+ }
public static final double ITALY_CENTER_LONG = 12.45;
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerService.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerService.java
index b48828a..bba187a 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerService.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerService.java
@@ -2,8 +2,11 @@ package org.gcube.portlets.user.geoportaldataviewer.client;
import java.util.List;
-import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile;
+import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
+import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
@@ -80,16 +83,16 @@ public interface GeoportalDataViewerService extends RemoteService {
* @return the geo na data view profile
* @throws Exception the exception
*/
- GeoNaDataViewerProfile getGeoNaDataViewProfile() throws Exception;
+ GNADataViewerConfigProfile getGeoNaDataViewProfile() throws Exception;
/**
* Gets the uploaded images for id.
*
- * @param itemType the item type
- * @param itemId the item id
+ * @param itemType the item type
+ * @param itemId the item id
* @param maxImages the max images
* @return the uploaded images for id
- * @throws Exception
+ * @throws Exception
*/
List getUploadedImagesForId(String itemType, String itemId, Integer maxImages) throws Exception;
@@ -105,8 +108,8 @@ public interface GeoportalDataViewerService extends RemoteService {
/**
* Gets the layers for id.
*
- * @param itemType the item type
- * @param itemId the item id
+ * @param itemType the item type
+ * @param itemId the item id
* @return the layers for id
* @throws Exception the exception
*/
@@ -127,5 +130,25 @@ public interface GeoportalDataViewerService extends RemoteService {
List getListBaseLayers();
+ /**
+ * List of fields for searching.
+ *
+ * @return the list
+ * @throws Exception
+ */
+ List listOfFieldsForSearching() throws Exception;
+
+ /**
+ * Gets the list concessioni.
+ *
+ * @param start the start
+ * @param limit the limit
+ * @param filter the filter
+ * @param reloadFromService the reload from service
+ * @return the list concessioni
+ * @throws Exception the exception
+ */
+ ResultSetPaginatedData getListConcessioni(Integer start, Integer limit, SearchingFilter filter,
+ boolean reloadFromService) throws Exception;
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerServiceAsync.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerServiceAsync.java
index 462a52e..143455e 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerServiceAsync.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerServiceAsync.java
@@ -2,8 +2,11 @@ package org.gcube.portlets.user.geoportaldataviewer.client;
import java.util.List;
-import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile;
+import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
+import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
@@ -37,8 +40,8 @@ public interface GeoportalDataViewerServiceAsync {
void parseWmsRequest(String wmsRequest, String layerName, AsyncCallback callback);
- void getDataResult(List layerObjects, String mapSrsName, BoundsMap mapBBOX, int maxWFSFeature, double zoomLevel,
- AsyncCallback> callback);
+ void getDataResult(List layerObjects, String mapSrsName, BoundsMap mapBBOX, int maxWFSFeature,
+ double zoomLevel, AsyncCallback> callback);
void getConcessioneForId(String mongoId, AsyncCallback callback);
@@ -46,19 +49,23 @@ public interface GeoportalDataViewerServiceAsync {
void getLayerForType(String layerType, AsyncCallback callback);
- void getGeoNaDataViewProfile(AsyncCallback callback);
+ void getGeoNaDataViewProfile(AsyncCallback callback);
void getUploadedImagesForId(String itemType, String itemId, Integer maxImages,
AsyncCallback> callback);
void getPublicLinksFor(GeoNaItemRef item, AsyncCallback asyncCallback);
- void getLayersForId(String itemType, String itemId,
- AsyncCallback> asyncCallback);
+ void getLayersForId(String itemType, String itemId, AsyncCallback> asyncCallback);
void getWFSFeatures(List layerObjects, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature,
double zoomLevel, AsyncCallback> callback);
void getListBaseLayers(AsyncCallback> callback);
+ void listOfFieldsForSearching(AsyncCallback> callback);
+
+ void getListConcessioni(Integer start, Integer limit, SearchingFilter filter, boolean reloadFromService,
+ AsyncCallback callback);
+
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OLMapManager.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OLMapManager.java
index 294aab6..24fa9b6 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OLMapManager.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OLMapManager.java
@@ -46,7 +46,7 @@ public class OLMapManager {
*
* @param targetId the target id
* @param layerManagerBus the layer manager bus
- * @param baseMapLayer the base map layer
+ * @param baseMapLayer the base map layer
*/
public OLMapManager(String targetId, HandlerManager layerManagerBus, BaseMapLayer baseMapLayer) {
this.targetId = targetId;
@@ -75,7 +75,8 @@ public class OLMapManager {
//
// }
- ExtentWrapped toExt = new ExtentWrapped(coordinate.getX(), coordinate.getY(), coordinate.getX(), coordinate.getY());
+ ExtentWrapped toExt = new ExtentWrapped(coordinate.getX(), coordinate.getY(), coordinate.getX(),
+ coordinate.getY());
GeoQuery select = toDataPointQuery(coordinate, true);
layerManagerBus.fireEvent(new QueryDataEvent(select, toExt, null, true, MapEventType.MOUSE_CLICK));
@@ -140,7 +141,7 @@ public class OLMapManager {
/**
* To data point query.
*
- * @param coordinate the coordinate
+ * @param coordinate the coordinate
* @param manualClick the manual click
* @return the geo query
*/
@@ -157,12 +158,12 @@ public class OLMapManager {
// ratio - mapPixelWeight : bboxWeight = 20px : geoRectangleWidth
// where 10px is the pixel diameter dimension of the clicked point
double bboxWidth = Math.abs(olMap.getExtent().getLowerLeftX() - olMap.getExtent().getUpperRightX());
-
+
double geoWidth = 0;
// adding a tolerance in case of manual click
if (manualClick) {
// adding a tolerance for clicking
- //geoWidth = (bboxWidth / w) * (14 / 2);
+ // geoWidth = (bboxWidth / w) * (14 / 2);
geoWidth = (bboxWidth / w) * (16 / 2);
} else {
// data point selection for coordinate loaded from concessione
@@ -211,7 +212,7 @@ public class OLMapManager {
GWT.log("the distance is: " + dist);
if (dist > 5000 || startExt.containsExtent(endExt)) {
GeoQuery select = toDataBoxQuery(dragEndExtent);
- //TODO THE AUTOMATICALLY SHOWING POP-UP ACCORDING TO ZOOM IS BUGGY
+ // TODO THE AUTOMATICALLY SHOWING POP-UP ACCORDING TO ZOOM IS BUGGY
layerManagerBus.fireEvent(new QueryDataEvent(select, endExt, null, false, mapEventType));
}
} else if (zoomStart != null && zoomEnd != null) {
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java
index 05affaa..436423b 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java
@@ -16,7 +16,6 @@ public class OverlayLayerManager {
public OverlayLayerManager(HandlerManager applicationBus) {
this.applicationBus = applicationBus;
- //fp.addStyleName("layers-panel");
}
void addLayerItem(LayerObject lo) {
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEvent.java
new file mode 100644
index 0000000..a4f2cc7
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEvent.java
@@ -0,0 +1,83 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
+import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.RECORD_TYPE;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+/**
+ * The Class GetListOfRecordsEvent.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 7, 2021
+ */
+public class GetListOfRecordsEvent extends GwtEvent {
+
+ /** The type. */
+ public static Type TYPE = new Type();
+ private RECORD_TYPE recordType;
+ private SearchingFilter sortFilter;
+
+ /**
+ * Instantiates a new cancel upload event.
+ *
+ * @param recordType the record type
+ * @param sortFilter the sort filter
+ */
+ public GetListOfRecordsEvent(RECORD_TYPE recordType, SearchingFilter sortFilter) {
+ this.recordType = recordType;
+ this.sortFilter = sortFilter;
+ }
+
+ /**
+ * Gets the associated type.
+ *
+ * @return the associated type
+ */
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
+ */
+ @Override
+ public Type getAssociatedType() {
+ return TYPE;
+ }
+
+ /**
+ * Dispatch.
+ *
+ * @param handler the handler
+ */
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.
+ * EventHandler)
+ */
+ @Override
+ protected void dispatch(GetListOfRecordsEventHandler handler) {
+ handler.onGetList(this);
+ }
+
+ /**
+ * Gets the record type.
+ *
+ * @return the record type
+ */
+ public RECORD_TYPE getRecordType() {
+ return recordType;
+ }
+
+ /**
+ * Gets the sort filter.
+ *
+ * @return the sort filter
+ */
+ public SearchingFilter getSortFilter() {
+ return sortFilter;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEventHandler.java
new file mode 100644
index 0000000..4d00089
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/GetListOfRecordsEventHandler.java
@@ -0,0 +1,22 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+
+/**
+ * The Interface GetListOfRecordsEventHandler.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Aug 4, 2021
+ */
+public interface GetListOfRecordsEventHandler extends EventHandler {
+
+
+ /**
+ * On get list.
+ *
+ * @param getListOfRecordsEvent the get list of records event
+ */
+ void onGetList(GetListOfRecordsEvent getListOfRecordsEvent);
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEvent.java
new file mode 100644
index 0000000..0074ce9
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEvent.java
@@ -0,0 +1,71 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import java.util.List;
+
+import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+/**
+ * The Class SearchPerformedEvent.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 14, 2021
+ */
+public class SearchPerformedEvent extends GwtEvent {
+ public static Type TYPE = new Type();
+ private List data;
+ private boolean searchReset;
+
+ /**
+ * Instantiates a new search performed event.
+ *
+ * @param data the data
+ * @param searchReset the search reset
+ */
+ public SearchPerformedEvent(List data, boolean searchReset) {
+ this.data = data;
+ this.searchReset = searchReset;
+ }
+
+ /**
+ * Gets the associated type.
+ *
+ * @return the associated type
+ */
+ @Override
+ public Type getAssociatedType() {
+ return TYPE;
+ }
+
+ /**
+ * Dispatch.
+ *
+ * @param handler the handler
+ */
+ @Override
+ protected void dispatch(SearchPerformedEventHandler handler) {
+ handler.onSearchDone(this);
+
+ }
+
+ /**
+ * Gets the data.
+ *
+ * @return the data
+ */
+ public List getData() {
+ return data;
+ }
+
+ /**
+ * Checks if is search reset.
+ *
+ * @return true, if is search reset
+ */
+ public boolean isSearchReset() {
+ return searchReset;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEventHandler.java
new file mode 100644
index 0000000..de6a195
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/SearchPerformedEventHandler.java
@@ -0,0 +1,20 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+/**
+ * The Interface SearchPerformedEventHandler.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 14, 2021
+ */
+public interface SearchPerformedEventHandler extends EventHandler {
+
+ /**
+ * On search done.
+ *
+ * @param searchPerformedEvent the search performed event
+ */
+ void onSearchDone(SearchPerformedEvent searchPerformedEvent);
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java
new file mode 100644
index 0000000..07c07af
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java
@@ -0,0 +1,61 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import org.gcube.application.geoportalcommon.shared.products.model.RecordDV;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+
+/**
+ * The Class ShowDetailsEvent.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Jul 30, 2021
+ */
+public class ShowPopupOnCentroiEvent extends GwtEvent {
+ public static Type TYPE = new Type();
+ private RecordDV record;
+
+
+ /**
+ * Instantiates a new show details event.
+ *
+ * @param geonaItemType the geona item type
+ * @param geonaMongoID the geona mongo ID
+ * @param itemName the item name
+ * @param featureRow the feature row
+ */
+ public ShowPopupOnCentroiEvent(RecordDV record) {
+ this.record = record;
+
+ }
+
+
+ /**
+ * Gets the associated type.
+ *
+ * @return the associated type
+ */
+ @Override
+ public Type getAssociatedType() {
+ return TYPE;
+ }
+
+ /**
+ * Dispatch.
+ *
+ * @param handler the handler
+ */
+ @Override
+ protected void dispatch(ShowPopupOnCentroiEventHandler handler) {
+ handler.onShowPopup(this);
+
+ }
+
+ public RecordDV getRecord() {
+ return record;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java
new file mode 100644
index 0000000..c668c23
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java
@@ -0,0 +1,21 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+
+/**
+ * The Interface ShowPopupOnCentroiEventHandler.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 10, 2021
+ */
+public interface ShowPopupOnCentroiEventHandler extends EventHandler {
+
+ /**
+ * On show popup.
+ *
+ * @param showPopupOnCentroiEvent the show popup on centroi event
+ */
+ void onShowPopup(ShowPopupOnCentroiEvent showPopupOnCentroiEvent);
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerMap.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerMap.java
index e487256..9f8e73e 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerMap.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerMap.java
@@ -395,9 +395,11 @@ public abstract class OpenLayerMap {
if (layer == null) {
ImageWmsParams imageWMSParams = OLFactory.createOptions();
imageWMSParams.setLayers(layerItem.getName());
+ //imageWMSParams.set("CQL_FILTER", "product_id IN('6165b07202ad3d60e1d26f42','6166ff8002ad3d60e1d26fb7')");
ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
imageWMSOptions.setUrl(layerItem.getMapServerHost());
+
imageWMSOptions.setParams(imageWMSParams);
// imageWMSOptions.setRatio(1.5f);
@@ -405,6 +407,7 @@ public abstract class OpenLayerMap {
LayerOptions layerOptions = OLFactory.createOptions();
layerOptions.setSource(imageWMSSource);
+
// Settings MIN and MAX Resolution
if (layerItem.getMinResolution() != null) {
layerOptions.setMinResolution(layerItem.getMinResolution());
@@ -414,6 +417,7 @@ public abstract class OpenLayerMap {
}
Image wmsLayer = new Image(layerOptions);
+
int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.BASE_WMS)+wmsLayerMap.size()+1;
wmsLayer.setZIndex(zIndex);
// visibleLayerItems
@@ -428,6 +432,33 @@ public abstract class OpenLayerMap {
}
}
+
+ public void setCQLFilterToWMSLayer(String key, String cqlFilterExpression) {
+
+ GWT.log("Getting key: "+key);
+
+ GWT.log("Setting CQL FILTER: "+cqlFilterExpression);
+ Image wmsLayer = wmsLayerMap.get(key);
+
+ GWT.log("WMS layer is: "+wmsLayer);
+
+ //map.removeLayer(wmsLayer);
+
+ ImageWms imageWMSSource = wmsLayer.getSource();
+ ImageWmsParams imageWMSParams = imageWMSSource.getParams();
+
+ if (cqlFilterExpression == null) {
+ imageWMSParams.delete("CQL_FILTER");
+ } else {
+ imageWMSParams.set("CQL_FILTER", cqlFilterExpression);
+ }
+
+ imageWMSSource.updateParams(imageWMSParams);
+ wmsLayer.setSource(imageWMSSource);
+
+ //map.addLayer(wmsLayer);
+
+ }
/**
* Adds the WMS detail layer.
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/GNAImages.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/GNAImages.java
index e327a65..ae46827 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/GNAImages.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/GNAImages.java
@@ -6,23 +6,26 @@ import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
public interface GNAImages extends ClientBundle {
-
+
/** Get access to the css resource during gwt compilation */
@Source("baseIcons.css")
CssResource css();
public static final GNAImages ICONS = GWT.create(GNAImages.class);
-
- /** Our sample image icon. Makes the image resource for the gwt-compiler's css composer accessible */
- @Source("map.png")
- ImageResource map();
-
- @Source("preset_location.png")
- ImageResource preset_location();
-
- @Source("layers.png")
- ImageResource layers();
-
+
+ /**
+ * Our sample image icon. Makes the image resource for the gwt-compiler's css
+ * composer accessible
+ */
+ @Source("map.png")
+ ImageResource map();
+
+ @Source("preset_location.png")
+ ImageResource preset_location();
+
+ @Source("layers.png")
+ ImageResource layers();
+
@Source("loading.gif")
ImageResource loading();
@@ -38,4 +41,10 @@ public interface GNAImages extends ClientBundle {
@Source("world.png")
ImageResource worldIcon();
+ @Source("layer_visible.png")
+ ImageResource layerVisible();
+
+ @Source("layer_invisible.png")
+ ImageResource layerInvisible();
+
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/baseIcons.css b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/baseIcons.css
index d209eca..a4e6cf6 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/baseIcons.css
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/baseIcons.css
@@ -22,4 +22,4 @@
vertical-align: middle;
width: 17px !important;
height: 17px !important;
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_invisible.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_invisible.png
new file mode 100644
index 0000000..68cb999
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_invisible.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_visible.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_visible.png
new file mode 100644
index 0000000..89bee16
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layer_visible.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers.png
index 41fc600..4a90fb3 100644
Binary files a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers.png and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers2.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers2.png
new file mode 100644
index 0000000..41fc600
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/layers2.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map.png
index da4854a..d2c357f 100644
Binary files a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map.png and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map2.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map2.png
new file mode 100644
index 0000000..da4854a
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map2.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map4.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map4.png
new file mode 100644
index 0000000..133e343
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/map4.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/preset_location.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/preset_location.png
index 18f7663..bbc0ddc 100644
Binary files a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/preset_location.png and b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/preset_location.png differ
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.java
index 3a7e45f..37803a9 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.java
@@ -3,6 +3,8 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui;
import java.util.List;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.RecordDV;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
@@ -21,6 +23,8 @@ import com.github.gwtbootstrap.client.ui.NavLink;
import com.github.gwtbootstrap.client.ui.Paragraph;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -87,9 +91,15 @@ public class GeonaDataViewMainPanel extends Composite {
@UiField
Button linkLayers;
+
+ @UiField
+ DropdownButton searchFacilityButton;
@UiField
ScrollPanel overlayLayersPanel;
+
+ @UiField
+ ScrollPanel searchFacilityPanel;
@UiField
HTMLPanel panelAttribution;
@@ -109,6 +119,8 @@ public class GeonaDataViewMainPanel extends Composite {
private HandlerManager applicationBus;
+ private SearchFacilityUI searchFacility;
+
/**
* Instantiates a new geona data view main panel.
@@ -116,7 +128,8 @@ public class GeonaDataViewMainPanel extends Composite {
* @param applicationBus the application bus
* @param mapHeight the map height
*/
- public GeonaDataViewMainPanel(HandlerManager applicationBus, int mapHeight) {
+ public GeonaDataViewMainPanel(HandlerManager applicationBus, int mapHeight, List sortByFields,
+ List searchForFields, SearchingFilter initialSortFilter) {
initWidget(uiBinder.createAndBindUi(this));
this.applicationBus = applicationBus;
mapPanel = new MapPanel(mapHeight + "px");
@@ -142,6 +155,20 @@ public class GeonaDataViewMainPanel extends Composite {
linkPresetLocation.setCustomIconStyle(GNAIcons.CustomIconType.PRESET_LOCATION.get());
linkLayers.setCustomIconStyle(GNAIcons.CustomIconType.LAYERS.get());
+ searchFacility = new SearchFacilityUI(applicationBus, sortByFields, searchForFields, initialSortFilter);
+ searchFacility.setSearchButton(searchFacilityButton);
+ searchFacilityButton.setIcon(IconType.SEARCH);
+ searchFacilityPanel.add(searchFacility);
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+ @Override
+ public void execute() {
+ searchFacilityPanel.getElement().getParentElement().getStyle().setOpacity(0.9);
+
+ }
+
+ });
+
// layersDDB.setToggle(true);
bindEvents();
@@ -163,7 +190,17 @@ public class GeonaDataViewMainPanel extends Composite {
}
}
});
-
+
+ searchFacilityButton.addDomHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ //event.preventDefault();
+ event.stopPropagation();
+
+ }
+ }, ClickEvent.getType());
+
}
/**
@@ -295,7 +332,7 @@ public class GeonaDataViewMainPanel extends Composite {
*
* @return the displyed record
*/
- public RecordDV getDisplyedRecord() {
+ public RecordDV getDisplayedRecord() {
return detailsPanel.getDisplayedRecord();
}
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 c996e06..22022a9 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
@@ -35,12 +35,19 @@
-
+
+
+
+
+ title="Center Map to Location" text="Preset Location"
+ ui:field="linkPresetLocation">
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java
new file mode 100644
index 0000000..d89d048
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java
@@ -0,0 +1,498 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.ui;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
+import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter.LOGICAL_OP;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER;
+import org.gcube.application.geoportalcommon.shared.WhereClause;
+import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
+import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants;
+import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
+import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil;
+
+import com.github.gwtbootstrap.client.ui.Alert;
+import com.github.gwtbootstrap.client.ui.Button;
+import com.github.gwtbootstrap.client.ui.DropdownButton;
+import com.github.gwtbootstrap.client.ui.ListBox;
+import com.github.gwtbootstrap.client.ui.NavLink;
+import com.github.gwtbootstrap.client.ui.TextBox;
+import com.github.gwtbootstrap.client.ui.constants.AlertType;
+import com.github.gwtbootstrap.client.ui.constants.ButtonType;
+import com.github.gwtbootstrap.client.ui.constants.IconType;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.event.shared.HandlerManager;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+
+/**
+ * The Class SearchFacilityUI.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 14, 2021
+ */
+public class SearchFacilityUI extends Composite {
+
+ private static SearchFacilityPanelUiBinder uiBinder = GWT.create(SearchFacilityPanelUiBinder.class);
+
+ protected static final int MIN_LENGHT_SERCHING_STRING = 3;
+
+ @UiField
+ ListBox listBoxSortBy;
+
+ @UiField
+ ListBox listBoxSearchFor;
+
+ @UiField
+ TextBox searchField;
+
+ @UiField
+ NavLink sortByToogle;
+
+ @UiField
+ Button resetSearch;
+
+ @UiField
+ HTMLPanel panelResults;
+
+ @UiField
+ HorizontalPanel toogleSortBy;
+
+ private List searchForFields;
+
+ private List sortByFields;
+
+ private SearchingFilter currentSortFilter;
+
+ private HandlerManager appManagerBus;
+
+ private static final String LABEL_FILTER_SEPARATOR = " - ";
+
+ private ResultSetPaginatedData latestResult;
+
+ private DropdownButton searchFacilityButton;
+
+ /**
+ * The Interface SearchFacilityPanelUiBinder.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Dec 14, 2021
+ */
+ interface SearchFacilityPanelUiBinder extends UiBinder {
+ }
+
+ /**
+ * Instantiates a new search facility UI.
+ *
+ * @param appManagerBus the app manager bus
+ * @param sortByFields the sort by fields
+ * @param searchForFields the search for fields
+ * @param initialSortFilter the initial sort filter
+ */
+ public SearchFacilityUI(HandlerManager appManagerBus, List sortByFields, List searchForFields,
+ SearchingFilter initialSortFilter) {
+ initWidget(uiBinder.createAndBindUi(this));
+ this.searchForFields = searchForFields;
+ this.currentSortFilter = initialSortFilter;
+ this.sortByFields = sortByFields;
+ this.appManagerBus = appManagerBus;
+
+ resetSearch.setType(ButtonType.LINK);
+
+ listBoxSortBy.setWidth("180px");
+ listBoxSearchFor.setWidth("140px");
+
+ bindEvents();
+ }
+
+ /**
+ * To label filter.
+ *
+ * @param itemField the item field
+ * @param direction the direction
+ * @return the string
+ */
+ private String toLabelFilter(ItemField itemField, ORDER direction) {
+ String labelFilter = itemField.getDisplayName() + LABEL_FILTER_SEPARATOR + direction.name();
+ return labelFilter;
+ }
+
+ /**
+ * Bind events.
+ */
+ private void bindEvents() {
+
+ for (ItemField record_FIELD : sortByFields) {
+ if(record_FIELD.isSortable()) {
+ String labelASC = toLabelFilter(record_FIELD, ORDER.ASC);
+ String labelDESC = toLabelFilter(record_FIELD, ORDER.DESC);
+ listBoxSortBy.addItem(labelASC);
+ listBoxSortBy.addItem(labelDESC);
+ }
+ }
+
+ listBoxSortBy.addChangeHandler(new ChangeHandler() {
+
+ @Override
+ public void onChange(ChangeEvent event) {
+ if(latestResult!=null && latestResult.getData().size()>0) {
+ doSearchEvent();
+ }
+ }
+ });
+
+ for (ItemField record_FIELD : searchForFields) {
+ GWT.log("search for: "+record_FIELD);
+ if(record_FIELD.isSearchable()) {
+ listBoxSearchFor.addItem(record_FIELD.getDisplayName());
+ }
+ }
+
+ listBoxSearchFor.addChangeHandler(new ChangeHandler() {
+
+ @Override
+ public void onChange(ChangeEvent event) {
+ if (searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) {
+ doSearchEvent();
+ }
+
+ }
+ });
+
+ sortByToogle.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ if (toogleSortBy.isVisible())
+ toogleSortBy.setVisible(false);
+ else
+ toogleSortBy.setVisible(true);
+
+ }
+ });
+
+ searchField.addKeyPressHandler(new KeyPressHandler() {
+
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ if (com.google.gwt.event.dom.client.KeyCodes.KEY_ENTER == event.getCharCode()) {
+ GWT.log(searchField.getText());
+ doSearchEvent();
+ }
+
+ }
+ });
+
+ resetSearch.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ searchField.setText("");
+ resetSearch.setVisible(false);
+ panelResults.clear();
+ latestResult = null;
+ appManagerBus.fireEvent(new SearchPerformedEvent(null,true));
+ setSearchEnabled(false);
+ }
+ });
+
+ }
+
+ private void setSearchEnabled(boolean bool) {
+ if(bool) {
+ searchFacilityButton.getElement().addClassName("highlight-button");
+ }
+ else {
+ searchFacilityButton.getElement().removeClassName("highlight-button");
+ }
+ }
+
+ /**
+ * Search concessioni.
+ */
+ private void searchConcessioni() {
+
+ SearchingFilter filter = getCurrentSortFilter();
+ panelResults.clear();
+ panelResults.add(new HTML("
"));
+ panelResults.add(new LoaderIcon("Searching..."));
+ GeoportalDataViewerServiceAsync.Util.getInstance().getListConcessioni(0, 30, filter, false,
+ new AsyncCallback() {
+
+
+
+ @Override
+ public void onFailure(Throwable caught) {
+// showLoading(false);
+// Window.alert(caught.getMessage());
+ panelResults.clear();
+ panelResults.add(new HTML("
"));
+ Alert alert = new Alert("Error on searching. Please, refresh or change the search");
+ alert.setType(AlertType.ERROR);
+ alert.setClose(false);
+ panelResults.add(alert);
+ }
+
+ @Override
+ public void onSuccess(ResultSetPaginatedData result) {
+
+ appManagerBus.fireEvent(new SearchPerformedEvent(result.getData(),false));
+ setSearchEnabled(true);
+ latestResult = result;
+
+ panelResults.clear();
+ panelResults.add(new HTML("
"));
+
+ if (result.getData().size() == 0) {
+ panelResults.add(new HTML("No result found"));
+ return;
+ }
+
+ FlexTable ft = new FlexTable();
+ ft.getElement().setClassName("table-results");
+ int i = 1;
+ ft.setWidget(0, i, new HTML("Nome Progetto"));
+
+ String selValue = listBoxSearchFor.getSelectedValue().toLowerCase();
+
+ boolean addIntroduction = false;
+ if(selValue.startsWith("proj") || selValue.startsWith("any")) {
+ ft.setWidget(0, ++i, new HTML("Introduzione"));
+ addIntroduction = true;
+ }
+
+ boolean addStaff = false;
+ if(selValue.startsWith("director")) {
+ ft.setWidget(0, ++i, new HTML("Autori"));
+ ft.setWidget(0, ++i, new HTML("Responsabile"));
+ ft.setWidget(0, ++i, new HTML("Editore"));
+ ft.setWidget(0, ++i, new HTML("Titolari"));
+ ft.setWidget(0, ++i, new HTML("Contributore"));
+ addStaff = true;
+ }
+ boolean addParole = false;
+ if(selValue.startsWith("keyword")) {
+ ft.setWidget(0, ++i, new HTML("Parole Libere"));
+ ft.setWidget(0, ++i, new HTML("Parole Cronologia"));
+ addParole = true;
+ }
+
+ i = 1;
+ for (ConcessioneDV concessione : result.getData()) {
+ int j = -1;
+
+ NavLink locateOnMap = new NavLink("Show");
+ locateOnMap.setTitle("Locate on the Map and show details");
+ locateOnMap.setIcon(IconType.MAP_MARKER);
+
+ locateOnMap.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ GeoNaItemRef gir = new GeoNaItemRef(concessione.getItemId(), GeoportalDataViewerConstants.RECORD_TYPE.CONCESSIONE.toString());
+ appManagerBus.fireEvent(new ShowDetailsEvent(gir, null, null));
+ appManagerBus.fireEvent(new ShowPopupOnCentroiEvent(concessione));
+
+ }
+ });
+
+ ft.setWidget(i, ++j, locateOnMap);
+
+
+ ft.setWidget(i, ++j, new HTML(concessione.getNome()));
+ if(addIntroduction)
+ ft.setWidget(i, ++j, new HTML(StringUtil.ellipsize(concessione.getIntroduzione(), 200)));
+
+ if(addStaff) {
+ ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getAuthors())));
+ ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getResponsabile()))));
+ ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getEditore()))));
+ ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getTitolari())));
+ ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getContributore()))));
+ }
+
+ if(addParole) {
+ ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getParoleChiaveLibere())));
+ ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getParoleChiaveICCD())));
+ }
+
+
+// List listImg = concessione.getImmaginiRappresentative();
+// GWT.log(listImg.toString());
+// boolean imagePreviewFound = false;
+// if (listImg != null && listImg.size() > 0) {
+//
+// UploadedImageDV uImg = listImg.get(0);
+//
+// if (uImg != null && uImg.getListWsContent() != null
+// && uImg.getListWsContent().size() > 0) {
+// WorkspaceContentDV wsc = uImg.getListWsContent().get(0);
+// String image = "";
+// ft.setWidget(i, 2, new HTML(image));
+// imagePreviewFound = true;
+// }
+// }
+//
+// if (!imagePreviewFound) {
+// ft.setWidget(i, 2, new Image(GNAImages.ICONS.italyIcon()));
+// }
+
+ i++;
+ }
+
+ panelResults.add(ft);
+
+ }
+ });
+ }
+
+ /**
+ * To display authors.
+ *
+ * @param listValues the list values
+ * @return the string
+ */
+ private String toDisplayList(List listValues) {
+ String toDisplay = "";
+ if (listValues == null)
+ return toDisplay;
+
+ for (String author : listValues) {
+ toDisplay += author + "; ";
+ }
+ return toDisplay;
+ }
+
+ /**
+ * Do search event.
+ */
+ private void doSearchEvent() {
+ String searchText = searchField.getText();
+ if (searchText.length() < MIN_LENGHT_SERCHING_STRING) {
+ Window.alert("Please enter at least " + MIN_LENGHT_SERCHING_STRING + " characters");
+ return;
+ }
+
+ resetSearch.setVisible(true);
+ // appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE,
+ // getCurrentSortFilter()));
+
+ searchConcessioni();
+ }
+
+ /**
+ * To sort filter.
+ *
+ * @param labelFilter the label filter
+ * @return the searching filter
+ */
+ public SearchingFilter toSortFilter(String labelFilter) {
+ GWT.log("toSortFilter for label " + labelFilter);
+ String[] array = labelFilter.split(LABEL_FILTER_SEPARATOR);
+
+ SearchingFilter sortFilter = null;
+ try {
+ ItemField recordField = null;
+ for (ItemField value : sortByFields) {
+ if (array[0].equalsIgnoreCase(value.getDisplayName())) {
+ recordField = value;
+ break;
+ }
+ }
+ ORDER orderField = ORDER.valueOf(array[1]);
+ sortFilter = new SearchingFilter(Arrays.asList(recordField), orderField);
+ } catch (Exception e) {
+
+ }
+ GWT.log("toSortFilter Got " + sortFilter);
+ return sortFilter;
+
+ }
+
+ /**
+ * Built searching filter.
+ *
+ * @return the searching filter
+ */
+ private SearchingFilter builtSearchingFilter() {
+ SearchingFilter searchingFilter = toSortFilter(listBoxSortBy.getSelectedValue());
+ String searchText = searchField.getText();
+ if (searchText != null && !searchText.isEmpty()) {
+ Map searchInto = new HashMap();
+
+ List listOfSeachingFields = new ArrayList();
+
+ for (ItemField recordField : searchForFields) {
+ if (recordField.getDisplayName().equals(listBoxSearchFor.getSelectedValue())) {
+ listOfSeachingFields = recordField.getJsonFields();
+ continue;
+ }
+ }
+
+ if(listOfSeachingFields.size()==0) {
+ listOfSeachingFields.add("nome");
+ }
+ for (String fieldname : listOfSeachingFields) {
+ searchInto.put(fieldname, searchText);
+ }
+
+ WhereClause where = new WhereClause();
+ where.setSearchInto(searchInto);
+ where.setOperator(LOGICAL_OP.OR);
+
+ //THIS CLAUSE IS ADDED IN ORDER TO SEARCH ONLY PUBLISHED PRODUCT (WITH SUCCESS)
+ Map searchInto2 = new HashMap();
+ searchInto2.put("report.status", "PASSED");
+ WhereClause where2 = new WhereClause(LOGICAL_OP.AND, searchInto2);
+
+ searchingFilter.setConditions(Arrays.asList(where, where2));
+ }
+ return searchingFilter;
+ }
+
+ /**
+ * Gets the current sort filter.
+ *
+ * @return the current sort filter
+ */
+ public SearchingFilter getCurrentSortFilter() {
+ currentSortFilter = builtSearchingFilter();
+ GWT.log("currentSortFilter: " + currentSortFilter);
+ return currentSortFilter;
+ }
+
+ public void setSearchButton(DropdownButton searchFacilityButton) {
+ this.searchFacilityButton = searchFacilityButton;
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.ui.xml
new file mode 100644
index 0000000..c69f3ab
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.ui.xml
@@ -0,0 +1,60 @@
+
+
+
+ .important {
+ font-weight: bold;
+ }
+
+ .container-panel {
+ padding: 10px;
+ }
+
+ .add-margin-right {
+ margin-right: 5px;
+ }
+
+ .add-margin-right-23 {
+ margin-right: 23px;
+ }
+
+ .margin-top-5 {
+ margin-top: 5px;
+ }
+ .font-size-12 {
+ font-size: 12px;
+ }
+
+
+
+
+
+
+ Search for:
+
+
+
+ Reset
+
+
+
+ Sort Results
+
+ Sort by:
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/DragDropLayer.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/DragDropLayer.java
index cc6deb7..6c53001 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/DragDropLayer.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/DragDropLayer.java
@@ -4,18 +4,20 @@ import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.DO_LAYER_ACTION;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.SwapLayer;
+import org.gcube.portlets.user.geoportaldataviewer.client.resources.GNAImages;
import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import com.github.gwtbootstrap.client.ui.Button;
-import com.github.gwtbootstrap.client.ui.CheckBox;
import com.github.gwtbootstrap.client.ui.Label;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.github.gwtbootstrap.client.ui.constants.LabelType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DragLeaveEvent;
import com.google.gwt.event.dom.client.DragLeaveHandler;
import com.google.gwt.event.dom.client.DragOverEvent;
@@ -24,11 +26,11 @@ import com.google.gwt.event.dom.client.DragStartEvent;
import com.google.gwt.event.dom.client.DragStartHandler;
import com.google.gwt.event.dom.client.DropEvent;
import com.google.gwt.event.dom.client.DropHandler;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
@@ -38,25 +40,28 @@ public class DragDropLayer extends FlowPanel {
private static DragDropLayer draggingTarget = null;
final boolean droppable;
private Label labelLayerName;
- private CheckBox checkBoxVisibility = new CheckBox();
+ private Image imgLayerVisible = new Image(GNAImages.ICONS.layerVisible());
+ private Image imgLayerInvisible = new Image(GNAImages.ICONS.layerInvisible());
private Button draggableButton = new Button();
private HandlerManager applicationBus;
private LayerObject layerObject;
private LayerItem layerItem;
+ private boolean layerVisibility = true;
+ private HTML buttonLayerVisibility = new HTML();
public DragDropLayer(HandlerManager applicationBus, LayerObject layerObject, boolean draggable, boolean droppable) {
this.applicationBus = applicationBus;
this.layerObject = layerObject;
this.layerItem = layerObject.getLayerItem();
-
+
String layerName = StringUtil.fullNameToLayerName(layerItem.getName(), ":");
-
+
this.labelLayerName = new Label(layerName);
this.labelLayerName.setTitle(layerItem.getName());
this.labelLayerName.setType(LabelType.INFO);
-
+
BaseConcessioneDV refConcessione = layerObject.getSourceConcessione();
- String nameConcessione = StringUtil.ellipsize(refConcessione.getNome(),40);
+ String nameConcessione = StringUtil.ellipsize(refConcessione.getNome(), 40);
com.google.gwt.user.client.ui.Label labelConcessione = new com.google.gwt.user.client.ui.Label(nameConcessione);
labelConcessione.setTitle(refConcessione.getNome());
@@ -79,33 +84,47 @@ public class DragDropLayer extends FlowPanel {
}
RangeSlider rs = new RangeSlider(applicationBus, layerItem);
- rs.getElement().addClassName("range-slider ");
+ rs.getElement().addClassName("range-slider");
FlexTable ft = new FlexTable();
ft.setWidget(0, 0, draggableButton);
draggableButton.setTitle("Drag and Drop me up or down to change my position on the Map");
- checkBoxVisibility.getElement().getStyle().setMarginLeft(10, Unit.PX);
- checkBoxVisibility.setValue(true);
- //labelLayerName.getElement().getStyle().setMarginLeft(10, Unit.PX);
- ft.setWidget(0, 1, checkBoxVisibility);
+ imgLayerVisible.getElement().addClassName("layer-visibility-st");
+ imgLayerInvisible.getElement().addClassName("layer-visibility-st");
+ setLayerVisibilityButtonImage();
+
+ // labelLayerName.getElement().getStyle().setMarginLeft(10, Unit.PX);
+ ft.setWidget(0, 1, buttonLayerVisibility);
ft.setWidget(0, 2, labelConcessione);
ft.setWidget(1, 2, labelLayerName);
ft.setWidget(2, 2, new SimplePanel(rs));
add(ft);
draggableButton.setIcon(IconType.MOVE);
- checkBoxVisibility.addValueChangeHandler(new ValueChangeHandler() {
+ buttonLayerVisibility.addClickHandler(new ClickHandler() {
@Override
- public void onValueChange(ValueChangeEvent event) {
- DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.VISIBILITY, layerItem);
- dae.setVisibility(checkBoxVisibility.getValue());
+ public void onClick(ClickEvent event) {
+ layerVisibility = !layerVisibility;
+ setLayerVisibilityButtonImage();
+ DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.VISIBILITY,
+ layerItem);
+ dae.setVisibility(layerVisibility);
applicationBus.fireEvent(dae);
-
}
});
}
+ private void setLayerVisibilityButtonImage() {
+ buttonLayerVisibility.getElement().removeAllChildren();
+ if (layerVisibility) {
+ buttonLayerVisibility.getElement().appendChild(imgLayerVisible.getElement());
+ } else {
+ buttonLayerVisibility.getElement().appendChild(imgLayerInvisible.getElement());
+ }
+
+ }
+
private void initDrag() {
draggableButton.getElement().setDraggable(Element.DRAGGABLE_TRUE);
@@ -156,9 +175,9 @@ public class DragDropLayer extends FlowPanel {
source = dragging;
int sourceIndex = tree.getWidgetIndex(source);
int targetIndex = tree.getWidgetIndex(draggingTarget);
-
- GWT.log("sourceIndex: " + sourceIndex+", sourceItem: "+dragging.getLayerItem().getName());
- GWT.log("targetIndex: " + targetIndex+", targetItem: "+draggingTarget.getLayerItem().getName());
+
+ GWT.log("sourceIndex: " + sourceIndex + ", sourceItem: " + dragging.getLayerItem().getName());
+ GWT.log("targetIndex: " + targetIndex + ", targetItem: " + draggingTarget.getLayerItem().getName());
if (sourceIndex != targetIndex && targetIndex >= 0) {
tree.remove(source);
target = tree;
@@ -168,8 +187,10 @@ public class DragDropLayer extends FlowPanel {
// target.setState(true);
DoActionOnDetailLayersEvent actionSwapLayers = new DoActionOnDetailLayersEvent(
DO_LAYER_ACTION.SWAP, layerItem);
- SwapLayer swapLS = new DoActionOnDetailLayersEvent.SwapLayer(dragging.getLayerItem(), sourceIndex);
- SwapLayer swapLT = new DoActionOnDetailLayersEvent.SwapLayer(draggingTarget.getLayerItem(), targetIndex);
+ SwapLayer swapLS = new DoActionOnDetailLayersEvent.SwapLayer(dragging.getLayerItem(),
+ sourceIndex);
+ SwapLayer swapLT = new DoActionOnDetailLayersEvent.SwapLayer(draggingTarget.getLayerItem(),
+ targetIndex);
actionSwapLayers.setSwapLayers(swapLS, swapLT);
applicationBus.fireEvent(actionSwapLayers);
}
@@ -179,7 +200,7 @@ public class DragDropLayer extends FlowPanel {
}
}, DropEvent.getType());
}
-
+
public LayerItem getLayerItem() {
return layerItem;
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/map/MapView.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/map/MapView.java
index 5fde1df..26059cf 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/map/MapView.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/map/MapView.java
@@ -67,7 +67,7 @@ public class MapView extends Composite {
@UiField
HorizontalPanel coordinatePanel;
- private LightOpenLayerMap lightOLSM;
+ private LightOpenLayerMap lightOLM;
private HTML attributionDiv = null;
@@ -92,14 +92,14 @@ public class MapView extends Composite {
@Override
public void execute() {
- lightOLSM = new LightOpenLayerMap(theMapId);
+ lightOLM = new LightOpenLayerMap(theMapId);
setBaseLayers();
// EPSG_3857 LOCATION TO ITALY
Location italyLocation = ExtentMapUtil.getLocation(PLACE.ITALY);
Coordinate transformedCenterCoordinate = italyLocation.getCoordinate(MAP_PROJECTION.EPSG_3857);
- lightOLSM.setCenter(transformedCenterCoordinate);
- lightOLSM.setZoom(GeoportalDataViewerConstants.LIGHT_MAP_ITALY_FIT_ZOOM_ON);
+ lightOLM.setCenter(transformedCenterCoordinate);
+ lightOLM.setZoom(GeoportalDataViewerConstants.LIGHT_MAP_ITALY_FIT_ZOOM_ON);
}
});
}
@@ -127,7 +127,7 @@ public class MapView extends Composite {
@Override
public void onValueChange(ValueChangeEvent event) {
- lightOLSM.changeBaseMap(baseMapLayer);
+ lightOLM.changeBaseMap(baseMapLayer);
setMapAttribution(baseMapLayer);
}
});
@@ -193,9 +193,9 @@ public class MapView extends Composite {
@Override
public void execute() {
- if (lightOLSM != null) {
- lightOLSM.addPoint(coordinate, showCoordinateText, true);
- lightOLSM.getMap().getView().setCenter(coordinate);
+ if (lightOLM != null) {
+ lightOLM.addPoint(coordinate, showCoordinateText, true);
+ lightOLM.getMap().getView().setCenter(coordinate);
}
}
});
@@ -232,11 +232,11 @@ public class MapView extends Composite {
null);
}
- lightOLSM.addWMSLayer(mapServerHost, layerName, theBBOX);
+ lightOLM.addWMSLayer(mapServerHost, layerName, theBBOX);
if (ew != null) {
- lightOLSM.getMap().getView().fit(ew);
+ lightOLM.getMap().getView().fit(ew);
}
@@ -245,8 +245,8 @@ public class MapView extends Composite {
}
- public LightOpenLayerMap getLightOLSM() {
- return lightOLSM;
+ public LightOpenLayerMap getLightOLM() {
+ return lightOLM;
}
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/products/concessioni/LayerConcessioneView.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/products/concessioni/LayerConcessioneView.java
index c1743c9..f60b3b0 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/products/concessioni/LayerConcessioneView.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/products/concessioni/LayerConcessioneView.java
@@ -110,7 +110,7 @@ public class LayerConcessioneView extends Composite {
}
// DOWNLOAD the OSM + layer by canvas
- downloadMap(mapView.getLightOLSM().getMap(), mapView.getPanelMapElementId(), htmlLinkId,
+ downloadMap(mapView.getLightOLM().getMap(), mapView.getPanelMapElementId(), htmlLinkId,
filename, mimeType);
// mapExport(mapView.getLightOLSM().getMap(), mapView.getPanelMapElementId());
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java
index fcad66e..953db43 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java
@@ -14,11 +14,14 @@ import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
import org.gcube.application.geoportal.common.model.legacy.UploadedImage;
import org.gcube.application.geoportalcommon.ConvertToDataViewModel;
-import org.gcube.application.geoportalcommon.GeoNaDataViewerProfileReader;
import org.gcube.application.geoportalcommon.GeoportalCommon;
-import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile;
+import org.gcube.application.geoportalcommon.MongoServiceCommon;
+import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
+import org.gcube.application.geoportalcommon.shared.ItemField;
import org.gcube.application.geoportalcommon.shared.LayerItem;
+import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
+import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
@@ -67,6 +70,27 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
private static final String CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE = "MAP_IMAGE_PREVIEW_FOR_CONCESSIONE";
+ /**
+ * Gets the GNA data viewe config profile.
+ *
+ * @return the GNA data viewe config profile
+ * @throws Exception the exception
+ */
+ private GNADataViewerConfigProfile getGNADataVieweConfigProfile() throws Exception {
+
+ GNADataViewerConfigProfile profile = SessionUtil.getGNADataViewerConfigProfile(getThreadLocalRequest());
+ if (profile == null) {
+ LOG.info(GNADataViewerConfigProfile.class.getSimpleName() + " is null, loading configurations from IS");
+ //to be sure
+ SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
+ GeoportalCommon geoportalComm = new GeoportalCommon();
+ profile = geoportalComm.readGNADataViewerConfig(null);
+ } else {
+ LOG.info(GNADataViewerConfigProfile.class.getSimpleName() + " read from session");
+ }
+ return profile;
+ }
+
/**
* Parses the wms request.
*
@@ -88,8 +112,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
* @return the geo information for WMS request
* @throws Exception the exception
*/
- public static GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsLink, String layerName)
- throws Exception {
+ public GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsLink, String layerName) throws Exception {
try {
WMSUrlValidator validator = new WMSUrlValidator(wmsLink, layerName);
String wmsServiceHost = validator.getWmsServiceHost();
@@ -322,7 +345,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
if (layerPosizionamento != null) {
if (!GeoNACheckAccessPolicy.isAccessible(layerPosizionamento.getPolicy(), userName)) {
concessionDV.setPosizionamentoScavo(null);
- LOG.info("Posizionamento di Scavo is not accessible by current user: "+userName);
+ LOG.info("Posizionamento di Scavo is not accessible by current user: " + userName);
}
}
@@ -332,8 +355,9 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
for (LayerConcessioneDV layerDV : listLayersDV) {
if (GeoNACheckAccessPolicy.isAccessible(layerDV.getPolicy(), userName)) {
accessibleListLayersDV.add(layerDV);
- }else {
- LOG.info("(Pianta) Layer "+layerDV.getLayerName()+" is not accessible by current user: "+userName);
+ } else {
+ LOG.info("(Pianta) Layer " + layerDV.getLayerName()
+ + " is not accessible by current user: " + userName);
}
}
concessionDV.setPianteFineScavo(accessibleListLayersDV);
@@ -343,7 +367,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
if (abstractRS != null) {
if (!GeoNACheckAccessPolicy.isAccessible(abstractRS.getPolicy(), userName)) {
concessionDV.setAbstractRelazioneScavo(null);
- LOG.info("Abstract relazione is not accessible by current user: "+userName);
+ LOG.info("Abstract relazione is not accessible by current user: " + userName);
}
}
@@ -351,7 +375,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
if (relazioneScavo != null) {
if (!GeoNACheckAccessPolicy.isAccessible(relazioneScavo.getPolicy(), userName)) {
concessionDV.setRelazioneScavo(null);
- LOG.info("Relazione scavo is not accessible by current user: "+userName);
+ LOG.info("Relazione scavo is not accessible by current user: " + userName);
}
}
@@ -364,8 +388,9 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
if (GeoNACheckAccessPolicy.isAccessible(uploadedImageDV.getPolicy(), userName)) {
accessibleListImages.add(uploadedImageDV);
- }else {
- LOG.info("Immagine "+uploadedImageDV.getTitolo()+" is not accessible by current user: "+userName);
+ } else {
+ LOG.info("Immagine " + uploadedImageDV.getTitolo()
+ + " is not accessible by current user: " + userName);
}
}
@@ -451,8 +476,8 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
throw new Exception("The input parameter layerType is null or empty");
SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
- GeoNaDataViewerProfileReader gdvp = new GeoNaDataViewerProfileReader("geoportal-data-viewer-app");
- GeoNaDataViewerProfile profile = gdvp.readProfileFromInfrastrucure();
+
+ GNADataViewerConfigProfile profile = getGNADataVieweConfigProfile();
LOG.info("Read profile: " + profile);
String lowerLayerType = layerType.toLowerCase();
@@ -477,12 +502,11 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
* @throws Exception the exception
*/
@Override
- public GeoNaDataViewerProfile getGeoNaDataViewProfile() throws Exception {
+ public GNADataViewerConfigProfile getGeoNaDataViewProfile() throws Exception {
LOG.info("getGeoNaDataViewProfile called");
SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
- GeoportalCommon gc = new GeoportalCommon();
- org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile profile = gc.getGeoNaDataViewProfile(null);
+ GNADataViewerConfigProfile profile = getGNADataVieweConfigProfile();
LOG.info("Returning profile: " + profile);
return profile;
}
@@ -666,17 +690,73 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
}
-
+
+ /**
+ * Gets the list base layers.
+ *
+ * @return the list base layers
+ */
@Override
public List getListBaseLayers() {
LOG.info("getListBaseLayers called");
List listBL = new ArrayList();
- //Setting scope in the cuurent thread
+ // Setting scope in the cuurent thread
SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
listBL = SessionUtil.getGNABaseMaps(this.getThreadLocalRequest());
- LOG.info("getListBaseLayers returning "+listBL.size() +" base maps");
+ LOG.info("getListBaseLayers returning " + listBL.size() + " base maps");
return listBL;
}
+ // TODO THIS PART REQUIRES THE JSON MAPPING based on keys read from gCube Meta
+
+ /**
+ * List of fields for searching.
+ *
+ * @return the list
+ * @throws Exception the exception
+ */
+ @Override
+ public List listOfFieldsForSearching() throws Exception {
+ LOG.info("listOfFieldsForSearching called");
+ SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
+ GNADataViewerConfigProfile profile = getGNADataVieweConfigProfile();
+ return profile.getListItemFields();
+ }
+
+ /**
+ * Gets the list concessioni.
+ *
+ * @param start the start
+ * @param limit the limit
+ * @param filter the filter
+ * @param reloadFromService the reload from service
+ * @return the list concessioni
+ * @throws Exception the exception
+ */
+ @Override
+ public ResultSetPaginatedData getListConcessioni(Integer start, Integer limit, SearchingFilter filter,
+ boolean reloadFromService) throws Exception {
+ LOG.info("getListConcessioni called wit start: " + start + ", limit: " + limit + ", filter: " + filter);
+
+ try {
+
+ SessionUtil.getCurrentContext(getThreadLocalRequest(), true);
+ MongoServiceCommon serviceCommon = new MongoServiceCommon();
+ // TODO MUST BE REPLACED BY COUNT
+ List listOfConcessioni = SessionUtil.getListOfConcessioni(getThreadLocalRequest(),
+ reloadFromService);
+ int listConcessioniSize = listOfConcessioni.size();
+
+ ResultSetPaginatedData searchedData = serviceCommon.queryOnMongo(listConcessioniSize, start, limit, filter,
+ "concessione");
+ return searchedData;
+
+ } catch (Exception e) {
+ LOG.error("Error on loading paginated and filtered list of concessioni: ", e);
+ throw new Exception("Error occurred on loading list of Concessioni. Error: " + e.getMessage());
+ }
+
+ }
+
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/SessionUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/SessionUtil.java
index 301178d..118cf7a 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/SessionUtil.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/SessionUtil.java
@@ -3,11 +3,17 @@
*/
package org.gcube.portlets.user.geoportaldataviewer.server.util;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import org.gcube.application.geoportal.common.model.legacy.Concessione;
+import org.gcube.application.geoportal.common.rest.MongoConcessioni;
+import org.gcube.application.geoportalcommon.MongoServiceCommon;
+import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.portal.PortalContext;
import org.gcube.common.scope.api.ScopeProvider;
@@ -39,6 +45,8 @@ public class SessionUtil {
private static final String URL_SHORTENER_SERVICE = "URL_SHORTENER_SERVICE";
private static final String LIST_BASE_MAPS_LAYERS = "LIST_BASE_MAPS_LAYERS";
+ private static final String LIST_OF_CONCESSIONI = "LIST_OF_CONCESSIONI_DATA_VIEWER";
+ private static final String GNA_DATAVIEWER_CONFIG_PROFILE = "GNA_DATAVIEWER_CONFIG_PROFILE";
/**
* Checks if is into portal.
@@ -197,4 +205,69 @@ public class SessionUtil {
}
return lstBML;
}
+
+ /**
+ * Gets the list of concessioni.
+ *
+ * @param httpServletRequest the http servlet request
+ * @param reloadFromService the reload from service
+ * @return the list of concessioni
+ * @throws Exception the exception
+ */
+ public static List getListOfConcessioni(HttpServletRequest httpServletRequest,
+ boolean reloadFromService) throws Exception {
+ HttpSession session = httpServletRequest.getSession();
+ List listOfConcessioni = (List) session.getAttribute(LIST_OF_CONCESSIONI);
+
+ // setting null to force reloading from service
+ if (reloadFromService)
+ listOfConcessioni = null;
+
+ if (listOfConcessioni == null) {
+ listOfConcessioni = new ArrayList();
+ LOG.info("Loading list of concessione from client mongo");
+ SessionUtil.getCurrentContext(httpServletRequest, true);
+ MongoServiceCommon serviceUtil = new MongoServiceCommon();
+ MongoConcessioni clientMongo = serviceUtil.getInstanceMongoConcessioni();
+
+ Iterator concessioni = clientMongo.getList();
+ if (concessioni != null) {
+ while (concessioni.hasNext()) {
+ Concessione concessione = (Concessione) concessioni.next();
+ listOfConcessioni.add(concessione);
+
+ }
+ }
+ // LOG.debug("Got list of concessioni from client mongo: " + listOfConcessioni);
+ session.setAttribute(LIST_OF_CONCESSIONI, listOfConcessioni);
+ LOG.info("Saved in session list of concessioni from client mongo with size: " + listOfConcessioni.size());
+ } else
+ LOG.info("list of concessioni presents in session, using it");
+
+ LOG.info("read list of concessioni with size: " + listOfConcessioni.size());
+ return listOfConcessioni;
+ }
+
+ /**
+ * Gets the GNA data viewer config profile.
+ *
+ * @param httpServletRequest the http servlet request
+ * @return the GNA data viewer config profile
+ */
+ public static GNADataViewerConfigProfile getGNADataViewerConfigProfile(HttpServletRequest httpServletRequest) {
+ HttpSession session = httpServletRequest.getSession();
+ return (GNADataViewerConfigProfile) session.getAttribute(GNA_DATAVIEWER_CONFIG_PROFILE);
+ }
+
+ /**
+ * Sets the list item fields config.
+ *
+ * @param httpServletRequest the http servlet request
+ * @param gNADVConfigProfile the g NADV config profile
+ */
+ public static void setListItemFieldsConfig(HttpServletRequest httpServletRequest,
+ GNADataViewerConfigProfile gNADVConfigProfile) {
+ HttpSession session = httpServletRequest.getSession();
+ session.setAttribute(GNA_DATAVIEWER_CONFIG_PROFILE, gNADVConfigProfile);
+ }
}
diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css
index ae17cf6..f7ce891 100644
--- a/src/main/webapp/GeoportalDataViewer.css
+++ b/src/main/webapp/GeoportalDataViewer.css
@@ -450,4 +450,64 @@ body {
top: 50%;
left: 50%;
}
+
+
+/*******************************************/
+
+.search-facility {
+ width: 600px;
+ max-height: 700px;
+}
+
+.search-textbox {
+ padding: 4px 14px !important;
+ margin-bottom: 0 !important;
+ margin-left: 2px !important;
+ margin-right: 2px !important;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;
+ font-size: 13px !important;
+ font-weight: normal !important;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px !important;
+ width: 250px !important;
+}
+
+.table-results {
+ table-layout: fixed;
+ /*width: 600px;*/
+}
+
+.table-results td {
+ padding: 5px;
+ /* For Firefox */
+ white-space: pre-wrap;
+ /*word-break: break-all;*/
+ /* For Chrome and IE */
+ word-wrap: break-word;
+}
+
+.table-results tr:nth-child(1) {
+ font-weight: bolder;
+ color: #333;
+ font-style: italic
+}
+
+.table-results tr {
+ border-bottom: 1px solid #ccc;
+}
+
+.table-results td:nth-child(1) {
+}
+
+.highlight-button {
+ border: 2px solid #08c;
+ border-radius: 4px;
+ box-shadow: 2px 2px #08c;
+}
+.layer-visibility-st {
+ padding-left: 7px;
+ padding-right: 5px;
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/IAMClient.java b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/IAMClient.java
index 0aa3b91..b45ae06 100644
--- a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/IAMClient.java
+++ b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/IAMClient.java
@@ -1,7 +1,5 @@
package org.gcube.portlets.user.geoportaldataviewer;
-import java.util.List;
-
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.IAMClientCredentialsReader;