diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5fcfdb4..1576d21 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@
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).
+## [v3.2.0-SNAPSHOT] - 2023-01-31
+
+#### Enhancements
+
+- [#24506] Added Locate/Highlight the Layer facility on the Map
+
## [v3.1.0] - 2023-01-12
#### Enhancements
diff --git a/pom.xml b/pom.xml
index 8c2f982..d4dda5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,13 +14,13 @@
org.gcube.portlets.user
geoportal-data-viewer-app
war
- 3.1.0
+ 3.2.0-SNAPSHOT
GeoPortal Data Viewer App
The GeoPortal Data Viewer App is an application to access, discovery and navigate the Geoportal projects/documents by a Web-Map Interface
- 2.9.0
+ 2.10.0
PRETTY
2.6.2
${project.build.directory}/${project.build.finalName}
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 c142d36..1ce4008 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
@@ -2,13 +2,16 @@ package org.gcube.portlets.user.geoportaldataviewer.client;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences;
+import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV;
+import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
import org.gcube.application.geoportalcommon.shared.geoportal.project.RelationshipDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
@@ -59,6 +62,7 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
import org.gcube.portlets.user.geoportaldataviewer.shared.ViewerConfiguration;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import com.github.gwtbootstrap.client.ui.Popover;
import com.github.gwtbootstrap.client.ui.constants.Placement;
@@ -80,6 +84,13 @@ import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import ol.Coordinate;
+import ol.Feature;
+import ol.OLFactory;
+import ol.format.GeoJson;
+import ol.format.GeoJsonFeatureOptions;
+import ol.format.GeoJsonOptions;
+import ol.proj.Projection;
+import ol.proj.ProjectionOptions;
/**
* Entry point classes define onModuleLoad()
.
@@ -140,6 +151,9 @@ public class GeoportalDataViewer implements EntryPoint {
private boolean initApplication;
+ // A cache (Layer_ID, GeoJSON) of layer features loaded via GetFeature Request
+ private HashMap layerFeaturesCache = new HashMap();
+
/**
* This is the entry point method.
*/
@@ -185,6 +199,9 @@ public class GeoportalDataViewer implements EntryPoint {
}
+ /**
+ * Inits the application.
+ */
private void initApplication() {
initApplication = true;
@@ -285,10 +302,20 @@ public class GeoportalDataViewer implements EntryPoint {
RootPanel.get(APP_DIV).add(attributionDiv);
}
+ /**
+ * Gets the status.
+ *
+ * @return the status
+ */
public static ViewerStatus getStatus() {
return viewerStatus;
}
+ /**
+ * Gets the list base map layers.
+ *
+ * @return the list base map layers
+ */
public static List getListBaseMapLayers() {
return listBaseMapLayers;
}
@@ -305,6 +332,11 @@ public class GeoportalDataViewer implements EntryPoint {
}
+ /**
+ * Gets the client height.
+ *
+ * @return the client height
+ */
public int getClientHeight() {
RootPanel principalDiv = RootPanel.get(APP_DIV);
int topBorder = principalDiv.getAbsoluteTop();
@@ -542,7 +574,7 @@ public class GeoportalDataViewer implements EntryPoint {
applicationBus.addHandler(DoActionOnDetailLayersEvent.TYPE, new DoActionOnDetailLayersEventHandler() {
@Override
- public void onDoActionOnDetailLayers(DoActionOnDetailLayersEvent doLayerActionEvent) {
+ public void onDoActionOnDetailLayers(final DoActionOnDetailLayersEvent doLayerActionEvent) {
DO_LAYER_ACTION doAction = doLayerActionEvent.getDoAction();
GWT.log("event: " + doAction);
@@ -569,6 +601,56 @@ public class GeoportalDataViewer implements EntryPoint {
doLayerActionEvent.getVisibility());
break;
+ case LOCATE_LAYER:
+
+ final LayerItem layerItem = doLayerActionEvent.getLayerItem();
+
+ boolean layerHighlighted = olMap.areLayerFeaturesAsHighlight(layerItem);
+
+ if (layerHighlighted) {
+ doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
+ olMap.removeLayerFeaturesAsHighlight(layerItem.getName());
+ return;
+ }
+
+ final String geoJSONFeatures = layerFeaturesCache.get(layerItem.getName());
+
+ if (geoJSONFeatures == null) {
+
+ GeoportalDataViewerServiceAsync.Util.getInstance().getWFSResponse(layerItem,
+ olMap.getProjectionCode(), null, 0, "json", new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
+
+ }
+
+ @Override
+ public void onSuccess(String geoJSONFeaturesResp) {
+ doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
+
+ if (geoJSONFeaturesResp != null && !geoJSONFeaturesResp.isEmpty()) {
+ layerFeaturesCache.put(layerItem.getName(), geoJSONFeaturesResp);
+
+ GWT.log("GeoJSON: " + geoJSONFeaturesResp);
+
+ showLayerFeatures(layerItem, geoJSONFeaturesResp,
+ doLayerActionEvent.getLayerObject().getProjectDV());
+
+ }
+ }
+
+ });
+ } else {
+
+ doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
+ showLayerFeatures(layerItem, geoJSONFeatures,
+ doLayerActionEvent.getLayerObject().getProjectDV());
+
+ }
+
+ break;
default:
break;
@@ -686,6 +768,17 @@ public class GeoportalDataViewer implements EntryPoint {
}
+ /**
+ * Sets the.
+ *
+ * @param json the json
+ * @return the object
+ */
+ public static native Object toJSON(String json) /*-{
+ var jsonObj = JSON.parse(json);
+ //console.log("jsonObj: "+jsonObj);
+ return jsonObj;
+ }-*/;
// /**
// * Handler popu closer.
// *
@@ -703,6 +796,13 @@ public class GeoportalDataViewer implements EntryPoint {
//
// }-*/;
+ /**
+ * Perform WFS query on centroid.
+ *
+ * @param projectID the project ID
+ * @param centroidLong the centroid long
+ * @param centroidLat the centroid lat
+ */
private void performWFSQueryOnCentroid(String projectID, Double centroidLong, Double centroidLat) {
GWT.log("Perform performWFSQueryOnCentroid: " + projectID + " long: " + centroidLong + ", lat: " + centroidLat);
if (projectID != null) {
@@ -727,6 +827,13 @@ public class GeoportalDataViewer implements EntryPoint {
}
}
+ /**
+ * Show popover.
+ *
+ * @param w the w
+ * @param message the message
+ * @param heading the heading
+ */
public static void showPopover(final Widget w, String message, String heading) {
final Popover popover = new Popover();
@@ -748,6 +855,11 @@ public class GeoportalDataViewer implements EntryPoint {
timer.schedule(3000);
}
+ /**
+ * Gets the general error panel.
+ *
+ * @return the general error panel
+ */
private FlowPanel getGeneralErrorPanel() {
Image geoportalError = new Image(GNAImages.ICONS.geoportaServiceError());
FlowPanel errorPanelMsg = new FlowPanel();
@@ -760,4 +872,41 @@ public class GeoportalDataViewer implements EntryPoint {
return errorPanelMsg;
}
+ /**
+ * Show layer features.
+ *
+ * @param layerItem the layer item
+ * @param geoJSONFeatures the geo JSON features
+ * @param projectDV the project DV
+ */
+ private void showLayerFeatures(LayerItem layerItem, String geoJSONFeatures, ProjectDV projectDV) {
+
+ GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions();
+ ProjectionOptions projectionOptions = new ProjectionOptions();
+ projectionOptions.setCode(MAP_PROJECTION.EPSG_4326.getName());
+ Projection fp = new Projection(projectionOptions);
+ fo.setFeatureProjection(fp);
+ fo.setDataProjection(fp);
+ GeoJsonOptions geoJsonOpt = new GeoJsonOptions();
+ geoJsonOpt.setDefaultDataProjection(fp);
+ geoJsonOpt.setFeatureProjection(fp);
+ GeoJson geoJson = OLFactory.createGeoJSON(geoJsonOpt);
+
+ Feature[] features = geoJson.readFeatures(geoJSONFeatures);
+
+ GWT.log("features: " + features);
+ olMapMng.getOLMap().addLayerFeaturesAsHighlight(layerItem, features);
+
+ if (projectDV != null) {
+ GeoJSON spatialReference = projectDV.getSpatialReference();
+
+ GWT.log("spatialReference is: " + spatialReference);
+ Coordinate transfCoord = MapUtils.geoJSONTToBBoxCenter(spatialReference, MAP_PROJECTION.EPSG_4326.getName(),
+ MAP_PROJECTION.EPSG_3857.getName());
+ GWT.log("transfCoord is: " + transfCoord);
+ if (transfCoord != null)
+ olMapMng.getOLMap().setCenter(transfCoord);
+ }
+ }
+
}
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 a07e40f..b4d2e98 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
@@ -15,6 +15,7 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
import org.gcube.portlets.user.geoportaldataviewer.shared.ResultSetPaginatedDataIDs;
import org.gcube.portlets.user.geoportaldataviewer.shared.ViewerConfiguration;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest;
@@ -179,4 +180,30 @@ public interface GeoportalDataViewerService extends RemoteService {
*/
GeoJSON getSpatialReference(String profileID, String projectID);
+ /**
+ * Gets the WFS request.
+ *
+ * @param layerItem the layer item
+ * @param mapSrsName the map srs name
+ * @param mapBBOX the map BBOX
+ * @param maxFeatures the max features. If 0 means all feature
+ * @param outputFormat the output format
+ * @return the WFS request
+ */
+ String getWFSRequest(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures,
+ String outputFormat);
+
+ /**
+ * Gets the WFS response.
+ *
+ * @param layerItem the layer item
+ * @param mapSrsName the map srs name
+ * @param mapBBOX the map BBOX
+ * @param maxFeatures the max features
+ * @param outputFormat the output format
+ * @return the WFS response
+ */
+ String getWFSResponse(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures,
+ String outputFormat);
+
}
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 fac0a4d..8a69080 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
@@ -15,6 +15,7 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
import org.gcube.portlets.user.geoportaldataviewer.shared.ResultSetPaginatedDataIDs;
import org.gcube.portlets.user.geoportaldataviewer.shared.ViewerConfiguration;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest;
@@ -75,4 +76,10 @@ public interface GeoportalDataViewerServiceAsync {
void getSpatialReference(String profileID, String projectID, AsyncCallback callback);
+ void getWFSRequest(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures, String outputFormat,
+ AsyncCallback callback);
+
+ void getWFSResponse(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures, String outputFormat,
+ AsyncCallback callback);
+
}
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 cdaa281..133246a 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
@@ -412,6 +412,7 @@ public class LayerManager {
public void removeAllDetailLayers() {
mapOtherLayerObjects.clear();
olMap.removeAllDetailLayers();
+ olMap.removeAllLayerFeaturesAsHighlight();
overlayLayerManager.resetLayers();
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEvent.java
index 6259a65..c472cc5 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEvent.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEvent.java
@@ -1,6 +1,8 @@
package org.gcube.portlets.user.geoportaldataviewer.client.events;
+import org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd.DragDropLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import com.google.gwt.event.shared.GwtEvent;
@@ -22,7 +24,7 @@ public class DoActionOnDetailLayersEvent extends GwtEvent wmsLayerMap;
+ private LinkedHashMap vectorLayersHighlighted = new LinkedHashMap();
+
private Layer baseLayerTile;
private LayerOrder layerOrder = new LayerOrder();
@@ -304,13 +312,13 @@ public abstract class OpenLayerMap {
* @param centerCoordinate the new center
*/
public void setCenter(Coordinate centerCoordinate) {
-
+
AnimationOptions animations = new AnimationOptions();
animations.setCenter(centerCoordinate);
animations.setDuration(SET_CENTER_ANIMATED_DURATION);
view.animate(animations);
-
- //view.setCenter(centerCoordinate);
+
+ // view.setCenter(centerCoordinate);
}
/**
@@ -323,7 +331,7 @@ public abstract class OpenLayerMap {
animations.setDuration(ZOOM_ANIMATED_DURATION);
animations.setZoom(zoom);
view.animate(animations);
- //view.setZoom(zoom);
+ // view.setZoom(zoom);
}
/**
@@ -447,6 +455,12 @@ public abstract class OpenLayerMap {
}
+ /**
+ * Sets the CQL filter to WMS layer.
+ *
+ * @param key the key
+ * @param cqlFilterExpression the cql filter expression
+ */
public void setCQLFilterToWMSLayer(String key, String cqlFilterExpression) {
GWT.log("Getting key: " + key);
@@ -472,6 +486,8 @@ public abstract class OpenLayerMap {
wmsLayer.changed();
+ wmsLayer.changed();
+
//map.addLayer(wmsLayer);
}
@@ -528,10 +544,12 @@ public abstract class OpenLayerMap {
/**
* Removes the all detail layers.
+ *
+ * @param layerName the layer name
*/
public void removeWMSLayer(String layerName) {
GWT.log("Removing layerName: " + layerName + " from map: " + wmsLayerMap);
-
+
// NOT NEEDED ANYMORE.. I'M USING MIN/MAX LAYER RESOLUTION
if (wmsLayerMap == null)
@@ -552,8 +570,6 @@ public abstract class OpenLayerMap {
*/
public void removeAllDetailLayers() {
- // NOT NEEDED ANYMORE.. I'M USING MIN/MAX LAYER RESOLUTION
-
if (wmsDetailsLayerMap == null)
return;
@@ -568,6 +584,24 @@ public abstract class OpenLayerMap {
}
+ /**
+ * Removes the all layer features as highlight.
+ */
+ public void removeAllLayerFeaturesAsHighlight() {
+
+ if (vectorLayersHighlighted == null)
+ return;
+
+ GWT.log("Removing vectorLayersHighlighted: " + vectorLayersHighlighted.keySet() + " from map");
+
+ for (String layerName : vectorLayersHighlighted.keySet()) {
+ removeLayerFeaturesAsHighlight(layerName);
+ }
+
+ vectorLayersHighlighted.clear();
+
+ }
+
/**
* Adds the vector.
*
@@ -578,12 +612,12 @@ public abstract class OpenLayerMap {
VectorLayerOptions vectorLayerOptions = new VectorLayerOptions();
vectorLayerOptions.setMap(map);
-// Style style = new Style();
-// FillOptions fillOptions = new FillOptions();
-// Color color = new Color(0, 0, 255, 1.0);
-// fillOptions.setColor(color);
-// Fill fill = new Fill(fillOptions);
-// style.setFill(fill);
+ Style style = new Style();
+ FillOptions fillOptions = new FillOptions();
+ Color color = new Color(0, 0, 255, 1.0);
+ fillOptions.setColor(color);
+ Fill fill = new Fill(fillOptions);
+ style.setFill(fill);
FeatureOptions featureOptions = new FeatureOptions();
featureOptions.setGeometry(geometry);
@@ -595,12 +629,87 @@ public abstract class OpenLayerMap {
ol.layer.Vector vector = OLFactory.createVector(vectorLayerOptions);
- int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.VECTOR) + 1;
+ int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.VECTOR) + 1000;
vector.setZIndex(zIndex);
map.addLayer(vector);
}
+ /**
+ * Adds the vector.
+ *
+ * @param layerItem the layer item
+ * @param features the features
+ */
+ public void addLayerFeaturesAsHighlight(LayerItem layerItem, Feature[] features) {
+
+ removeLayerFeaturesAsHighlight(layerItem.getName());
+
+ Style style = new Style();
+ StrokeOptions strokeOptions = new StrokeOptions();
+ strokeOptions.setColor(new Color(255, 255, 0, 0.8));
+ strokeOptions.setWidth(5);
+ Stroke stroke = new Stroke(strokeOptions);
+ stroke.setWidth(2);
+ style.setStroke(stroke);
+
+ Vector vectorSource = OLFactory.createVectorSource();
+ vectorSource.addFeatures(features);
+
+ GWT.log("features: " + features);
+
+ VectorLayerOptions vectorLayerOptions = new VectorLayerOptions();
+ vectorLayerOptions.setSource(vectorSource);
+ vectorLayerOptions.setStyle(style);
+
+ // vectorLayerOptions.setMap(map);
+
+ GWT.log("vectorLayerOptions: " + vectorLayerOptions);
+
+ ol.layer.Vector vector = OLFactory.createVector(vectorLayerOptions);
+ // vector.setStyle(style);
+ vector.setVisible(true);
+ vector.setZIndex(5000);
+
+ vectorLayersHighlighted.put(layerItem.getName(), vector);
+
+ map.addLayer(vector);
+ }
+
+ /**
+ * Are layer features A as highlight.
+ *
+ * @param layerItem the layer item
+ * @return true, if successful
+ */
+ public boolean areLayerFeaturesAsHighlight(LayerItem layerItem) {
+ return vectorLayersHighlighted.get(layerItem.getName()) != null;
+ }
+
+ /**
+ * Removes the layer features A as highlight.
+ *
+ * @param layerName the layer name
+ * @return true, if successful
+ */
+ public boolean removeLayerFeaturesAsHighlight(String layerName) {
+
+ try {
+
+ ol.layer.Vector vl = vectorLayersHighlighted.get(layerName);
+
+ if (vl != null) {
+ map.removeLayer(vl);
+ vectorLayersHighlighted.remove(layerName);
+ return true;
+ }
+ } catch (Exception e) {
+
+ }
+
+ return false;
+ }
+
/**
* Adds the point vector source.
*
@@ -971,6 +1080,4 @@ public abstract class OpenLayerMap {
return map.get((map.keySet().toArray())[index]);
}
-
-
}
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 961ab67..cabeb3f 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
@@ -47,6 +47,12 @@ public interface GNAImages extends ClientBundle {
@Source("layer_invisible.png")
ImageResource layerInvisible();
+ @Source("locate.png")
+ ImageResource locate();
+
+ @Source("locate_none.png")
+ ImageResource locateNone();
+
@Source("spinner_earth.gif")
ImageResource spinnerEarth();
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/relation/TimelineRelationPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/relation/TimelineRelationPanel.java
index d8d2825..e8b2dde 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/relation/TimelineRelationPanel.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/relation/TimelineRelationPanel.java
@@ -144,7 +144,8 @@ public class TimelineRelationPanel extends Composite {
final String thePofileID = references[0];
final String theProjectID = references[1];
GeoportalItemReferences gir = new GeoportalItemReferences(theProjectID, thePofileID);
- ShowDetailsEvent showDetailsEvent = new ShowDetailsEvent(gir, null, false, false, EVENT_SOURCE.LOCATE_FROM_TIMELINE);
+ ShowDetailsEvent showDetailsEvent = new ShowDetailsEvent(gir, null, false, false,
+ EVENT_SOURCE.LOCATE_FROM_TIMELINE);
showDetailsEvent.setEventFromTimeline(true);
GWT.log("fireEvent: " + showDetailsEvent);
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 65a22b8..1ade90d 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
@@ -2,6 +2,7 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd;
import java.util.LinkedHashMap;
+import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON;
import org.gcube.application.geoportalcommon.shared.geoportal.project.TemporalReferenceDV;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent;
@@ -9,6 +10,7 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetai
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.ui.cms.project.ProjectUtil;
+import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
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;
@@ -19,6 +21,7 @@ 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.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -32,21 +35,33 @@ import com.google.gwt.event.dom.client.DropEvent;
import com.google.gwt.event.dom.client.DropHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.rpc.AsyncCallback;
-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.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class DragDropLayer extends FlowPanel {
+ private static final String _22PX = "22px";
private static DragDropLayer dragging = null;
private static DragDropLayer draggingTarget = null;
final boolean droppable;
private Label labelLayerName;
private Image imgLayerVisible = new Image(GNAImages.ICONS.layerVisible());
private Image imgLayerInvisible = new Image(GNAImages.ICONS.layerInvisible());
+
+ private Image imgLocate = new Image(GNAImages.ICONS.locate());
+ private Image imgLocateNone = new Image(GNAImages.ICONS.locateNone());
+ private boolean locateEnabled = false;
+ private HTML buttonLocate = new HTML();
+
+ private DragDropLayer INSTANCE = this;
+
+ private LoaderIcon loaderIcon = new LoaderIcon("Loading features", null);
+
private Button draggableButton = new Button();
private HandlerManager applicationBus;
private LayerObject layerObject;
@@ -61,6 +76,26 @@ public class DragDropLayer extends FlowPanel {
this.layerItem = layerObject.getLayerItem();
GWT.log("DragDropLayer for projectDV: " + layerObject.getProjectDV());
+ // Checking the spatial reference
+ if (layerObject.getProjectDV() != null && layerObject.getProjectDV().getSpatialReference() == null) {
+ GeoportalDataViewerServiceAsync.Util.getInstance().getSpatialReference(layerObject.getProfileID(),
+ layerObject.getProjectID(), new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onSuccess(GeoJSON result) {
+ if (result != null)
+ layerObject.getProjectDV().setSpatialReference(result);
+
+ }
+ });
+ }
+
String referProjectID = "Project ID: " + layerObject.getProjectDV().getId();
labelProject = new com.google.gwt.user.client.ui.Label("");
labelProject.setTitle(referProjectID);
@@ -119,26 +154,57 @@ public class DragDropLayer extends FlowPanel {
RangeSlider rs = new RangeSlider(applicationBus, layerItem);
rs.getElement().addClassName("range-slider");
- FlexTable ft = new FlexTable();
- ft.setWidget(0, 0, draggableButton);
+
+ // 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");
imgLayerVisible.getElement().addClassName("layer-visibility-st");
imgLayerInvisible.getElement().addClassName("layer-visibility-st");
+
+ imgLocate.setWidth(_22PX);
+ imgLocate.setHeight(_22PX);
+ imgLocateNone.setWidth(_22PX);
+ imgLocateNone.setHeight(_22PX);
+ imgLocate.getElement().addClassName("layer-visibility-st");
+ imgLocateNone.getElement().addClassName("layer-visibility-st");
+ setLocateEnabledButtonImage();
+
setLayerVisibilityButtonImage();
- // labelLayerName.getElement().getStyle().setMarginLeft(10, Unit.PX);
- ft.setWidget(0, 1, buttonLayerVisibility);
- ft.setWidget(0, 2, labelProject);
+ VerticalPanel vp = new VerticalPanel();
+ VerticalPanel vpInner = new VerticalPanel();
+ HorizontalPanel hp0 = new HorizontalPanel();
+ HorizontalPanel hpFunct = new HorizontalPanel();
+ vpInner.getElement().getStyle().setMarginLeft(47, Unit.PX);
+
+ hp0.add(draggableButton);
+ labelProject.getElement().getStyle().setMarginLeft(10, Unit.PX);
+ labelProject.getElement().getStyle().setFontWeight(FontWeight.BOLD);
+ hp0.add(labelProject);
+ hpFunct.add(buttonLayerVisibility);
+ hpFunct.add(buttonLocate);
+ hpFunct.add(loaderIcon);
+ setVisibleLoaderFeatures(false, null);
if(layerObject.getProjectDV().getTemporalReference()!=null) {
TemporalReferenceDV tempRef = layerObject.getProjectDV().getTemporalReference();
- ft.setWidget(ft.getRowCount()+1, 2, new HTML(ProjectUtil.toHTMLCode(tempRef)));
+// ft.setWidget(ft.getRowCount() + 1, 2, new HTML(ProjectUtil.toHTMLCode(tempRef)));
+ vpInner.add(new HTML(ProjectUtil.toHTMLCode(tempRef)));
}
- ft.setWidget(ft.getRowCount()+1, 2, labelLayerName);
- ft.setWidget(ft.getRowCount()+1, 2, new SimplePanel(rs));
- add(ft);
+ vpInner.add(labelLayerName);
+ // vpInner.add(new SimplePanel(rs));
+
+ vp.add(hp0);
+ hpFunct.getElement().getStyle().setMarginTop(5, Unit.PX);
+ vpInner.add(hpFunct);
+ vpInner.add(new SimplePanel(rs));
+ vp.add(vpInner);
+
+ add(vp);
+
+ // add(ft);
draggableButton.setIcon(IconType.MOVE);
buttonLayerVisibility.addClickHandler(new ClickHandler() {
@@ -147,20 +213,48 @@ public class DragDropLayer extends FlowPanel {
public void onClick(ClickEvent event) {
layerVisibility = !layerVisibility;
setLayerVisibilityButtonImage();
- DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.VISIBILITY,
- layerItem);
+ DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.VISIBILITY, layerItem,
+ layerObject);
dae.setVisibility(layerVisibility);
applicationBus.fireEvent(dae);
}
});
+
+ buttonLocate.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ locateEnabled = !locateEnabled;
+ setLocateEnabledButtonImage();
+ DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.LOCATE_LAYER,
+ layerItem, layerObject);
+ dae.setUIEventSource(INSTANCE);
+ setVisibleLoaderFeatures(true, null);
+ applicationBus.fireEvent(dae);
+ }
+ });
}
private void setLayerVisibilityButtonImage() {
buttonLayerVisibility.getElement().removeAllChildren();
if (layerVisibility) {
buttonLayerVisibility.getElement().appendChild(imgLayerVisible.getElement());
+ buttonLayerVisibility.setTitle("Hide the layer");
} else {
buttonLayerVisibility.getElement().appendChild(imgLayerInvisible.getElement());
+ buttonLayerVisibility.setTitle("Show the layer");
+ }
+
+ }
+
+ private void setLocateEnabledButtonImage() {
+ buttonLocate.getElement().removeAllChildren();
+ if (locateEnabled) {
+ buttonLocate.getElement().appendChild(imgLocate.getElement());
+ buttonLocate.setTitle("Unselect the layer features");
+ } else {
+ buttonLocate.getElement().appendChild(imgLocateNone.getElement());
+ buttonLocate.setTitle("Highlight the layer features");
}
}
@@ -226,7 +320,7 @@ public class DragDropLayer extends FlowPanel {
tree.insert(source, targetIndex);
// target.setState(true);
DoActionOnDetailLayersEvent actionSwapLayers = new DoActionOnDetailLayersEvent(
- DO_LAYER_ACTION.SWAP, layerItem);
+ DO_LAYER_ACTION.SWAP, layerItem, layerObject);
SwapLayer swapLS = new DoActionOnDetailLayersEvent.SwapLayer(dragging.getLayerItem(),
sourceIndex);
SwapLayer swapLT = new DoActionOnDetailLayersEvent.SwapLayer(draggingTarget.getLayerItem(),
@@ -245,4 +339,17 @@ public class DragDropLayer extends FlowPanel {
return layerItem;
}
+
+ /**
+ * Sets the visible loader features.
+ *
+ * @param bool the bool
+ * @param msg the msg
+ */
+ public void setVisibleLoaderFeatures(boolean bool, String msg) {
+ loaderIcon.setVisible(bool);
+ if(msg!=null)
+ loaderIcon.setText(msg);
+ }
+
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/RangeSlider.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/RangeSlider.java
index 55ee827..f6349de 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/RangeSlider.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/RangeSlider.java
@@ -54,7 +54,7 @@ public class RangeSlider extends Composite {
if (Event.ONMOUSEUP == event.getTypeInt()) {
GWT.log("Event.ONMOUSEUP");
DoActionOnDetailLayersEvent actionChangeOpacity = new DoActionOnDetailLayersEvent(
- DO_LAYER_ACTION.OPACITY, layer);
+ DO_LAYER_ACTION.OPACITY, layer, null);
int value = Integer.parseInt((String) theSlider.getPropertyObject("value"));
//GWT.log("opacity int value: "+value);
double opacity = (double) ((double) value/100);
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 75d878b..1d3643d 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
@@ -3,6 +3,10 @@ package org.gcube.portlets.user.geoportaldataviewer.server;
import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.projects;
import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.useCaseDescriptors;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -60,6 +64,7 @@ import org.gcube.application.geoportalcommon.util.URLParserUtil;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService;
import org.gcube.portlets.user.geoportaldataviewer.server.gis.FeatureParser;
+import org.gcube.portlets.user.geoportaldataviewer.server.gis.GisMakers;
import org.gcube.portlets.user.geoportaldataviewer.server.gis.WMSUrlValidator;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.GeoportalServiceIdentityProxy;
import org.gcube.portlets.user.geoportaldataviewer.server.util.ContextRequest;
@@ -72,6 +77,7 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.ResultSetPaginatedData
import org.gcube.portlets.user.geoportaldataviewer.shared.ViewerConfiguration;
import org.gcube.portlets.user.geoportaldataviewer.shared.faults.ControlledError;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObjectType;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow;
@@ -347,7 +353,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
* @param layerObjects the layer objects
* @param mapSrsName the map srs name
* @param selectBBOX the select BBOX
- * @param maxWFSFeature the max WFS feature
+ * @param maxWFSFeature the max WFS feature. If 0 means all feature
* @param zoomLevel the zoom level
* @return the WFS features
*/
@@ -772,7 +778,8 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
//(see ticket #24390)
if (accessPolicy.equals(ACCESS_POLICY.OPEN)) {
- // Filtering for ACCESS_POLICY.OPEN from the fileset when the username is not in session. IAM
+ // Filtering for ACCESS_POLICY.OPEN from the fileset when the username is not in
+ // session. IAM
// identity is running, no logged in user.
filesetParentJSONPath = String.format("%s..%s[?(@._access._policy=='%s')]",
Geoportal_JSON_Mapper.JSON_$_POINTER, Geoportal_JSON_Mapper.FILESET, accessPolicy);
@@ -1539,4 +1546,84 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
return null;
}
+ /**
+ * Gets the WFS request.
+ *
+ * @param layerItem the layer item
+ * @param mapSrsName the map srs name
+ * @param mapBBOX the map BBOX
+ * @param maxFeatures the max features. If 0 means all feature
+ * @param outputFormat the output format
+ * @return the WFS request
+ */
+ @Override
+ public String getWFSRequest(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures,
+ String outputFormat) {
+ LOG.info("getWFSRequest called");
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("getWFSRequest parameters layerItem name: " + layerItem.getName(), ", mapSrsName: " + mapSrsName
+ + ", mapBBOX: " + mapBBOX + ", maxFeatures: " + maxFeatures + ", outputFormat: " + outputFormat);
+ }
+ String url = GisMakers.buildWFSFeatureQuery(layerItem, mapSrsName, mapBBOX, maxFeatures, outputFormat);
+ LOG.info("returning WFSRequest: " + url);
+ return url;
+ }
+
+ /**
+ * Gets the WFS response.
+ *
+ * @param layerItem the layer item
+ * @param mapSrsName the map srs name
+ * @param mapBBOX the map BBOX
+ * @param maxFeatures the max features
+ * @param outputFormat the output format
+ * @return the WFS response
+ */
+ @Override
+ public String getWFSResponse(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures,
+ String outputFormat) {
+ LOG.info("getWFSResponse called");
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("getWFSResponse parameters layerItem name: " + layerItem.getName(), ", mapSrsName: " + mapSrsName
+ + ", mapBBOX: " + mapBBOX + ", maxFeatures: " + maxFeatures + ", outputFormat: " + outputFormat);
+ }
+
+ String url = getWFSRequest(layerItem, mapSrsName, mapBBOX, maxFeatures, outputFormat);
+ StringBuffer response = new StringBuffer();
+ String theResponseString = "";
+ HttpURLConnection con = null;
+ LOG.debug("Built URL: " + url);
+ try {
+ URL obj = new URL(url);
+ con = (HttpURLConnection) obj.openConnection();
+ con.setRequestMethod("GET");
+ int responseCode = con.getResponseCode();
+ LOG.debug("GET Response Code: " + responseCode);
+ if (responseCode == HttpURLConnection.HTTP_OK) { // success
+ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+ }
+ in.close();
+ } else {
+ LOG.info("GET request did not work.");
+ }
+
+ theResponseString = response.toString();
+ //LOG.trace(theResponseString);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("getWFSResponse is empty? " + theResponseString.isEmpty());
+ }
+ } catch (Exception e) {
+ LOG.error("Error on performing the request to URL: " + url, e);
+ } finally {
+
+ }
+ return theResponseString;
+ }
+
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/GisMakers.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/GisMakers.java
index 5018ea2..7740acf 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/GisMakers.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/GisMakers.java
@@ -57,15 +57,18 @@ public class GisMakers {
* @param outputFormat the output format
* @return the string
*/
- public static String buildWFSFeatureQuery(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, int maxFeatures, String outputFormat) {
+ public static String buildWFSFeatureQuery(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX,
+ int maxFeatures, String outputFormat) {
String link = layerItem.getMapServerHost();
LOG.debug("Map server host URL: " + link);
LOG.debug("CQL filter is: " + layerItem.getCqlFilter());
LOG.debug("MAX FEATURES: " + maxFeatures);
+ LOG.debug("BBOX: " + mapBBOX);
+ LOG.debug("Output Format: " + outputFormat);
String outputformat = null;
- String boundingBox = "";
+ String boundingBox = null;
// CASE MAP SERVER
SERVERTYPE mapserverType = MapServerRecognize.recongnize(layerItem);
@@ -76,7 +79,9 @@ public class GisMakers {
if (mapserverType.equals(SERVERTYPE.MAPSERVER)) {
LOG.debug("wms url contains wxs is a map server? no appending /wfs ");
outputformat = MapServerRecognize.outputFormatRecognize(SERVERTYPE.MAPSERVER, outputFormat);
- boundingBox = BBOX_FORMAT(COORDINATE_FORMAT.YX, ",",mapBBOX.getLowerLeftX(),mapBBOX.getLowerLeftY(),mapBBOX.getUpperRightX(),mapBBOX.getUpperRightY()); // USE AXIS XY
+ if (mapBBOX != null)
+ boundingBox = BBOX_FORMAT(COORDINATE_FORMAT.YX, ",", mapBBOX.getLowerLeftX(),
+ mapBBOX.getLowerLeftY(), mapBBOX.getUpperRightX(), mapBBOX.getUpperRightY()); // USE AXIS XY
// DEBUG
LOG.debug("SERVERTYPE.MAPSERVER outputformat: " + outputformat);
LOG.debug("SERVERTYPE.MAPSERVER srsName: " + mapSrsName);
@@ -86,7 +91,9 @@ public class GisMakers {
link += link.endsWith("wfs") ? "" : "/wfs";
outputformat = MapServerRecognize.outputFormatRecognize(SERVERTYPE.GEOSEVER, outputFormat);
mapSrsName = "urn:x-ogc:def:crs:"+mapSrsName;
- boundingBox = BBOX_FORMAT(COORDINATE_FORMAT.YX, ",",mapBBOX.getLowerLeftX(),mapBBOX.getLowerLeftY(),mapBBOX.getUpperRightX(),mapBBOX.getUpperRightY()); // USE AXIS XY
+ if (mapBBOX != null)
+ boundingBox = BBOX_FORMAT(COORDINATE_FORMAT.YX, ",", mapBBOX.getLowerLeftX(),
+ mapBBOX.getLowerLeftY(), mapBBOX.getUpperRightX(), mapBBOX.getUpperRightY()); // USE AXIS XY
// DEBUG
LOG.debug("SERVERTYPE.GEOSEVER outputformat: " + outputformat);
LOG.debug("SERVERTYPE.GEOSEVER srsName: " + mapSrsName);
@@ -98,15 +105,22 @@ public class GisMakers {
// + (outputformat == null ? "" : "&OUTPUTFORMAT=" + outputformat);
//
- link += "?"+
- URLParserUtil.addParameterToQueryString(WFSGetFeature.SERVICE.getParameter(), WFSGetFeature.SERVICE.getValue(), false, true)+
- URLParserUtil.addParameterToQueryString(WFSGetFeature.VERSION.getParameter(), WFSGetFeature.VERSION.getValue(), false, true)+
- URLParserUtil.addParameterToQueryString(WFSGetFeature.REQUEST.getParameter(), WFSGetFeature.REQUEST.getValue(), false, true)+
- URLParserUtil.addParameterToQueryString(WFSGetFeature.SRSNAME.getParameter(), mapSrsName, false, true)+
- URLParserUtil.addParameterToQueryString(WFSGetFeature.TYPENAME.getParameter(), layerItem.getName(), false, true)+
- (maxFeatures == 0 ? "" : URLParserUtil.addParameterToQueryString(WFSGetFeature.MAXFEATURES.getParameter(), maxFeatures+"", false, true))+
- (outputformat == null ? "" : URLParserUtil.addParameterToQueryString(WFSGetFeature.OUTPUTFORMAT.getParameter(), outputformat, false, false));
-
+ link += "?"
+ + URLParserUtil.addParameterToQueryString(WFSGetFeature.SERVICE.getParameter(),
+ WFSGetFeature.SERVICE.getValue(), false, true)
+ + URLParserUtil.addParameterToQueryString(WFSGetFeature.VERSION.getParameter(),
+ WFSGetFeature.VERSION.getValue(), false, true)
+ + URLParserUtil.addParameterToQueryString(WFSGetFeature.REQUEST.getParameter(),
+ WFSGetFeature.REQUEST.getValue(), false, true)
+ + URLParserUtil.addParameterToQueryString(WFSGetFeature.SRSNAME.getParameter(), mapSrsName, false, true)
+ + URLParserUtil.addParameterToQueryString(WFSGetFeature.TYPENAME.getParameter(), layerItem.getName(),
+ false, true)
+ + (maxFeatures == 0 ? ""
+ : URLParserUtil.addParameterToQueryString(WFSGetFeature.MAXFEATURES.getParameter(),
+ maxFeatures + "", false, true))
+ + (outputformat == null ? ""
+ : URLParserUtil.addParameterToQueryString(WFSGetFeature.OUTPUTFORMAT.getParameter(),
+ outputformat, false, false));
if (layerItem.getCqlFilter() != null && !layerItem.getCqlFilter().isEmpty()) {
if (layerItem.getCqlFilter().contains("BBOX("+GEOM_NAME_BOUNDED+"")) {
@@ -114,7 +128,8 @@ public class GisMakers {
link += "&" + CQL_FILTER_PARAMETER + "=" + layerItem.getCqlFilter();
} else {
// I NEED TO ENCODE THE BBOX INTO CQL FILTERING,
- String cqlFilterValue = "BBOX("+GEOM_NAME_BOUNDED+"," + boundingBox + ")" + " AND " + layerItem.getCqlFilter();
+ String cqlFilterValue = "BBOX(" + GEOM_NAME_BOUNDED + "," + boundingBox + ")" + " AND "
+ + layerItem.getCqlFilter();
link += "&" + CQL_FILTER_PARAMETER + "=" + cqlFilterValue;
}
@@ -181,7 +196,8 @@ public class GisMakers {
* @param separator the separator
* @return the string
*/
- public static String BBOX_FORMAT(COORDINATE_FORMAT format, String separator, double lowerLeftX, double lowerLeftY, double upperRightX, double upperRightY) {
+ public static String BBOX_FORMAT(COORDINATE_FORMAT format, String separator, double lowerLeftX, double lowerLeftY,
+ double upperRightX, double upperRightY) {
if(format==null)
format = COORDINATE_FORMAT.XY;
@@ -191,25 +207,11 @@ public class GisMakers {
switch (format) {
case XY:
- return String.format("%s%s%s%s%s%s%s",
- String.valueOf(lowerLeftX),
- separator,
- String.valueOf(lowerLeftY),
- separator,
- String.valueOf(upperRightX),
- separator,
- String.valueOf(upperRightY)
- );
+ return String.format("%s%s%s%s%s%s%s", String.valueOf(lowerLeftX), separator, String.valueOf(lowerLeftY),
+ separator, String.valueOf(upperRightX), separator, String.valueOf(upperRightY));
case YX:
- return String.format("%s%s%s%s%s%s%s",
- String.valueOf(lowerLeftY),
- separator,
- String.valueOf(lowerLeftX),
- separator,
- String.valueOf(upperRightY),
- separator,
- String.valueOf(upperRightX)
- );
+ return String.format("%s%s%s%s%s%s%s", String.valueOf(lowerLeftY), separator, String.valueOf(lowerLeftX),
+ separator, String.valueOf(upperRightY), separator, String.valueOf(upperRightX));
}
return null;
diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css
index 07aff81..b0aa313 100644
--- a/src/main/webapp/GeoportalDataViewer.css
+++ b/src/main/webapp/GeoportalDataViewer.css
@@ -363,6 +363,9 @@ body {
.dand-layer {
width: 400px;
+ border: 1px solid #ccc !important;
+ padding: 5px 0px;
+ border-radius: 5px;
}
.range-slider {
diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java
index de03d26..d10e686 100644
--- a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java
+++ b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java
@@ -59,13 +59,13 @@ public class GeoportalViewer_Tests {
//private static String CONTEXT = "/pred4s/preprod/preVRE";
private static String CONTEXT = "/d4science.research-infrastructures.eu/D4OS/GNA";
- private static String TOKEN = "ae9c0e67-68ca-42de-899b-015a98e4619b-843339462"; //GNA
+ private static String TOKEN = ""; //GNA
//private static String CONTEXT = "/gcube/devsec/devVRE";
//private static String TOKEN = ""; // devVRE
private static String PROFILE_ID = "profiledConcessioni";
- private static String PROJECT_ID = "63c6c0f1a1e60e66b7b588fe";
+ private static String PROJECT_ID = "6388ea6ca1e60e66b7b584e0";
private static String USERNAME = "francesco.mangiacrapa";
@@ -83,7 +83,7 @@ public class GeoportalViewer_Tests {
clientProjects = GeoportalClientCaller.projects();
}
- @Test
+ //@Test
public void getProjectViewForID() {
try {