From 67e4275b55e8c47856177231fce317b0ef9c2968 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 31 Jan 2023 10:15:30 +0100 Subject: [PATCH] #24506 done. Locate/Highlight the Layer --- CHANGELOG.md | 7 + pom.xml | 4 +- .../client/GeoportalDataViewer.java | 68 +++----- .../client/LayerManager.java | 1 + .../events/DoActionOnDetailLayersEvent.java | 44 +++-- .../client/gis/OpenLayerMap.java | 162 ++++++++++-------- .../client/resources/GNAImages.java | 6 + .../client/resources/locate.png | Bin 0 -> 1226 bytes .../client/resources/locate_none.png | Bin 0 -> 1617 bytes .../client/ui/dandd/DragDropLayer.java | 125 ++++++++++---- .../client/ui/dandd/RangeSlider.java | 2 +- .../server/Geoportal_JSON_Mapper.java | 1 + src/main/webapp/GeoportalDataViewer.css | 2 + 13 files changed, 259 insertions(+), 163 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/locate.png create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/locate_none.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fcfdb4..d482602 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ 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 +- Moved to gwt 2.10 + ## [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 b304ded..fa3e149 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 @@ -8,10 +8,11 @@ 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.application.geoportalcommon.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MapEventType; import org.gcube.portlets.user.geoportaldataviewer.client.events.AddLayerToMapEvent; @@ -556,7 +557,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); @@ -585,44 +586,14 @@ public class GeoportalDataViewer implements EntryPoint { break; case LOCATE_LAYER: - LayerItem layerItem = doLayerActionEvent.getLayerItem(); + final LayerItem layerItem = doLayerActionEvent.getLayerItem(); - ol.layer.Image layer = olMap.getWmsDetailsLayerMap().get(layerItem.getName()); - - - - ExtentWrapped sourceExt = olMap.getSourceExtentForLayer(layerItem.getName()); - - GWT.log("extent: "+sourceExt); - -// BoundsMap theBBOX = new BoundsMap(layer.getExtent().getLowerLeftX(), layer.getExtent().getLowerLeftY(), layer.getExtent().getUpperRightX(), layer.getExtent().getUpperRightY(), -// null); - -// Coordinate lower = OLFactory.createCoordinate(olMap.getBBOX().getLowerLeftX(), olMap.getBBOX().getLowerLeftY()); -// Coordinate lowerCoord = MapUtils.transformCoordiante(lower, MAP_PROJECTION.EPSG_4326.getName(), -// MAP_PROJECTION.EPSG_3857.getName()); -// -// Coordinate upper = OLFactory.createCoordinate(olMap.getBBOX().getUpperRightX(), olMap.getBBOX().getUpperRightY()); -// Coordinate upperCoord = MapUtils.transformCoordiante(upper, MAP_PROJECTION.EPSG_4326.getName(), -// MAP_PROJECTION.EPSG_3857.getName()); - - - BoundsMap theBBOX = new BoundsMap(sourceExt.getLowerLeftX(), sourceExt.getLowerLeftY(), sourceExt.getUpperRightX(), sourceExt.getUpperRightY(), null); - GWT.log("theBBOX: "+theBBOX); -// if (bbox != null) { - -// Coordinate lower = OLFactory.createCoordinate(olMap.getBBOX().getLowerLeftX(), olMap.getBBOX().getLowerLeftY()); -// Coordinate lowerCoord = MapUtils.transformCoordiante(lower, MAP_PROJECTION.EPSG_4326.getName(), -// MAP_PROJECTION.EPSG_3857.getName()); -// -// Coordinate upper = OLFactory.createCoordinate(olMap.getBBOX().getUpperRightX(), olMap.getBBOX().getUpperRightY()); -// Coordinate upperCoord = MapUtils.transformCoordiante(upper, MAP_PROJECTION.EPSG_4326.getName(), -// MAP_PROJECTION.EPSG_3857.getName()); -// -// ew = new ExtentWrapped(lowerCoord.getX(), lowerCoord.getY(), upperCoord.getX(), upperCoord.getY()); - -// } + boolean layerHighlighted = olMap.areLayerFeaturesAsHighlight(layerItem); + if(layerHighlighted) { + olMap.removeLayerFeaturesAsHighlight(layerItem.getName()); + return; + } GeoportalDataViewerServiceAsync.Util.getInstance().getWFSRequest(layerItem, olMap.getProjectionCode(), null, 0, "json", @@ -651,7 +622,7 @@ public class GeoportalDataViewer implements EntryPoint { GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions(); ProjectionOptions projectionOptions = new ProjectionOptions(); - projectionOptions.setCode(MAP_PROJECTION.EPSG_3857.getName()); + projectionOptions.setCode(MAP_PROJECTION.EPSG_4326.getName()); Projection fp = new Projection(projectionOptions); fo.setFeatureProjection(fp); fo.setDataProjection(fp); @@ -663,16 +634,25 @@ public class GeoportalDataViewer implements EntryPoint { Feature[] features = geoJson.readFeatures(response.getText()); GWT.log("features: "+features); //Feature[] features = new GeoJson().readFeatures(jsonObject, projectionOptions); - olMap.addFeaturesAsHighlight(features); + olMap.addLayerFeaturesAsHighlight(layerItem, features); + + ProjectDV projectDV = doLayerActionEvent.getLayerObject().getProjectDV(); + 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) + olMap.setCenter(transfCoord); + } } }); } catch (RequestException e) { - // Code omitted for clarity + } - - //olMap.locateLayer(doLayerActionEvent.getLayerItem()); - } }); 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 e397efb..52bde9c 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,7 @@ package org.gcube.portlets.user.geoportaldataviewer.client.events; 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; @@ -31,29 +32,30 @@ public class DoActionOnDetailLayersEvent extends GwtEvent wmsLayerMap; + private LinkedHashMap vectorLayersHighlighted = new LinkedHashMap(); + private Layer baseLayerTile; private LayerOrder layerOrder = new LayerOrder(); @@ -310,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); } /** @@ -329,7 +331,7 @@ public abstract class OpenLayerMap { animations.setDuration(ZOOM_ANIMATED_DURATION); animations.setZoom(zoom); view.animate(animations); - //view.setZoom(zoom); + // view.setZoom(zoom); } /** @@ -453,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); @@ -467,7 +475,7 @@ public abstract class OpenLayerMap { ImageWms imageWMSSource = wmsLayer.getSource(); ImageWmsParams imageWMSParams = imageWMSSource.getParams(); - if (cqlFilterExpression == null || cqlFilterExpression.length()>MAX_LENGHT_CQL_FOR_GET_REQUEST) { + if (cqlFilterExpression == null || cqlFilterExpression.length() > MAX_LENGHT_CQL_FOR_GET_REQUEST) { imageWMSParams.delete("CQL_FILTER"); } else { imageWMSParams.set("CQL_FILTER", cqlFilterExpression); @@ -530,45 +538,16 @@ public abstract class OpenLayerMap { GWT.log("The WMS detail layer with key: " + key + " already exists, skipping"); } - } - - public void locateLayer(LayerItem layerItem) { - - String key = layerItem.getName(); - Image layer = wmsDetailsLayerMap.get(key); - - Source source = layer.getSource(); - // GeoportalDataViewerConstants.printJsObj(source); - String sorceRootObj = GeoportalDataViewerConstants.toJsonObj(source); - JSONValue jsonObj = JSONParser.parseStrict(sorceRootObj); - // GWT.log("jsonObj: " + jsonObj.toString()); - JSONObject jsonSourceObj = (JSONObject) jsonObj; - GeoportalDataViewerConstants.printJsObj(jsonSourceObj); - -// layer.get("geometry"); -// GWT.log("The geometry is: "+layer.getSource().get("geometry")); - -// Point thePoint = new Point(coordinate); -// Feature vf = new Feature(layer.getExtent()); -// vf.setStyle(style); -// ol.source.Vector vector = new ol.source.Vector(); -// vector.addFeature(vf); -// VectorLayerOptions vectorLayerOptions = new VectorLayerOptions(); -// vectorLayerOptions.setSource(vector); -// ol.layer.Vector geometryLayer = new ol.layer.Vector(vectorLayerOptions); -// int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.VECTOR)+1; -// geometryLayer.setZIndex(zIndex); -// map.addLayer(geometryLayer); - - } /** * 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) @@ -589,8 +568,6 @@ public abstract class OpenLayerMap { */ public void removeAllDetailLayers() { - // NOT NEEDED ANYMORE.. I'M USING MIN/MAX LAYER RESOLUTION - if (wmsDetailsLayerMap == null) return; @@ -605,6 +582,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. * @@ -637,53 +632,82 @@ public abstract class OpenLayerMap { map.addLayer(vector); } - + /** * Adds the vector. * - * @param geometry the geometry + * @param layerItem the layer item + * @param features the features */ - public void addFeaturesAsHighlight(Feature[] 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, 255, 1.0)); + strokeOptions.setColor(new Color(255, 255, 255, 0.8)); strokeOptions.setWidth(5); Stroke stroke = new Stroke(strokeOptions); - stroke.setWidth(5); - FillOptions fillOptions = new FillOptions(); - fillOptions.setColor(new Color(0, 0, 255, 1.0)); + stroke.setWidth(3); + style.setStroke(stroke); - -// FillOptions fillOptions = new FillOptions(); -// fillOptions.setColor(color); -// Fill fill = new Fill(fillOptions); - -// style.setFill(fill); Vector vectorSource = OLFactory.createVectorSource(); vectorSource.addFeatures(features); - - GWT.log("features: "+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(11000); + // 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. * @@ -955,7 +979,6 @@ public abstract class OpenLayerMap { return null; } - /** * Gets the wms details layer map. * @@ -1017,8 +1040,6 @@ public abstract class OpenLayerMap { Image layer = wmsDetailsLayerMap.get(key); layer.setOpacity(opacity); } - - /** * Swap details layers. @@ -1057,7 +1078,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/resources/locate.png b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/resources/locate.png new file mode 100644 index 0000000000000000000000000000000000000000..4a97dedd39af07cbdbab41223328b6cf95a6ff46 GIT binary patch literal 1226 zcmV;*1U37KP)3kK~zYIwU%9M6jc<*|L4x^?ritFOQE|h(qcnH5h02%3WOlW zXGwSvBQZjZK!PFB2OkXOK_84#C{U6{5@KR}AkoC=gAZ5}3C4(39!x+fwAQke?rh8M z&VJ3zJwEiqZa-!Q#Q)d#Mz6{*8eea{gokAYc(5Gq(I0NDUc zA{cDje@m-;Nt&hJsk2=p%lXk#gN<(u?5dDI zu;81&wS+>ezNKJd1BB`svPjYd8~R|?FkUS5cV-vCR=j?#6Up?i6ifsko>DI^=|!sP zPfhf8{Rsd90AhQ8NFbRSe3T#npoV0awN-=BJy#m%U}|&w*A#4Qc$A*!WO-lP7ss1!UY$PofUgl8G ziPRuOH2$ti!nf5GBu#K}{9N|rn!^C`yb36JsWAbtd)F4n&N%uQne(n5Yy|`W+ci;(uXhT|KzyC62gnqV zGUJ*ST=`yd-<6i7VhwLxO^HD4ZC4gsV?x%ZE&%M9M}bI?Qe8I_M}|I#?*F|J0784d zX-*uy^?pNq?GR~k*B-U4{3nEN7AuT<1qvoTH8qU&DN%BbaE zo9OAdxiGc}1^{|r=clrm>4CH!jKnsmdjC}R8 zJC})F~kzeBAFWX2_N*|WREp}FmzwO{wWygdXd&WwQP-g;}l}b(n#B-;1A2@ zg6L@9P#H@$HSfEYPym@WW43?u2mb<4)lyaclB(vz|0pG2Z=5M56#?;NUo+^SW);JM z74CWC$tpelZ_U2<7J6pn$s7kj3X1-8t)bZtZ2XL{a-QL-SLLG(=LeeoY_s@&v{JS@ ztX28k1jnL_FD4TnA4rG34jKSC6>7*Pc4}p<PGP0(9*A$kFV0`1y4;!Yg0)aQt0m)nPjX&GEv+3k~)6 zOLt9`ygYc%!7&w+fo;;=J#JE}SuNc<=lADf@$)Xdv6S!j*}~IHgx4;?9ecZD!|yq$ z?V1cM#yc;aJrvcuE(H0>H-4ov&%K}es+JYN<98a$uY<4ED~)Z6jg90Ow?FjjNx|8^ z2MgA|T|D@{N7dgM(O37Jwhg!McZZ-}53H*Zj(x?$UoI&tU$Qi|4fw>me;5%H!2f7x zT(a`L6Tvmvm#n=p_WfO}{C#Jd^gCM`Y;i|l%KzzE!qZEIGflAllpRrW+&FZG^V^@B z5gs%-05%bQ#*>x*#CXu6T=@2aJmQYU$@XS)-omP1Kgr&1@bl8+^ zxb?T8-7}Ys3kL9S2?mM^3uivOz%aiWzI$AG<8taLihS_cBEwDPu%$uyM_}v|j({d2 ziO|K9xzw*2vmA^7|L$D$hI!Rl?;ZZTa^SB@(hk^-z^a>s&7URtAqY=!j09REbEq{RagF$k+v7P^PWd?s(`GdteZ1 z1n&QYNuGQ_^zByVo`ZHuP)$VDB>Lw}1O+g@Y;$<=jS@8iH^s^i;o4^gXENk6W+BVry0celtdbK!H0>D>T~mW;&lHdcz@~zhWxTjKKiGo&MWwe^+3*&Bnv=tWf{;Y?U!{ z{+fXS4NWVl)>ya;Kyj1aNPorE7s@jnDgQ5c>sB*2bkXZZLU(99oY2m|7o889!mK{( z0iE){fDsppH@sD8eEzjooX?5K9HSJeXby@-KviFtc=%_* zeRI?H#t_)Q@!~?J%{V1q-&B(ySL(*l{@~8g?&>Y$f&o~4)KgS`>!(asZY}EhxQJAX zG1Ia5)TkGXVAUWhpeV*gP=Pp>xMI6RJOQ=wf7*Dgp|hvy6fZ4|rc3I-9IAo*za&PB P00000NkvXXu0mjff3Yhx literal 0 HcmV?d00001 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 b3d27c2..f03581d 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; @@ -32,21 +33,29 @@ 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 Button draggableButton = new Button(); private HandlerManager applicationBus; private LayerObject layerObject; @@ -54,7 +63,6 @@ public class DragDropLayer extends FlowPanel { private com.google.gwt.user.client.ui.Label labelProject; private boolean layerVisibility = true; private HTML buttonLayerVisibility = new HTML(); - private Button buttonLocate = new Button(); public DragDropLayer(HandlerManager applicationBus, LayerObject layerObject, boolean draggable, boolean droppable) { this.applicationBus = applicationBus; @@ -62,6 +70,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); @@ -75,8 +103,8 @@ public class DragDropLayer extends FlowPanel { if (result != null) { for (String key : result.keySet()) { result.get(key); - //referProject = key + ": " + result.get(key); - realProjectName = result.get(key)+""; + // referProject = key + ": " + result.get(key); + realProjectName = result.get(key) + ""; break; } } @@ -120,42 +148,47 @@ 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(); - - buttonLocate.setIcon(IconType.MAP_MARKER); - buttonLocate.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - setLayerVisibilityButtonImage(); - DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.LOCATE_LAYER, - layerItem); - applicationBus.fireEvent(dae); - - } - }); + VerticalPanel vp = new VerticalPanel(); + VerticalPanel vpInner = new VerticalPanel(); + HorizontalPanel hp1 = new HorizontalPanel(); + vpInner.getElement().getStyle().setMarginLeft(47, Unit.PX); - - // labelLayerName.getElement().getStyle().setMarginLeft(10, Unit.PX); - ft.setWidget(0, 1, buttonLayerVisibility); - ft.setWidget(0, 2, buttonLocate); - ft.setWidget(0, 3, labelProject); + hp1.add(draggableButton); + hp1.add(buttonLayerVisibility); + hp1.add(buttonLocate); + vpInner.add(labelProject); - if(layerObject.getProjectDV().getTemporalReference()!=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(hp1); + vp.add(vpInner); + add(vp); + + // add(ft); draggableButton.setIcon(IconType.MOVE); buttonLayerVisibility.addClickHandler(new ClickHandler() { @@ -164,20 +197,46 @@ 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); + 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"); + } else { + buttonLocate.getElement().appendChild(imgLocateNone.getElement()); + buttonLocate.setTitle("Highlight the layer"); } } @@ -243,7 +302,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(), 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/Geoportal_JSON_Mapper.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java index bd65665..e30f206 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java @@ -577,6 +577,7 @@ public class Geoportal_JSON_Mapper { projectView.addSectionView(sectionView); } + LOG.debug("returning the projectView: " + projectView); return projectView; } diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css index 07aff81..6c4ecd9 100644 --- a/src/main/webapp/GeoportalDataViewer.css +++ b/src/main/webapp/GeoportalDataViewer.css @@ -363,6 +363,8 @@ body { .dand-layer { width: 400px; + border: 1px solid #ccc !important; + padding: 5px 0px; } .range-slider {