diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 3463b99..eff1bce 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,6 @@ - + + @@ -19,7 +20,8 @@ - + + @@ -39,7 +41,8 @@ - + + @@ -59,7 +62,8 @@ - + + @@ -79,7 +83,8 @@ - + + @@ -95,7 +100,8 @@ - + + @@ -111,13 +117,11 @@ - - - + uses - - + + @@ -137,7 +141,8 @@ - + + @@ -155,7 +160,8 @@ - + + @@ -175,7 +181,8 @@ - + + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml index a673605..71a67d1 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml @@ -6,7 +6,7 @@ - + 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 0f7ec96..4bf23e0 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 @@ -13,6 +13,9 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMap import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler; 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; +import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.DO_LAYER_ACTION; +import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent; @@ -23,7 +26,6 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMini 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.ui.GeonaDataViewMainPanel; -import org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd.DragDropLayer; import org.gcube.portlets.user.geoportaldataviewer.client.util.URLUtil; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery; @@ -38,7 +40,6 @@ import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.RootPanel; import ol.Coordinate; @@ -89,24 +90,8 @@ public class GeoportalDataViewer implements EntryPoint { * This is the entry point method. */ public void onModuleLoad() { - - - - - FlowPanel fp = new FlowPanel(); - - for (int i = 0; i < 10; i++) { - DragDropLayer dandd = new DragDropLayer("Layer: "+i, true, true); - fp.add(dandd); - } - - - - RootPanel.get(APP_DIV).add(fp); - mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight()); - - //RootPanel.get(APP_DIV).add(mainPanel); + RootPanel.get(APP_DIV).add(mainPanel); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @@ -209,7 +194,6 @@ public class GeoportalDataViewer implements EntryPoint { }); bindEvents(); - } /** @@ -352,6 +336,34 @@ public class GeoportalDataViewer implements EntryPoint { } }); + + applicationBus.addHandler(DoActionOnDetailLayersEvent.TYPE, new DoActionOnDetailLayersEventHandler() { + + @Override + public void onDoActionOnDetailLayers(DoActionOnDetailLayersEvent doActionOnDetailLayersEvent) { + + DO_LAYER_ACTION doAction = doActionOnDetailLayersEvent.getDoAction(); + switch (doAction) { + case OPACITY: + olMapMng.getOLOSMMap().setWMSDetailLayerOpacity(doActionOnDetailLayersEvent.getLayerSource(), + doActionOnDetailLayersEvent.getOpacity()); + break; + + case SWAP: + + break; + + case VISIBILITY: + olMapMng.getOLOSMMap().setWMSDetailLayerVisible(doActionOnDetailLayersEvent.getLayerSource(), + doActionOnDetailLayersEvent.getVisibility()); + break; + + default: + break; + } + + } + }); } 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 96c4b48..7ea071e 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 @@ -88,6 +88,8 @@ public class LayerManager { private HandlerManager applicationBus; private org.gcube.application.geoportalcommon.shared.LayerItem baseLayerFromISProfile; + + private OverlayLayerManager overlayLayerManager; /** * Instantiates a new layer manager. @@ -96,6 +98,7 @@ public class LayerManager { */ public LayerManager(HandlerManager applicationBus) { this.applicationBus = applicationBus; + overlayLayerManager = new OverlayLayerManager(applicationBus); bindEvents(); } @@ -312,6 +315,8 @@ public class LayerManager { public void removeAllDetailLayers() { mapDetailLayerObjects.clear(); olMap.removeAllDetailLayers(); + overlayLayerManager.resetLayers(); + overlayLayerManager.hide(); } /** @@ -422,6 +427,8 @@ public class LayerManager { if (dlo == null) { mapDetailLayerObjects.put(key, lo); olMap.addWMSDetailLayer(layerItem); + overlayLayerManager.addLayerItem(layerItem); + overlayLayerManager.show(); } else { GWT.log("Skipping detail layer " + key + " already added to Map"); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java new file mode 100644 index 0000000..26023ad --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/OverlayLayerManager.java @@ -0,0 +1,40 @@ +package org.gcube.portlets.user.geoportaldataviewer.client; + +import java.util.ArrayList; + +import org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd.DragDropLayer; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.FlowPanel; + +public class OverlayLayerManager extends DialogBox { + + ArrayList layers = new ArrayList(); + FlowPanel fp = new FlowPanel(); + private HandlerManager applicationBus; + + public OverlayLayerManager(HandlerManager applicationBus) { + this.applicationBus = applicationBus; + setText("Layers"); + getElement().addClassName("myOverlayLayerManager"); + fp.getElement().getStyle().setMarginTop(10, Unit.PX); + fp.getElement().getStyle().setMarginBottom(10, Unit.PX); + add(fp); + //getElement().getStyle().setZIndex(100); + } + + void addLayerItem(LayerItem layer) { + DragDropLayer dandd = new DragDropLayer(applicationBus, layer, true, true); + layers.add(layer); + fp.add(dandd); + } + + public void resetLayers() { + layers.clear(); + fp.clear(); + + } +} 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 new file mode 100644 index 0000000..ff8aa21 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEvent.java @@ -0,0 +1,96 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.events; + +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; + +import com.google.gwt.event.shared.GwtEvent; + +/** + * The Class DoActionOnDetailLayersEvent. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Oct 8, 2021 + */ +public class DoActionOnDetailLayersEvent extends GwtEvent { + public static Type TYPE = new Type(); + + /** + * The Enum DO_LAYER_ACTION. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Oct 8, 2021 + */ + public static enum DO_LAYER_ACTION { + VISIBILITY, SWAP, OPACITY + } + + private DO_LAYER_ACTION doAction; + private LayerItem layerSource; + private LayerItem layerTarget; + private int opacity; + private boolean visibility; + + /** + * Instantiates a new added layer to map event. + * + * @param action the action + * @param layerSource the layer source + * @param layerTarget the layer target + */ + public DoActionOnDetailLayersEvent(DO_LAYER_ACTION action, LayerItem layerSource, LayerItem layerTarget) { + this.layerSource = layerSource; + this.layerTarget = layerTarget; + this.doAction = action; + } + + public void setOpacity(int opacity) { + this.opacity = opacity; + } + + public void setVisibility(boolean visibility) { + this.visibility = visibility; + } + + /** + * Gets the associated type. + * + * @return the associated type + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /** + * Dispatch. + * + * @param handler the handler + */ + @Override + protected void dispatch(DoActionOnDetailLayersEventHandler handler) { + handler.onDoActionOnDetailLayers(this); + + } + + public DO_LAYER_ACTION getDoAction() { + return doAction; + } + + public LayerItem getLayerSource() { + return layerSource; + } + + public LayerItem getLayerTarget() { + return layerTarget; + } + + public int getOpacity() { + return opacity; + } + + public boolean getVisibility() { + return visibility; + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEventHandler.java new file mode 100644 index 0000000..b11bac8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/DoActionOnDetailLayersEventHandler.java @@ -0,0 +1,21 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.events; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface DoActionOnDetailLayersEventHandler. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Oct 8, 2021 + */ +public interface DoActionOnDetailLayersEventHandler extends EventHandler { + + /** + * On do action on detail layers. + * + * @param doActionOnDetailLayersEvent the do action on detail layers event + */ + void onDoActionOnDetailLayers(DoActionOnDetailLayersEvent doActionOnDetailLayersEvent); +} 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 b0e1a2c..e7e0743 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 @@ -58,7 +58,6 @@ import ol.source.Source; import ol.source.Vector; import ol.source.XyzOptions; -// TODO: Auto-generated Javadoc /** * The Class OpenLayerOSM. * @@ -131,7 +130,9 @@ public abstract class OpenLayerOSM { private boolean isQueryPointActive; - private java.util.Map wmsDetailsLayerMap; + private HashMap wmsDetailsLayerMap; + + private Integer[] wmsDetailsLayerZIndex = new Integer[100]; private HashMap wmsLayerMap; @@ -149,6 +150,10 @@ public abstract class OpenLayerOSM { public OpenLayerOSM(String divTargetId, HandlerManager eventBus) { this.eventBus = eventBus; + for (int i = 0; i < 100; i++) { + wmsDetailsLayerZIndex[i] = 1000 + i; + } + // create a OSM-layer XyzOptions xyzOptions = OLFactory.createOptions(); // osmSourceOptions.setCrossOrigin("Anonymous"); @@ -157,7 +162,7 @@ public abstract class OpenLayerOSM { Osm osmSource = new Osm(xyzOptions); LayerOptions osmLayerOptions = OLFactory.createOptions(); osmLayerOptions.setSource(osmSource); - + Tile osmLayer = new Tile(osmLayerOptions); // create a projection projectionOptions.setCode(MAP_PROJECTION.EPSG_3857.getName()); @@ -387,7 +392,7 @@ public abstract class OpenLayerOSM { if (wmsDetailsLayerMap == null) wmsDetailsLayerMap = new HashMap(); - String key = layerItem.getName(); + String key = layerItem.getName(); Image layer = wmsDetailsLayerMap.get(key); @@ -414,9 +419,6 @@ public abstract class OpenLayerOSM { } Image wmsLayer = new Image(layerOptions); - - // visibleLayerItems - map.addLayer(wmsLayer); wmsDetailsLayerMap.put(key, wmsLayer); @@ -716,7 +718,6 @@ public abstract class OpenLayerOSM { return this.map != null; } - /** * Gets the layers from map. * @@ -769,5 +770,30 @@ public abstract class OpenLayerOSM { public HashMap getWmsLayerMap() { return wmsLayerMap; } + + public void setWMSDetailLayerVisible(LayerItem layerItem, boolean visible) { + String key = layerItem.getName(); + Image layer = wmsDetailsLayerMap.get(key); + layer.setVisible(visible); + } + + public void setWMSDetailLayerOpacity(LayerItem layerItem, int opacity) { + String key = layerItem.getName(); + Image layer = wmsDetailsLayerMap.get(key); + layer.setOpacity(opacity); + } + + public void swapLayers(LayerItem layerItem, LayerItem layerItem2) { + String key1 = layerItem.getName(); + Image layer1 = wmsDetailsLayerMap.get(key1); + + String key2 = layerItem.getName(); + Image layer2 = wmsDetailsLayerMap.get(key2); + + int zIndex1 = layer1.getZIndex(); + int zIndex2 = layer2.getZIndex(); + layer1.setZIndex(zIndex2); + layer2.setZIndex(zIndex1); + } } 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 36e8c7e..b7daff3 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 @@ -1,11 +1,17 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd; +import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent; +import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.DO_LAYER_ACTION; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; + import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.CheckBox; import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DragLeaveEvent; import com.google.gwt.event.dom.client.DragLeaveHandler; import com.google.gwt.event.dom.client.DragOverEvent; @@ -14,6 +20,9 @@ import com.google.gwt.event.dom.client.DragStartEvent; import com.google.gwt.event.dom.client.DragStartHandler; import com.google.gwt.event.dom.client.DropEvent; import com.google.gwt.event.dom.client.DropHandler; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; @@ -28,9 +37,11 @@ public class DragDropLayer extends FlowPanel { private Label label; private CheckBox checkBoxVisibility = new CheckBox(); private Button button = new Button(); + private HandlerManager applicationBus; - public DragDropLayer(String text, boolean draggable, boolean droppable) { - this.label = new Label(text); + public DragDropLayer(HandlerManager applicationBus, LayerItem layer, boolean draggable, boolean droppable) { + this.applicationBus = applicationBus; + this.label = new Label(layer.getName()); getElement().getStyle().setMarginTop(5, Unit.PX); getElement().getStyle().setMarginBottom(10, Unit.PX); @@ -53,11 +64,23 @@ public class DragDropLayer extends FlowPanel { FlexTable ft = new FlexTable(); ft.setWidget(0, 0, button); checkBoxVisibility.getElement().getStyle().setMarginLeft(10, Unit.PX); + checkBoxVisibility.setValue(true); ft.setWidget(0, 1, checkBoxVisibility); ft.setWidget(0, 2, label); ft.setWidget(1, 2, new SimplePanel(rs)); add(ft); button.setIcon(IconType.MOVE); + + checkBoxVisibility.addValueChangeHandler(new ValueChangeHandler() { + + @Override + public void onValueChange(ValueChangeEvent event) { + DoActionOnDetailLayersEvent dae = new DoActionOnDetailLayersEvent(DO_LAYER_ACTION.VISIBILITY, layer, null); + dae.setVisibility(checkBoxVisibility.getValue()); + applicationBus.fireEvent(dae); + + } + }); } private void initDrag() { diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/LayerContainer.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/LayerContainer.java deleted file mode 100644 index 8748578..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/dandd/LayerContainer.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.gcube.portlets.user.geoportaldataviewer.client.ui.dandd; - -import com.github.gwtbootstrap.client.ui.CheckBox; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Label; - -public class LayerContainer extends FlowPanel{ - - private CheckBox checkBoxVisibility = new CheckBox(); - private Label label; - private RangeSlider rs = new RangeSlider(); - private HorizontalPanel hp = new HorizontalPanel(); - private DragDropLayer dd = new DragDropLayer(DEBUG_ID_PREFIX, true, true); - - public LayerContainer(String layerName) { - add(dd); - hp.add(checkBoxVisibility); - label = new Label(layerName); - hp.add(label); - add(hp); - add(rs); - } - -} diff --git a/src/main/resources/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml b/src/main/resources/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml index a673605..71a67d1 100644 --- a/src/main/resources/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/geoportaldataviewer/GeoportalDataViewer.gwt.xml @@ -6,7 +6,7 @@ - + diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css index d5964c2..deec93c 100644 --- a/src/main/webapp/GeoportalDataViewer.css +++ b/src/main/webapp/GeoportalDataViewer.css @@ -333,4 +333,8 @@ body { border-radius: 50%; background: #04AA6D; cursor: pointer; +} + +.myOverlayLayerManager{ + border-radius: 20px; } \ No newline at end of file