gui_optimization_25461 #16

Merged
francesco.mangiacrapa merged 6 commits from gui_optimization_25461 into master 2023-09-05 15:16:50 +02:00
24 changed files with 337 additions and 269 deletions

View File

@ -1,16 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" output="target/geoportal-data-viewer-app-3.5.0-SNAPSHOT/WEB-INF/classes" path="src/main/java"> <classpathentry kind="src" output="target/geoportal-data-viewer-app-3.6.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes> <attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry excluding="**" kind="src" output="target/geoportal-data-viewer-app-3.5.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> <classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes> <attributes>
<attribute name="test" value="true"/> <attribute name="test" value="true"/>
@ -35,5 +30,5 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="target/geoportal-data-viewer-app-3.5.0-SNAPSHOT/WEB-INF/classes"/> <classpathentry kind="output" path="target/geoportal-data-viewer-app-3.6.0-SNAPSHOT/WEB-INF/classes"/>
</classpath> </classpath>

View File

@ -1,4 +1,4 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-3.5.0-SNAPSHOT lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-3.6.0-SNAPSHOT
warSrcDir=src/main/webapp warSrcDir=src/main/webapp
warSrcDirIsOutput=false warSrcDirIsOutput=false

View File

@ -86,7 +86,15 @@
<wb-module deploy-name="geoportal-data-viewer-app-3.5.0-SNAPSHOT">
<wb-module deploy-name="geoportal-data-viewer-app-3.6.0-SNAPSHOT">
@ -241,6 +249,10 @@
@ -329,6 +341,10 @@
@ -417,6 +433,10 @@
@ -505,93 +525,6 @@
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module archiveName="geoportal-data-common-2.2.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/geoportal-data-common/geoportal-data-common">
<dependency-type>uses</dependency-type>
</dependent-module>
@ -684,6 +617,10 @@
@ -772,6 +709,10 @@
@ -860,6 +801,10 @@

View File

@ -4,6 +4,11 @@
All notable changes to this project will be documented in this file. 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). This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v3.6.0-SNAPSHOT]
- GUI optimization [#25461]
- Using the latest libraries version: gwt-ol.v8.4.1 (with openlayers.v6.6.1) and gwt.v2.10
## [v3.5.0] ## [v3.5.0]
- Supported the cross-filtering [#25074] - Supported the cross-filtering [#25074]

View File

@ -14,7 +14,7 @@
<groupId>org.gcube.portlets.user</groupId> <groupId>org.gcube.portlets.user</groupId>
<artifactId>geoportal-data-viewer-app</artifactId> <artifactId>geoportal-data-viewer-app</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>3.5.0</version> <version>3.6.0-SNAPSHOT</version>
<name>GeoPortal Data Viewer App</name> <name>GeoPortal Data Viewer App</name>
<description>The GeoPortal Data Viewer App is an application to access, discovery and navigate the Geoportal projects/documents by a Web-Map Interface</description> <description>The GeoPortal Data Viewer App is an application to access, discovery and navigate the Geoportal projects/documents by a Web-Map Interface</description>
@ -23,6 +23,7 @@
<gwt.version>2.10.0</gwt.version> <gwt.version>2.10.0</gwt.version>
<gwt.compiler.style>PRETTY</gwt.compiler.style> <gwt.compiler.style>PRETTY</gwt.compiler.style>
<gson.version>2.6.2</gson.version> <gson.version>2.6.2</gson.version>
<gwt.ol.version>8.4.1</gwt.ol.version>
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory> <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
<!-- GWT 2.9 support 8, 9 and 11 --> <!-- GWT 2.9 support 8, 9 and 11 -->
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
@ -102,7 +103,7 @@
<dependency> <dependency>
<groupId>com.github.tdesjardins</groupId> <groupId>com.github.tdesjardins</groupId>
<artifactId>gwt-ol3</artifactId> <artifactId>gwt-ol3</artifactId>
<version>8.1.0-gwt2_9</version> <version>${gwt.ol.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.gwtbootstrap</groupId> <groupId>com.github.gwtbootstrap</groupId>

View File

@ -112,6 +112,8 @@ public class GeoportalDataViewer implements EntryPoint {
public static final String DIV_TIMELINE_DATA = "timeline-data"; public static final String DIV_TIMELINE_DATA = "timeline-data";
public static final String DIV_LAYER_VIEW = "layer-viewer";
public static final String APP_NOTIFIER = "app-notifier"; public static final String APP_NOTIFIER = "app-notifier";
/** The Constant APP_DIV. */ /** The Constant APP_DIV. */
@ -415,6 +417,7 @@ public class GeoportalDataViewer implements EntryPoint {
mainPanel.setPanelsHeight(height); mainPanel.setPanelsHeight(height);
GWT.log("Set height: " + height); GWT.log("Set height: " + height);
mainPanel.setPanelsWidth(Window.getClientWidth());
} }
/** /**

View File

@ -15,6 +15,8 @@ import com.google.gwt.i18n.client.DateTimeFormat;
*/ */
public class GeoportalDataViewerConstants { public class GeoportalDataViewerConstants {
public static final int TABLET_WIDTH = 1601;
public static final String MAP_DIV = "map"; public static final String MAP_DIV = "map";
public static final String GET_WMS_PARAMETER = "wmsrequest"; public static final String GET_WMS_PARAMETER = "wmsrequest";
@ -37,6 +39,32 @@ public class GeoportalDataViewerConstants {
public static final String PROJECT_ID_KEY_FEATURE = "projectid"; public static final String PROJECT_ID_KEY_FEATURE = "projectid";
public static enum GisToolbarFacilities {
COLLECTION("Collection", "Open the collections"),
MAP("Map", "Select the base Map"),
OVERLAY("Overlay", "Add overlay layers"),
SEARCH("Search", "Search in the collections"),
FILTER("Filter", "Apply spatial filtering"),
LAYERS("Layers", "Layers added to Map"),
PRESET_LOCATION("Preset Location", "Center the Map to Location");
String name;
String tooltip;
GisToolbarFacilities(String name, String tooltip) {
this.name = name;
this.tooltip = tooltip;
}
public String getName() {
return name;
}
public String getTooltip() {
return tooltip;
}
}
/** /**
* The Enum LayerType. * The Enum LayerType.
* *

View File

@ -515,7 +515,7 @@ public class LayerManager {
GWT.log("Parsed WMS Request returned: " + geoInfoWMS); GWT.log("Parsed WMS Request returned: " + geoInfoWMS);
LayerItem layerItem = toLayerItem(featureType, layerTitle, geoInfoWMS.getLayerName(), LayerItem layerItem = toLayerItem(featureType, layerTitle, geoInfoWMS.getLayerName(),
geoInfoWMS.getWmsRequest(), geoInfoWMS.getBaseWmsServiceHost(), true, isBase, geoInfoWMS.getWmsRequest(), geoInfoWMS.getServiceEndPoint(), true, isBase,
displayInLayerSwitcher, (ArrayList<String>) geoInfoWMS.getStyles().getGeoStyles(), displayInLayerSwitcher, (ArrayList<String>) geoInfoWMS.getStyles().getGeoStyles(),
geoInfoWMS.getWmsRequest(), false, geoInfoWMS.getMapWMSNoStandard(), geoInfoWMS.getWmsRequest(), false, geoInfoWMS.getMapWMSNoStandard(),
geoInfoWMS.isNcWMS(), UUID, geoInfoWMS.getZAxis(), minResolution, maxResolution); geoInfoWMS.isNcWMS(), UUID, geoInfoWMS.getZAxis(), minResolution, maxResolution);
@ -1142,6 +1142,7 @@ public class LayerManager {
FlexTable intFlex = new FlexTable(); FlexTable intFlex = new FlexTable();
intFlex.setCellPadding(1); intFlex.setCellPadding(1);
intFlex.setCellSpacing(1); intFlex.setCellSpacing(1);
intFlex.getElement().addClassName("thePopDataTable");
if (projectDV.getTheDocument() != null) { if (projectDV.getTheDocument() != null) {
LinkedHashMap<String, Object> map = projectDV.getTheDocument().getDocumentAsMap(); LinkedHashMap<String, Object> map = projectDV.getTheDocument().getDocumentAsMap();
// my-html-table // my-html-table

View File

@ -32,15 +32,15 @@ public class ExtentWrapped extends ol.Extent {
super(minX, minY, maxX, maxY); super(minX, minY, maxX, maxY);
} }
/** // /**
* @param coordinate coordinate to check. // * @param coordinate coordinate to check.
* @return true if the passed coordinate is contained or on the edge of the // * @return true if the passed coordinate is contained or on the edge of the
* extent. // * extent.
*/ // */
@JsOverlay // @JsOverlay
public final Coordinate getCenter() { // public final Coordinate getCenter() {
return getCenter((ol.Extent) this); // return getCenter((ol.Extent) this);
} // }
@JsMethod(name = "getCenter", namespace = PACKAGE_EXTENT) @JsMethod(name = "getCenter", namespace = PACKAGE_EXTENT)
private static native Coordinate getCenter(Extent extent); private static native Coordinate getCenter(Extent extent);

View File

@ -439,7 +439,7 @@ public abstract class OpenLayerMap {
imageWMSParams.setLayers(layerItem.getName()); imageWMSParams.setLayers(layerItem.getName());
ImageWmsOptions imageWMSOptions = OLFactory.createOptions(); ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
imageWMSOptions.setUrl(layerItem.getMapServerHost()); imageWMSOptions.setUrl(layerItem.getMapServerEndpoint());
imageWMSOptions.setParams(imageWMSParams); imageWMSOptions.setParams(imageWMSParams);
// imageWMSOptions.setRatio(1.5f); // imageWMSOptions.setRatio(1.5f);
@ -544,7 +544,7 @@ public abstract class OpenLayerMap {
imageWMSParams.setLayers(layerItem.getName()); imageWMSParams.setLayers(layerItem.getName());
ImageWmsOptions imageWMSOptions = OLFactory.createOptions(); ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
imageWMSOptions.setUrl(layerItem.getMapServerHost()); imageWMSOptions.setUrl(layerItem.getMapServerEndpoint());
imageWMSOptions.setParams(imageWMSParams); imageWMSOptions.setParams(imageWMSParams);
// imageWMSOptions.setRatio(1.5f); // imageWMSOptions.setRatio(1.5f);
@ -595,7 +595,7 @@ public abstract class OpenLayerMap {
imageWMSParams.setLayers(layerItem.getName()); imageWMSParams.setLayers(layerItem.getName());
ImageWmsOptions imageWMSOptions = OLFactory.createOptions(); ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
imageWMSOptions.setUrl(layerItem.getMapServerHost()); imageWMSOptions.setUrl(layerItem.getMapServerEndpoint());
imageWMSOptions.setParams(imageWMSParams); imageWMSOptions.setParams(imageWMSParams);
// imageWMSOptions.setRatio(1.5f); // imageWMSOptions.setRatio(1.5f);

View File

@ -11,9 +11,20 @@
top: 50px; top: 50px;
right: 10px; right: 10px;
} }
.to-align-left {
position: absolute;
top: 5px;
color: white !important;
text-decoration: none !important;
}
.to-align-left :hover {
color: #F5F5F5;
}
</ui:style> </ui:style>
<g:HTMLPanel ui:field="detailsHTMLPanel" visible="false"> <g:HTMLPanel ui:field="detailsHTMLPanel" visible="false">
<b:Button ui:field="closeButton" addStyleNames="{style.to-align-right}"></b:Button> <b:Button ui:field="closeButton" addStyleNames="{style.to-align-left}"></b:Button>
<g:HTMLPanel ui:field="datailsContainerPanel"></g:HTMLPanel> <g:HTMLPanel ui:field="datailsContainerPanel"></g:HTMLPanel>
</g:HTMLPanel> </g:HTMLPanel>
</ui:UiBinder> </ui:UiBinder>

View File

@ -14,7 +14,9 @@ import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.Conf
import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.LayerIDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.layers.LayerIDV;
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView; import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewer;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.GisToolbarFacilities;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; 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.ChangeMapLayerEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent;
@ -64,6 +66,7 @@ import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
@ -77,6 +80,8 @@ import com.google.gwt.user.client.ui.Widget;
*/ */
public class GeonaDataViewMainPanel extends Composite { public class GeonaDataViewMainPanel extends Composite {
private static final String PLACEHOLDER_SELECT_SEARCH_IN = "Select Collection..."; private static final String PLACEHOLDER_SELECT_SEARCH_IN = "Select Collection...";
private static GeonaDataViewMainPanelUiBinder uiBinder = GWT.create(GeonaDataViewMainPanelUiBinder.class); private static GeonaDataViewMainPanelUiBinder uiBinder = GWT.create(GeonaDataViewMainPanelUiBinder.class);
@ -142,8 +147,10 @@ public class GeonaDataViewMainPanel extends Composite {
@UiField @UiField
ListBox navListSearch; ListBox navListSearch;
@UiField //@UiField
ScrollPanel overlayLayersPanel; //ScrollPanel overlayLayersPanel;
RootPanel overlayLayersPanel = RootPanel.get(GeoportalDataViewer.DIV_LAYER_VIEW);
@UiField @UiField
ScrollPanel searchFacilityPanel; ScrollPanel searchFacilityPanel;
@ -179,6 +186,7 @@ public class GeonaDataViewMainPanel extends Composite {
mapPanel = new MapPanel(mapHeight + "px"); mapPanel = new MapPanel(mapHeight + "px");
detailsPanel.setHeight(mapHeight + "px"); detailsPanel.setHeight(mapHeight + "px");
detailsPanel.setApplicationBus(applicationBus); detailsPanel.setApplicationBus(applicationBus);
overlayLayersPanel.setVisible(false);
mainContainerPanel.add(mapPanel); mainContainerPanel.add(mapPanel);
bindHandlers(); bindHandlers();
dataPointSelection.setIcon(IconType.SCREENSHOT); dataPointSelection.setIcon(IconType.SCREENSHOT);
@ -282,9 +290,16 @@ public class GeonaDataViewMainPanel extends Composite {
}); });
openCollectionDropDown.setTitle(GisToolbarFacilities.COLLECTION.getTooltip());
linkCustomOverlayLayers.setTitle(GisToolbarFacilities.OVERLAY.getTooltip());
linkCrossFilteringLayers.setTitle(GisToolbarFacilities.FILTER.getTooltip());
searchFacilityButton.setTitle(GisToolbarFacilities.SEARCH.getTooltip());
linkLayers.setTitle(GisToolbarFacilities.LAYERS.getTooltip());
linkMap.setTitle(GisToolbarFacilities.MAP.getTooltip());
linkPresetLocation.setTitle(GisToolbarFacilities.PRESET_LOCATION.getTooltip());
// layersDDB.setToggle(true); // layersDDB.setToggle(true);
bindEvents(); bindEvents();
} }
/** /**
@ -362,6 +377,27 @@ public class GeonaDataViewMainPanel extends Composite {
} }
public void setPanelsWidth(int clientWidth) {
if(clientWidth<GeoportalDataViewerConstants.TABLET_WIDTH) {
openCollectionDropDown.setText("");
linkCustomOverlayLayers.setText("");
linkCrossFilteringLayers.setText("");
searchFacilityButton.setText("");
linkLayers.setText("");
linkPresetLocation.setText("");
linkMap.setText("");
}else {
openCollectionDropDown.setText(GisToolbarFacilities.COLLECTION.getName());
linkCustomOverlayLayers.setText(GisToolbarFacilities.OVERLAY.getName());
linkCrossFilteringLayers.setText(GisToolbarFacilities.FILTER.getName());
searchFacilityButton.setText(GisToolbarFacilities.SEARCH.getName());
linkLayers.setText(GisToolbarFacilities.LAYERS.getName());
linkMap.setText(GisToolbarFacilities.MAP.getName());
linkPresetLocation.setText(GisToolbarFacilities.PRESET_LOCATION.getName());
}
}
/** /**
* Sets the overlay panel max height. * Sets the overlay panel max height.
*/ */
@ -745,4 +781,6 @@ public class GeonaDataViewMainPanel extends Composite {
} }
} }

View File

@ -55,18 +55,15 @@
addStyleNames="open-collection-style"> addStyleNames="open-collection-style">
</g:HTMLPanel> </g:HTMLPanel>
</b:DropdownButton> </b:DropdownButton>
<b:DropdownButton type="LINK" <b:DropdownButton type="LINK" text="Map" ui:field="linkMap" icon="GLOBE">
title="Select the base Map" text="Map" ui:field="linkMap" icon="GLOBE">
<g:HTMLPanel ui:field="panelBaseLayers"> <g:HTMLPanel ui:field="panelBaseLayers">
</g:HTMLPanel> </g:HTMLPanel>
</b:DropdownButton> </b:DropdownButton>
<b:DropdownButton type="LINK" visible="false" <b:DropdownButton type="LINK" visible="false" text="Overlay" ui:field="linkCustomOverlayLayers" icon="REORDER">
title="Add overlay layers.." text="Overlay" ui:field="linkCustomOverlayLayers" icon="REORDER">
<g:HTMLPanel ui:field="panelCustomOverlayLayers" addStyleNames="overlay-panel-style"> <g:HTMLPanel ui:field="panelCustomOverlayLayers" addStyleNames="overlay-panel-style">
</g:HTMLPanel> </g:HTMLPanel>
</b:DropdownButton> </b:DropdownButton>
<b:DropdownButton type="LINK" visible="false" <b:DropdownButton type="LINK" visible="false" text="Filter" ui:field="linkCrossFilteringLayers" icon="FILTER">
title="Apply spatial filtering.." text="Filter" ui:field="linkCrossFilteringLayers" icon="FILTER">
<g:HTMLPanel ui:field="panelCrossFilteringLayers" addStyleNames="filter-panel-style"> <g:HTMLPanel ui:field="panelCrossFilteringLayers" addStyleNames="filter-panel-style">
</g:HTMLPanel> </g:HTMLPanel>
</b:DropdownButton> </b:DropdownButton>
@ -83,8 +80,7 @@
<g:ScrollPanel ui:field="searchFacilityPanel" <g:ScrollPanel ui:field="searchFacilityPanel"
addStyleNames="search-facility"></g:ScrollPanel> addStyleNames="search-facility"></g:ScrollPanel>
</b:DropdownButton> </b:DropdownButton>
<b:DropdownButton type="LINK" <b:DropdownButton type="LINK" text="Preset Location"
title="Center Map to Location" text="Preset Location"
ui:field="linkPresetLocation" addStyleNames="preset-location"> ui:field="linkPresetLocation" addStyleNames="preset-location">
<b:Nav> <b:Nav>
<b:Button type="LINK" ui:field="extentToItaly" <b:Button type="LINK" ui:field="extentToItaly"
@ -109,8 +105,8 @@
text="Remove Query" visible="false"></b:Button> text="Remove Query" visible="false"></b:Button>
<b:Button type="LINK" text="Layers" ui:field="linkLayers"> <b:Button type="LINK" text="Layers" ui:field="linkLayers">
</b:Button> </b:Button>
<g:ScrollPanel ui:field="overlayLayersPanel" <!-- <g:ScrollPanel ui:field="overlayLayersPanel"
addStyleNames="layers-panel" visible="false"></g:ScrollPanel> addStyleNames="layers-panel" visible="false"></g:ScrollPanel> -->
</g:HTMLPanel> </g:HTMLPanel>
</g:HTMLPanel> </g:HTMLPanel>
<c:DetailsPanel ui:field="detailsPanel" <c:DetailsPanel ui:field="detailsPanel"

View File

@ -23,6 +23,7 @@
color: white; color: white;
padding: 10px 10px; padding: 10px 10px;
font-size: 14px; font-size: 14px;
padding-left: 40px;
} }
.width-100 { .width-100 {

View File

@ -219,7 +219,7 @@ public class OverlayCustomLayerPanel extends Composite {
flow.add(new HTMLPanel("Legend for: " + theLayerName)); flow.add(new HTMLPanel("Legend for: " + theLayerName));
final HorizontalPanel hpLegend = new HorizontalPanel(); final HorizontalPanel hpLegend = new HorizontalPanel();
String url = geoInformation.getBaseWmsServiceHost() + "?service=WMS&" + "version=" String url = geoInformation.getServiceEndPoint() + "?service=WMS&" + "version="
+ URLUtil.getValueOfParameter("version", wmsLink) + "&" + "request=GetLegendGraphic&" + "layer=" + URLUtil.getValueOfParameter("version", wmsLink) + "&" + "request=GetLegendGraphic&" + "layer="
+ theLayerName; + theLayerName;

View File

@ -271,7 +271,7 @@ public class LayerCollectionPanel extends Composite {
flow.add(new HTMLPanel("Legend for: " + theLayerName)); flow.add(new HTMLPanel("Legend for: " + theLayerName));
final HorizontalPanel hpLegend = new HorizontalPanel(); final HorizontalPanel hpLegend = new HorizontalPanel();
String url = geoInformation.getBaseWmsServiceHost() + "?service=WMS&" + "version=" String url = geoInformation.getServiceEndPoint() + "?service=WMS&" + "version="
+ URLUtil.getValueOfParameter("version", wmsLink) + "&" + "request=GetLegendGraphic&" + "layer=" + URLUtil.getValueOfParameter("version", wmsLink) + "&" + "request=GetLegendGraphic&" + "layer="
+ theLayerName; + theLayerName;

View File

@ -65,6 +65,7 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclara
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView; import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap; import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.util.StringUtil;
import org.gcube.application.geoportalcommon.util.URLParserUtil; import org.gcube.application.geoportalcommon.util.URLParserUtil;
import org.gcube.application.geoportaldatamapper.GcubeProfilesPerUCDIdCache; import org.gcube.application.geoportaldatamapper.GcubeProfilesPerUCDIdCache;
import org.gcube.application.geoportaldatamapper.Geoportal_JSON_Mapper; import org.gcube.application.geoportaldatamapper.Geoportal_JSON_Mapper;
@ -262,7 +263,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
public GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsLink, String layerName) throws Exception { public GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsLink, String layerName) throws Exception {
try { try {
WMSUrlValidator validator = new WMSUrlValidator(wmsLink, layerName); WMSUrlValidator validator = new WMSUrlValidator(wmsLink, layerName);
String wmsServiceHost = validator.getWmsServiceHost(); String wmsServiceServiceEndpoint = validator.getWmsServiceEndPoint();
String validWMSRequest = validator.parseWMSRequest(true, true); String validWMSRequest = validator.parseWMSRequest(true, true);
layerName = validator.getLayerName(); layerName = validator.getLayerName();
String versionWms = validator.getValueOfParsedWMSParameter(WmsParameters.VERSION); String versionWms = validator.getValueOfParsedWMSParameter(WmsParameters.VERSION);
@ -289,7 +290,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
? new ZAxis(layerZAxis.getUnits(), layerZAxis.isPositive(), layerZAxis.getValues()) ? new ZAxis(layerZAxis.getUnits(), layerZAxis.isPositive(), layerZAxis.getValues())
: null; : null;
return new GeoInformationForWMSRequest(wmsServiceHost, validWMSRequest, layerName, versionWms, crs, return new GeoInformationForWMSRequest(wmsServiceServiceEndpoint, validWMSRequest, layerName, versionWms, crs,
mapWmsNotStandard, styles, styles.isNcWms(), zAxis); mapWmsNotStandard, styles, styles.isNcWms(), zAxis);
} catch (Exception e) { } catch (Exception e) {
String msg = "An error occurred during wms request validation for layer: " + layerName; String msg = "An error occurred during wms request validation for layer: " + layerName;
@ -705,7 +706,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
GCubeSDILayer indexLayer = index.getLayer(); GCubeSDILayer indexLayer = index.getLayer();
HashMap<String, String> ogcLinks = indexLayer.getOgcLinks(); HashMap<String, String> ogcLinks = indexLayer.getOgcLinks();
String wmsLink = ogcLinks.get("wms"); String wmsLink = ogcLinks.get("wms");
LOG.info("wms link is {}", wmsLink); LOG.info("wms link is {}", StringUtil.ellipsize(wmsLink, 150));
int lastCharOfthePath = wmsLink.indexOf("?"); int lastCharOfthePath = wmsLink.indexOf("?");
String wmsPath = wmsLink.substring(0, lastCharOfthePath); String wmsPath = wmsLink.substring(0, lastCharOfthePath);
for (GeoServerPlatformInfoDV geoserver : indexLayer.getPlatformInfos()) { for (GeoServerPlatformInfoDV geoserver : indexLayer.getPlatformInfos()) {
@ -715,7 +716,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
LOG.debug("purged wmsPath from the 'workspace' is {}", wmsPath); LOG.debug("purged wmsPath from the 'workspace' is {}", wmsPath);
wmsLink = wmsPath + wmsLink.substring(lastCharOfthePath, wmsLink.length()); wmsLink = wmsPath + wmsLink.substring(lastCharOfthePath, wmsLink.length());
ogcLinks.put("wms", wmsLink); ogcLinks.put("wms", wmsLink);
LOG.info("wms link without {} is {}", geoserver.getWorkspace(), wmsLink); LOG.info("wms link without {} is {}", geoserver.getWorkspace(), StringUtil.ellipsize(wmsLink, 150));
} }
} }
return index; return index;
@ -863,7 +864,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
*/ */
@Override @Override
protected void onBeforeRequestDeserialized(String serializedRequest) { protected void onBeforeRequestDeserialized(String serializedRequest) {
LOG.info("onBeforeRequestDeserialized called"); LOG.debug("onBeforeRequestDeserialized called");
String scope = ""; String scope = "";
try { try {

View File

@ -61,8 +61,8 @@ public class GisMakers {
public static String buildWFSFeatureQuery(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX, public static String buildWFSFeatureQuery(LayerItem layerItem, String mapSrsName, BoundsMap mapBBOX,
int maxFeatures, String outputFormat) { int maxFeatures, String outputFormat) {
String link = layerItem.getMapServerHost(); String link = layerItem.getMapServerEndpoint();
LOG.debug("Map server host URL: " + link); LOG.debug("Map server endpoint: " + link);
LOG.debug("CQL filter is: " + layerItem.getCqlFilter()); LOG.debug("CQL filter is: " + layerItem.getCqlFilter());
LOG.debug("MAX FEATURES: " + maxFeatures); LOG.debug("MAX FEATURES: " + maxFeatures);
LOG.debug("BBOX: " + mapBBOX); LOG.debug("BBOX: " + mapBBOX);

View File

@ -24,7 +24,7 @@ public class WMSUrlValidator {
private static final String OWS = "ows"; private static final String OWS = "ows";
private HashMap<String, String> parametersValue = new HashMap<String, String>(); private HashMap<String, String> parametersValue = new HashMap<String, String>();
private String wmsRequestURI; private String wmsRequestURI;
private String wmsServiceHost; private String wmsServiceEndPoint;
private String layerName; private String layerName;
private String wmsNoStandardParameters = ""; private String wmsNoStandardParameters = "";
@ -48,34 +48,29 @@ public class WMSUrlValidator {
throw new Exception("WMS request is null or empty"); throw new Exception("WMS request is null or empty");
this.wmsRequestURI = wmsRequest.trim(); this.wmsRequestURI = wmsRequest.trim();
boolean isOwsService = GeoWmsServiceUtility.isOWSSerice(this.wmsRequestURI);
WebMapServerHost webMapServerHost;
// IS WMS?
if (GeoWmsServiceUtility.isWMSService(wmsRequestURI)) {
LOG.trace("found " + GeoWmsServiceUtility.SERVICE_WMS + " in wms request: " + wmsRequestURI);
webMapServerHost = getWebMapServerHost(wmsRequestURI);
} else
throw new Exception("WMS service not found for layer: " + inputLayerName);
// VALIDATION WMS // VALIDATION WMS
String baseWmsService = webMapServerHost.getHost(); int endpointLastCharIndex = wmsRequest.lastIndexOf("?");
// IS OWS OR WMS? // No '?' char found
this.wmsServiceHost = appendWmsServiceToBaseUrl(wmsRequest.substring(0, wmsRequest.indexOf("?")), isOwsService); if (endpointLastCharIndex == -1) {
this.layerName = inputLayerName; LOG.info("Char '?' not found, setting last index the end of the URI");
endpointLastCharIndex = wmsRequest.length();
}
String readWMSServiceEndpoint = wmsRequest.substring(0, endpointLastCharIndex);
this.wmsServiceEndPoint = readWMSServiceEndpoint;
try { try {
// VALIDATE WMS SERVICE FOR WEB MAP SERVER // VALIDATE WMS SERVICE FOR WEB MAP SERVER
if (!HttpRequestUtil.urlExists(this.wmsServiceHost, true)) { if (!HttpRequestUtil.urlExists(this.wmsServiceEndPoint, true)) {
LOG.info("baseWmsServiceUrl: " + wmsServiceHost LOG.warn("baseWmsServiceUrl: " + wmsServiceEndPoint + " is not valid URL!!");
+ " is not a geoserver, setting as input base wms server: " + baseWmsService); this.wmsServiceEndPoint = readWMSServiceEndpoint;
this.wmsServiceHost = baseWmsService;
} }
} catch (Exception e) { } catch (Exception e) {
LOG.error("error on validating geoserver wms service: " + e); LOG.error("Error on validating the endpoint: " + this.wmsServiceEndPoint, e);
LOG.info("setting baseWmsService as input base wms server: " + baseWmsService); boolean isOwsService = GeoWmsServiceUtility.isOWSSerice(this.wmsRequestURI);
this.wmsServiceHost = baseWmsService; LOG.info("Retrying by appending suffix WMS or WFS...");
this.wmsServiceEndPoint = appendWmsServiceToBaseUrl(readWMSServiceEndpoint, isOwsService);
} }
// VALIDATION FOR THREDDS - FIND LAYER NAME INTO WMS PATH // VALIDATION FOR THREDDS - FIND LAYER NAME INTO WMS PATH
@ -87,6 +82,7 @@ public class WMSUrlValidator {
} }
LOG.info("WMSURLValidator found endpoint: " + wmsServiceEndPoint);
parametersValue.put(WmsParameters.LAYERS.getParameter(), this.layerName); parametersValue.put(WmsParameters.LAYERS.getParameter(), this.layerName);
} }
@ -230,13 +226,13 @@ public class WMSUrlValidator {
} }
/** /**
* Gets the wms service host. * Gets the wms service end point.
* *
* @return the wms service host * @return the wms service end point
*/ */
public String getWmsServiceHost() { public String getWmsServiceEndPoint() {
return wmsServiceHost; return wmsServiceEndPoint;
} }
/** /**

View File

@ -36,7 +36,7 @@ public class LayerItem implements Serializable, Cloneable {
private String url; private String url;
/** The base map server URL. */ /** The base map server URL. */
private String mapServerHost; private String mapServerEndpoint;
/** The style. */ /** The style. */
private String style; private String style;
@ -774,21 +774,21 @@ public class LayerItem implements Serializable, Cloneable {
} }
/** /**
* Gets the map server host. * Gets the map server endpoint.
* *
* @return the map server host * @return the map server endpoint
*/ */
public String getMapServerHost() { public String getMapServerEndpoint() {
return mapServerHost; return mapServerEndpoint;
} }
/** /**
* Sets the map server host. * Sets the map server host.
* *
* @param mapServerHost the new map server host * @param mapServerEndpoint the new map server host
*/ */
public void setMapServerHost(String mapServerHost) { public void setMapServerHost(String mapServerEndpoint) {
this.mapServerHost = mapServerHost; this.mapServerEndpoint = mapServerEndpoint;
} }
/** /**
@ -881,6 +881,11 @@ public class LayerItem implements Serializable, Cloneable {
return maxResolution; return maxResolution;
} }
/**
* To string.
*
* @return the string
*/
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@ -890,8 +895,8 @@ public class LayerItem implements Serializable, Cloneable {
builder.append(title); builder.append(title);
builder.append(", url="); builder.append(", url=");
builder.append(url); builder.append(url);
builder.append(", mapServerHost="); builder.append(", mapServerEndpoint=");
builder.append(mapServerHost); builder.append(mapServerEndpoint);
builder.append(", style="); builder.append(", style=");
builder.append(style); builder.append(style);
builder.append(", isTrasparent="); builder.append(", isTrasparent=");

View File

@ -15,8 +15,7 @@ public class GeoInformationForWMSRequest implements Serializable {
/** The Constant serialVersionUID. */ /** The Constant serialVersionUID. */
private static final long serialVersionUID = -6846636281073641003L; private static final long serialVersionUID = -6846636281073641003L;
/** The base wms service host. */ private String serviceEndPoint;
private String baseWmsServiceHost;
/** The wms request. */ /** The wms request. */
private String wmsRequest; private String wmsRequest;
@ -53,7 +52,7 @@ public class GeoInformationForWMSRequest implements Serializable {
/** /**
* Instantiates a new geo information for wms request. * Instantiates a new geo information for wms request.
* *
* @param baseWmsServiceHost the base wms service host * @param serviceEndPoint the base wms service host
* @param wmsRequest the wms request * @param wmsRequest the wms request
* @param layerName the layer name * @param layerName the layer name
* @param versionWms the version wms * @param versionWms the version wms
@ -63,10 +62,9 @@ public class GeoInformationForWMSRequest implements Serializable {
* @param isNcWMS the is nc WMS * @param isNcWMS the is nc WMS
* @param zAxis the z axis * @param zAxis the z axis
*/ */
public GeoInformationForWMSRequest(String baseWmsServiceHost, String wmsRequest, String layerName, public GeoInformationForWMSRequest(String serviceEndPoint, String wmsRequest, String layerName, String versionWms,
String versionWms, String crs, HashMap<String, String> mapWmsNoStandard, Styles styles, boolean isNcWMS, String crs, HashMap<String, String> mapWmsNoStandard, Styles styles, boolean isNcWMS, ZAxis zAxis) {
ZAxis zAxis) { this.serviceEndPoint = serviceEndPoint;
this.baseWmsServiceHost = baseWmsServiceHost;
this.wmsRequest = wmsRequest; this.wmsRequest = wmsRequest;
this.layerName = layerName; this.layerName = layerName;
this.versionWMS = versionWms; this.versionWMS = versionWms;
@ -98,13 +96,21 @@ public class GeoInformationForWMSRequest implements Serializable {
} }
/** /**
* Gets the base wms service host. * Gets the service end point.
* *
* @return the baseWmsServiceHost * @return the service end point
*/ */
public String getBaseWmsServiceHost() { public String getServiceEndPoint() {
return serviceEndPoint;
}
return baseWmsServiceHost; /**
* Sets the service end point.
*
* @param serviceEndPoint the new service end point
*/
public void setServiceEndPoint(String serviceEndPoint) {
this.serviceEndPoint = serviceEndPoint;
} }
/** /**
@ -180,11 +186,11 @@ public class GeoInformationForWMSRequest implements Serializable {
/** /**
* Sets the base wms service host. * Sets the base wms service host.
* *
* @param baseWmsServiceHost the baseWmsServiceHost to set * @param baseWmsServiceHost the new base wms service host
*/ */
public void setBaseWmsServiceHost(String baseWmsServiceHost) { public void setBaseWmsServiceHost(String baseWmsServiceHost) {
this.baseWmsServiceHost = baseWmsServiceHost; this.serviceEndPoint = baseWmsServiceHost;
} }
/** /**
@ -271,8 +277,8 @@ public class GeoInformationForWMSRequest implements Serializable {
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("GeoInformationForWMSRequest [baseWmsServiceHost="); builder.append("GeoInformationForWMSRequest [serviceEndPoint=");
builder.append(baseWmsServiceHost); builder.append(serviceEndPoint);
builder.append(", wmsRequest="); builder.append(", wmsRequest=");
builder.append(wmsRequest); builder.append(wmsRequest);
builder.append(", layerName="); builder.append(", layerName=");

View File

@ -200,7 +200,7 @@ body {
/*margin-top: 30px;*/ /*margin-top: 30px;*/
overflow-y: auto; overflow-y: auto;
transition: width 0.5s; transition: width 0.5s;
z-index: 999; z-index: 950;
} }
.overlay { .overlay {
@ -363,12 +363,16 @@ body {
border-radius: 20px; border-radius: 20px;
} }
.layers-panel { .layer-panel {
margin-top: 10px; margin-top: 43px;
background-color: white; background-color: white;
opacity: 90%; opacity: 90%;
padding: 10px; padding: 10px;
width: 410px; width: 410px;
z-index: 500;
overflow-y: scroll;
position: absolute;
left: 52px;
} }
.dand-layer { .dand-layer {
@ -752,62 +756,6 @@ Table Of Contents (TOC)
padding: 20px; padding: 20px;
} }
/******************************
RESPONSIVE
*******************************/
@media all and (max-width: 2350px) {
#timeline-data {
width: 700px;
left: 550px;
}
}
@media all and (max-width: 2048px) {
#timeline-data {
width: 600px;
left: 310px;
bottom: 50px
}
.details-panel {
width: 600px;
}
}
@media all and (max-width: 1024px) {
#timeline-data {
width: 260px;
left: 140px;
bottom: 50px
}
.details-panel {
width: 400px;
}
.search-facility {
width: 250px;
max-width: 300px;
}
.inner-toolbar {
width: 100px;
}
}
@media all and (max-height: 900px) {
.ol-popup{
min-width: 150px;
max-width: 150px;
max-height: 150px;
overflow-y: scroll;
}
.ol-popup img {
width: 100%;
max-width: 150px;
}
}
/* OPEN COLLECTION UI */ /* OPEN COLLECTION UI */
.open-collection-style { .open-collection-style {
padding-left: 10px; padding-left: 10px;
@ -897,3 +845,89 @@ RESPONSIVE
.opacity-09 { .opacity-09 {
opacity: 0.9; opacity: 0.9;
} }
/******************************
RESPONSIVE
*******************************/
@media all and (max-width: 2350px) {
#timeline-data {
width: 700px;
left: 550px;
}
}
@media all and (max-width: 2048px) {
#timeline-data {
width: 600px;
left: 310px;
bottom: 50px
}
.details-panel {
width: 530px;
}
}
@media all and (max-width: 1601px) {
.layers-panel {
width: 350px;
}
.dand-layer {
width: 336px;
}
.thePopDataTable {
}
.search-facility {
max-width: 680px;
}
.search-field {
width: 97%;
}
.ol-popup {
min-width: 220px;
width: 220px;
}
.thePopDataTable tr:last-of-type {
display: none;
}
.layer-panel {
width: 355px;
}
}
@media all and (max-width: 1024px) {
#timeline-data {
width: 260px;
left: 140px;
bottom: 50px
}
.details-panel {
width: 400px;
}
.search-facility {
/*width: 250px;
max-width: 300px;*/
}
.inner-toolbar {
/*width: 100px;*/
}
}
@media all and (max-height: 900px) {
.ol-popup{
min-width: 150px;
max-width: 150px;
max-height: 150px;
overflow-y: scroll;
}
.ol-popup img {
width: 100%;
max-width: 150px;
}
}
/******************************
END RESPONSIVE
*******************************/

View File

@ -10,10 +10,10 @@
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link <link
href="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.4.3/css/ol.css" href="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.6.1/css/ol.css"
rel="stylesheet" type="text/css"> rel="stylesheet" type="text/css">
<script <script
src="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.4.3/build/ol.js" src="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.6.1/build/ol.js"
type="text/javascript"></script> type="text/javascript"></script>
<link <link
@ -138,6 +138,7 @@
application to display correctly.</div> application to display correctly.</div>
</noscript> </noscript>
<div id="app-notifier" class="app-notifier"></div> <div id="app-notifier" class="app-notifier"></div>
<div id="layer-viewer" class="layer-panel"></div>
<div id="geoportal-data-viewer"></div> <div id="geoportal-data-viewer"></div>
<div class="timeline-container"> <div class="timeline-container">
<div id="timeline-data"></div> <div id="timeline-data"></div>

View File

@ -15,11 +15,11 @@
src='<%=request.getContextPath()%>/GeoportalDataViewer/js/bootstrap.min.js'></script> src='<%=request.getContextPath()%>/GeoportalDataViewer/js/bootstrap.min.js'></script>
<link <link
href="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.4.3/css/ol.css" href="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.6.1/css/ol.css"
rel="stylesheet" type="text/css"> rel="stylesheet" type="text/css">
<script <script
src="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.4.3/build/ol.js" src="//cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v6.6.1/build/ol.js"
type="text/javascript"></script> type="text/javascript"></script>
<link <link
@ -111,6 +111,7 @@
</script> </script>
<div id="app-notifier" class="app-notifier"></div> <div id="app-notifier" class="app-notifier"></div>
<div id="layer-viewer" class="layer-panel"></div>
<div id="geoportal-data-viewer"></div> <div id="geoportal-data-viewer"></div>
<div class="timeline-container"> <div class="timeline-container">
<div id="timeline-data"></div> <div id="timeline-data"></div>