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 301bb46..01d5a34 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,6 +1,7 @@
package org.gcube.portlets.user.geoportaldataviewer.client;
import java.util.Iterator;
+import java.util.List;
import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
@@ -12,6 +13,8 @@ import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerCon
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent.LAYER_TYPE;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEvent;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ClosedViewDetailsEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ClosedViewDetailsEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent;
@@ -29,7 +32,9 @@ import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.GeonaDataViewMainPanel;
+import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
import org.gcube.portlets.user.geoportaldataviewer.client.util.URLUtil;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery;
import com.google.gwt.core.client.EntryPoint;
@@ -89,11 +94,31 @@ public class GeoportalDataViewer implements EntryPoint {
private OLMapManager olMapMng = null;
int attempt = 0;
+
+
+ private LoaderIcon loaderApp = new LoaderIcon("Loading application....");
+
+
+ private HTML attributionDiv = new HTML();
/**
* This is the entry point method.
*/
public void onModuleLoad() {
+
+ loaderApp.getElement().getStyle().setZIndex(100);
+
+ paramWmsRequest = Window.Location.getParameter(GeoportalDataViewerConstants.GET_WMS_PARAMETER);
+ paramGeonaItemType = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE);
+ paramGeonaItemID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID);
+ paramLayerTitle = Window.Location.getParameter(GeoportalDataViewerConstants.GET_LAYER_TITLE);
+ GWT.log(GeoportalDataViewerConstants.GET_WMS_PARAMETER + " = " + paramWmsRequest);
+ GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE + " = " + paramGeonaItemType);
+ GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID + " = " + paramGeonaItemID);
+ GWT.log(GeoportalDataViewerConstants.GET_LAYER_TITLE + " = " + paramLayerTitle);
+
+ RootPanel.get(APP_DIV).add(loaderApp);
+
mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight());
RootPanel.get(APP_DIV).add(mainPanel);
@@ -102,23 +127,38 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
public void execute() {
- olMapMng = new OLMapManager(mainPanel.getMapPanel().getElement().getId(),
- layerManager.getLayerManagerBus());
- layerManager.setOlMap(olMapMng.getOLOSMMap());
- mainPanel.setMap(olMapMng.getOLOSMMap());
-
-
- String attributionHTML = "
"
- +olMapMng.getOLOSMMap().getMapAttribution()+
- "
";
-
+ //LOADING THE BASE MAP LAYERS
+ GeoportalDataViewerServiceAsync.Util.getInstance().getListBaseLayers(new AsyncCallback>() {
- RootPanel.get(APP_DIV).add(new HTML(attributionHTML));
+ @Override
+ public void onFailure(Throwable caught) {
+ RootPanel.get(APP_DIV).remove(loaderApp);
+ Window.alert("Error occurred on instancing the GeoPortale Viewer. Please, contact the support");
+ }
+
+ @Override
+ public void onSuccess(List listBaseMapLayers) {
+ RootPanel.get(APP_DIV).remove(loaderApp);
+ loadGeonaDataViewerProfile();
+ mainPanel.setBaseLayers(listBaseMapLayers);
+
+ BaseMapLayer firstBaseLayer = listBaseMapLayers.get(0);
+ //Passing the first base map layer that will be applied as first base layer
+ olMapMng = new OLMapManager(mainPanel.getMapPanel().getElement().getId(),
+ layerManager.getLayerManagerBus(), firstBaseLayer);
+ layerManager.setOlMap(olMapMng.getOLOSMMap());
+ mainPanel.setMap(olMapMng.getOLOSMMap());
+
+ //mainPanel.setMapAttribution(olMapMng.getOLOSMMap().getMapAttribution());
+ updateSize();
+ ScriptInjector.fromUrl("//cdnjs.cloudflare.com/ajax/libs/nanogallery2/3.0.5/jquery.nanogallery2.min.js")
+ .setWindow(ScriptInjector.TOP_WINDOW).inject();
+
+ }
+
+
+ });
- //mainPanel.setMapAttribution(olMapMng.getOLOSMMap().getMapAttribution());
- updateSize();
- ScriptInjector.fromUrl("//cdnjs.cloudflare.com/ajax/libs/nanogallery2/3.0.5/jquery.nanogallery2.min.js")
- .setWindow(ScriptInjector.TOP_WINDOW).inject();
}
});
@@ -129,28 +169,15 @@ public class GeoportalDataViewer implements EntryPoint {
}
});
- paramWmsRequest = Window.Location.getParameter(GeoportalDataViewerConstants.GET_WMS_PARAMETER);
- paramGeonaItemType = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE);
- // paramUUID =
- // Window.Location.getParameter(GeoportalDataViewerConstants.GET_UUID_PARAMETER);
- paramGeonaItemID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID);
- paramLayerTitle = Window.Location.getParameter(GeoportalDataViewerConstants.GET_LAYER_TITLE);
- GWT.log(GeoportalDataViewerConstants.GET_WMS_PARAMETER + " = " + paramWmsRequest);
- GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE + " = " + paramGeonaItemType);
- GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID + " = " + paramGeonaItemID);
- // GWT.log(GeoportalDataViewerConstants.GET_UUID_PARAMETER + " = " + paramUUID);
- GWT.log(GeoportalDataViewerConstants.GET_LAYER_TITLE + " = " + paramLayerTitle);
-
- // VALIDATING THE LONG FORMAT FOR GID
-// try {
-// if (paramGeonaItemID != null)
-// Long.parseLong(paramGeonaItemID);
-// } catch (Exception e) {
-// Window.alert("Bad format for parameter " + GeoportalDataViewerConstants.GET_GEONA_ITEM_ID
-// + ". It must be a Long");
-// paramGeonaItemID = null;
-// }
+
+ bindEvents();
+
+ RootPanel.get(APP_DIV).add(attributionDiv);
+ }
+
+ private void loadGeonaDataViewerProfile() {
+
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
@@ -206,8 +233,7 @@ public class GeoportalDataViewer implements EntryPoint {
});
}
});
-
- bindEvents();
+
}
/**
@@ -410,6 +436,30 @@ public class GeoportalDataViewer implements EntryPoint {
}
});
+
+
+ applicationBus.addHandler(ChangeMapLayerEvent.TYPE, new ChangeMapLayerEventHandler() {
+
+ @Override
+ public void onChangeBaseMapLayer(ChangeMapLayerEvent changeMapLayerEvent) {
+
+ BaseMapLayer baseLayer = changeMapLayerEvent.getBaseMapLayer();
+
+ if (baseLayer == null)
+ return;
+
+ String attributionHTML = ""
+ + baseLayer.getAttribution() + "
";
+ olMapMng.getOLOSMMap().changeBaseMap(baseLayer);
+
+ //THE OSM Contributors are automatically added by gwt-ol, other ones not.
+ if(!baseLayer.getType().equals(BaseMapLayer.OL_BASE_MAP.OSM)) {
+ attributionDiv.setHTML(attributionHTML);
+ }else
+ attributionDiv.setHTML("");
+
+ }
+ });
}
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 b4f9611..b48828a 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
@@ -9,6 +9,7 @@ import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaSpatialQueryResult;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest;
@@ -124,5 +125,7 @@ public interface GeoportalDataViewerService extends RemoteService {
List getWFSFeatures(List layerObjects, String mapSrsName,
BoundsMap selectBBOX, int maxWFSFeature, double zoomLevel);
+ List getListBaseLayers();
+
}
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 fd50869..462a52e 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
@@ -9,6 +9,7 @@ import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaSpatialQueryResult;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest;
@@ -58,4 +59,6 @@ public interface GeoportalDataViewerServiceAsync {
void getWFSFeatures(List layerObjects, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature,
double zoomLevel, AsyncCallback> callback);
+ void getListBaseLayers(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 a379883..2fc6d15 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
@@ -10,6 +10,7 @@ import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.ExtentMapUtil;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.ExtentMapUtil.Location;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.ExtentMapUtil.PLACE;
+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.GeoQuery.TYPE;
@@ -45,19 +46,21 @@ public class OLMapManager {
*
* @param targetId the target id
* @param layerManagerBus the layer manager bus
+ * @param baseMapLayer the base map layer
*/
- public OLMapManager(String targetId, HandlerManager layerManagerBus) {
+ public OLMapManager(String targetId, HandlerManager layerManagerBus, BaseMapLayer baseMapLayer) {
this.targetId = targetId;
this.layerManagerBus = layerManagerBus;
- instanceOLMap();
+ instanceOLMap(baseMapLayer);
}
/**
* Instance OL map.
+ * @param baseMapLayer
*/
- public void instanceOLMap() {
+ public void instanceOLMap(BaseMapLayer baseMapLayer) {
- olMap = new OpenLayerOSM(targetId, layerManagerBus) {
+ olMap = new OpenLayerOSM(targetId, layerManagerBus, baseMapLayer) {
@Override
public void clickListener(MapBrowserEvent event) {
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEvent.java
new file mode 100644
index 0000000..2ace889
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEvent.java
@@ -0,0 +1,57 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+/**
+ * The Class ChangeMapLayerEvent.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Nov 12, 2021
+ */
+public class ChangeMapLayerEvent extends GwtEvent {
+ public static Type TYPE = new Type();
+ private BaseMapLayer baseMapLayer;
+
+ /**
+ * Instantiates a new change map layer event.
+ *
+ * @param baseMapLayer the base map layer
+ */
+ public ChangeMapLayerEvent(BaseMapLayer baseMapLayer) {
+ this.baseMapLayer = baseMapLayer;
+
+ }
+
+ /**
+ * Gets the associated type.
+ *
+ * @return the associated type
+ */
+ @Override
+ public Type getAssociatedType() {
+ return TYPE;
+ }
+
+ /**
+ * Dispatch.
+ *
+ * @param handler the handler
+ */
+ @Override
+ protected void dispatch(ChangeMapLayerEventHandler handler) {
+ handler.onChangeBaseMapLayer(this);
+
+ }
+
+ /**
+ * Gets the base map layer.
+ *
+ * @return the base map layer
+ */
+ public BaseMapLayer getBaseMapLayer() {
+ return baseMapLayer;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEventHandler.java
new file mode 100644
index 0000000..143eac0
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ChangeMapLayerEventHandler.java
@@ -0,0 +1,20 @@
+package org.gcube.portlets.user.geoportaldataviewer.client.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+/**
+ * The Interface ChangeMapLayerEventHandler.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Nov 12, 2021
+ */
+public interface ChangeMapLayerEventHandler extends EventHandler {
+
+ /**
+ * On change base map layer.
+ *
+ * @param changeMapLayerEvent the change map layer event
+ */
+ void onChangeBaseMapLayer(ChangeMapLayerEvent changeMapLayerEvent);
+}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java
index 7b5c71a..cbe9b44 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java
@@ -142,20 +142,15 @@ public abstract class OpenLayerOSM {
private Layer baseLayerTile;
- private String mapAttribution;
/**
* Instantiates a new open layer OSM.
*
* @param divTargetId the div target id
- * @param eventBus the event bus
+ * @param eventBus the event bus
+ * @param baseLayer the base layer
*/
- /*
- * (non-Javadoc)
- *
- * @see de.desjardins.ol3.demo.client.example.Example#show()
- */
- public OpenLayerOSM(String divTargetId, HandlerManager eventBus) {
+ public OpenLayerOSM(String divTargetId, HandlerManager eventBus, BaseMapLayer baseLayer) {
this.eventBus = eventBus;
for (int i = 0; i < 100; i++) {
@@ -191,12 +186,6 @@ public abstract class OpenLayerOSM {
map.addInteraction(new KeyboardPan());
map.addInteraction(new KeyboardZoom());
-
- String attribution = "© Mapbox © OpenStreetMap Improve this map";
- BaseMapLayer baseLayer = new BaseMapLayer(
- "https://{a-d}.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoiZDRzY2llbmNlIiwiYSI6ImNpcW1nZjE4MDAwMXNod25rdHJsemRoNTQifQ.YPNkNLb8EzjThpvJl1tg4w",
- attribution, BaseMapLayer.OL_BASE_MAP.MAPBOX);
-
//applying base map
changeBaseMap(baseLayer);
@@ -204,11 +193,15 @@ public abstract class OpenLayerOSM {
}
+ /**
+ * Change base map.
+ *
+ * @param baseLayer the base layer
+ */
public void changeBaseMap(BaseMapLayer baseLayer) {
BaseMapLayer.OL_BASE_MAP baseMap = baseLayer.getType() == null ? BaseMapLayer.OL_BASE_MAP.OSM
: baseLayer.getType();
- this.mapAttribution = baseLayer.getAttribution();
try {
if (baseLayerTile != null)
@@ -221,8 +214,12 @@ public abstract class OpenLayerOSM {
case OSM:
XyzOptions xyzOptions = OLFactory.createOptions();
Osm osmSource = new Osm(xyzOptions);
+ osmSource.setUrl(baseLayer.getUrl());
+ //setAttributions is buggy
+ //osmSource.setAttributions(baseLayer.getAttribution());
LayerOptions layerOptions = OLFactory.createOptions();
layerOptions.setSource(osmSource);
+ layerOptions.setZIndex(0);
baseLayerTile = new Tile(layerOptions);
break;
@@ -231,18 +228,23 @@ public abstract class OpenLayerOSM {
XyzOptions xyzOptions2 = OLFactory.createOptions();
Xyz xyz = new Xyz(xyzOptions2);
- xyz.setAttributions(mapAttribution);
+ //setAttributions is buggy
+ //xyz.setAttributions(baseLayer.getAttribution());
xyz.setUrl(baseLayer.getUrl());
+
LayerOptions layerOptions2 = OLFactory.createOptions();
layerOptions2.setSource(xyz);
+ layerOptions2.setZIndex(0);
baseLayerTile = new Tile(layerOptions2);
+
break;
}
// map == null at init time
- if (map != null)
+ if (map != null) {
map.addLayer(baseLayerTile);
+ }
}
@@ -863,8 +865,8 @@ public abstract class OpenLayerOSM {
/**
* Swap details layers.
*
- * @param layerSource the source index
- * @param layerTarget the target index
+ * @param swapLSource the swap L source
+ * @param swapLTarget the swap L target
*/
public void swapDetailsLayers(SwapLayer swapLSource, SwapLayer swapLTarget) {
@@ -895,8 +897,4 @@ public abstract class OpenLayerOSM {
return map.get((map.keySet().toArray())[index]);
}
- public String getMapAttribution() {
- return mapAttribution;
- }
-
}
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 c8cd6f5..0c74a2c 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
@@ -1,14 +1,18 @@
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.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.RecordDV;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
+import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM;
import org.gcube.portlets.user.geoportaldataviewer.client.resources.Images;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.ExtentMapUtil;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.map.ExtentMapUtil.Location;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.NavLink;
@@ -18,6 +22,8 @@ import com.google.gwt.core.client.GWT;
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.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.uibinder.client.UiBinder;
@@ -27,7 +33,9 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.ScrollPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
@@ -83,12 +91,17 @@ public class GeonaDataViewMainPanel extends Composite {
@UiField
HTMLPanel panelAttribution;
+
+ @UiField
+ HTMLPanel panelBaseLayers;
private MapPanel mapPanel;
private OpenLayerOSM map;
private HandlerManager applicationBus;
+
+
/**
* Instantiates a new geona data view main panel.
@@ -122,7 +135,7 @@ public class GeonaDataViewMainPanel extends Composite {
bindEvents();
}
-
+
private void bindEvents() {
layersDDB.addClickHandler(new ClickHandler() {
@@ -332,5 +345,39 @@ public class GeonaDataViewMainPanel extends Composite {
panelAttribution.add(label);
panelAttribution.add(p);
}
+
+ public void setBaseLayers(List listBaseLayers) {
+
+ if(listBaseLayers==null)
+ return;
+
+ int i = 0;
+
+ for (BaseMapLayer baseMapLayer : listBaseLayers) {
+
+ RadioButton radio = new RadioButton("base-layer");
+ radio.setText(baseMapLayer.getName());
+ if(i==0) {
+ radio.setValue(true, true);
+ }
+
+ radio.addValueChangeHandler(new ValueChangeHandler() {
+
+ @Override
+ public void onValueChange(ValueChangeEvent event) {
+ applicationBus.fireEvent(new ChangeMapLayerEvent(baseMapLayer));
+
+ }
+ });
+
+ SimplePanel sp = new SimplePanel(radio);
+ sp.getElement().addClassName("form-inline");
+ sp.getElement().addClassName("map-layers-radio");
+ panelBaseLayers.add(sp);
+ i++;
+ }
+
+ }
+
}
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 5701faf..8f70659 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
@@ -16,6 +16,10 @@
+
+
+
+
@@ -31,7 +35,7 @@
Click on the Points shown on the Map to view their features
+ addStyleNames="info-interaction" visible="false">
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 708d003..de501bf 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
@@ -34,6 +34,7 @@ import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.Concessio
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.accesspolicy.GeoNACheckAccessPolicy;
import org.gcube.portlets.user.geoportaldataviewer.server.util.SessionUtil;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaSpatialQueryResult;
+import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest;
@@ -660,5 +661,31 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
}
+
+ @Override
+ public List getListBaseLayers() {
+
+ List listBL = new ArrayList();
+
+ // OSM
+ String attribution = "© OpenStreetMap";
+ BaseMapLayer baseLayer = new BaseMapLayer("Open Street Map", "https://tile.openstreetmap.org/{z}/{x}/{y}.png", attribution,
+ BaseMapLayer.OL_BASE_MAP.OSM);
+
+ listBL.add(baseLayer);
+
+
+ // MAPBOX
+ attribution = "© Mapbox © OpenStreetMap Improve this map";
+ baseLayer = new BaseMapLayer("MapBox Satellite",
+ "https://{a-d}.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoiZDRzY2llbmNlIiwiYSI6ImNpcW1nZjE4MDAwMXNod25rdHJsemRoNTQifQ.YPNkNLb8EzjThpvJl1tg4w",
+ attribution, BaseMapLayer.OL_BASE_MAP.MAPBOX);
+
+ listBL.add(baseLayer);
+
+
+ return listBL;
+
+ }
}
diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BaseMapLayer.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BaseMapLayer.java
index 834fb5e..de0b773 100644
--- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BaseMapLayer.java
+++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BaseMapLayer.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
- * Nov 11, 2021
+ * Nov 11, 2021
*/
public class BaseMapLayer implements Serializable {
@@ -21,12 +21,13 @@ public class BaseMapLayer implements Serializable {
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
- * Nov 11, 2021
+ * Nov 11, 2021
*/
public static enum OL_BASE_MAP {
OSM, MAPBOX, OTHER
};
+ private String name;
private String url;
private String attribution;
private OL_BASE_MAP type;
@@ -38,72 +39,59 @@ public class BaseMapLayer implements Serializable {
}
- /**
- * Instantiates a new base map layer.
- *
- * @param url the url
- * @param attribution the attribution
- * @param type the type
- */
- public BaseMapLayer(String url, String attribution, OL_BASE_MAP type) {
+ public BaseMapLayer(String name, String url, String attribution, OL_BASE_MAP type) {
super();
+ this.name = name;
this.url = url;
this.attribution = attribution;
this.type = type;
}
- /**
- * Gets the url.
- *
- * @return the url
- */
+ public String getName() {
+ return name;
+ }
+
public String getUrl() {
return url;
}
- /**
- * Gets the attribution.
- *
- * @return the attribution
- */
public String getAttribution() {
return attribution;
}
- /**
- * Gets the type.
- *
- * @return the type
- */
public OL_BASE_MAP getType() {
return type;
}
- /**
- * Sets the url.
- *
- * @param url the new url
- */
+ public void setName(String name) {
+ this.name = name;
+ }
+
public void setUrl(String url) {
this.url = url;
}
- /**
- * Sets the attribution.
- *
- * @param attribution the new attribution
- */
public void setAttribution(String attribution) {
this.attribution = attribution;
}
- /**
- * Sets the type.
- *
- * @param type the new type
- */
public void setType(OL_BASE_MAP type) {
this.type = type;
}
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("BaseMapLayer [name=");
+ builder.append(name);
+ builder.append(", url=");
+ builder.append(url);
+ builder.append(", attribution=");
+ builder.append(attribution);
+ builder.append(", type=");
+ builder.append(type);
+ builder.append("]");
+ return builder.toString();
+ }
+
}
diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css
index 93cf4a8..59620a7 100644
--- a/src/main/webapp/GeoportalDataViewer.css
+++ b/src/main/webapp/GeoportalDataViewer.css
@@ -364,12 +364,26 @@ body {
max-height: 25px;
}
-.map-attribution-container {
+.map-credits-container {
bottom: 0;
right: 0;
position: absolute;
display: block;
- margin: 10px 5px;
+ margin: 0px 0px;
padding: 2px 4px;
background: white;
+}
+
+.map-layers-radio {
+ margin-left: 5px;
+}
+
+.map-layers-radio input {
+ margin-top: 0 !important;
+ margin-left: 5px;
+}
+
+.map-layers-radio label {
+ margin-left: 5px;
+ padding-top: 5px;
}
\ No newline at end of file