diff --git a/pom.xml b/pom.xml index 66c741a..33e97a8 100644 --- a/pom.xml +++ b/pom.xml @@ -48,29 +48,29 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -96,20 +96,6 @@ com.github.tdesjardins gwt-ol3 8.0.0-gwt2_9 - - - - - - - - - - - - - - com.github.gwtbootstrap @@ -118,6 +104,12 @@ compile + + org.gcube.spatial.data + geo-utility + [1.0.0,2.0.0-SNAPSHOT) + + org.gcube.common.portal portal-manager 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 d59721e..fe7ccbb 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,7 +1,8 @@ package org.gcube.portlets.user.geoportaldataviewer.client; -import org.gcube.portlets.user.geoportaldataviewer.client.gis.OsmExample; +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.URLUtil; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; @@ -10,74 +11,104 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.RootPanel; +// TODO: Auto-generated Javadoc /** * Entry point classes define onModuleLoad(). + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 */ public class GeoportalDataViewer implements EntryPoint { - /** - * The message displayed to the user when the server cannot be reached or - * returns an error. - */ - private static final String SERVER_ERROR = "An error occurred while " - + "attempting to contact the server. Please check your network " - + "connection and try again."; + /** + * The message displayed to the user when the server cannot be reached or + * returns an error. + */ + private static final String SERVER_ERROR = "An error occurred while " + + "attempting to contact the server. Please check your network " + "connection and try again."; - /** - * Create a remote service proxy to talk to the server-side Greeting service. - */ - private final GeoportalDataViewerServiceAsync greetingService = GWT.create(GeoportalDataViewerService.class); - - public final static String APP_DIV = "geoportal-data-viewer"; + /** The Constant APP_DIV. */ + public final static String APP_DIV = "geoportal-data-viewer"; - private boolean initialized = false; - - private OsmExample osmExample = null; - - private GeonaDataViewMainPanel mainPanel; - /** - * This is the entry point method. - */ - public void onModuleLoad() { - - mainPanel = new GeonaDataViewMainPanel(); + /** The ol map. */ + private OpenLayerOSM olMap = null; + + /** The main panel. */ + private GeonaDataViewMainPanel mainPanel; + + /** The param wms request. */ + private String paramWmsRequest; - RootPanel.get(APP_DIV).add(mainPanel); + /** The param UUID. */ + private String paramUUID; - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - - @Override - public void execute() { - osmExample = new OsmExample(mainPanel.getMapPanel().getElement().getId()); - mainPanel.setMap(osmExample); - - } - }); + /** The param layer title. */ + private String paramLayerTitle; - Window.addResizeHandler(new ResizeHandler() { - @Override - public void onResize(ResizeEvent event) { - GWT.log("onWindowResized width: "+event.getWidth()+" height: "+event.getHeight()); - mainPanel.setMapHeight(event.getHeight()-200); + /** The layer manager. */ + private LayerManager layerManager; + + /** + * This is the entry point method. + */ + public void onModuleLoad() { + + mainPanel = new GeonaDataViewMainPanel(); + + RootPanel.get(APP_DIV).add(mainPanel); + + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + olMap = new OpenLayerOSM(mainPanel.getMapPanel().getElement().getId()); + layerManager = new LayerManager(olMap); + mainPanel.setMap(olMap); + + } + }); + + Window.addResizeHandler(new ResizeHandler() { + @Override + public void onResize(ResizeEvent event) { + GWT.log("onWindowResized width: " + event.getWidth() + " height: " + event.getHeight()); + mainPanel.setMapHeight(event.getHeight() - 200); + } + }); + + paramWmsRequest = Window.Location.getParameter(GeoportalDataViewerConstants.GET_WMS_PARAMETER); + paramUUID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_UUID_PARAMETER); + paramLayerTitle = Window.Location.getParameter(GeoportalDataViewerConstants.GET_LAYER_TITLE); + GWT.log(GeoportalDataViewerConstants.GET_WMS_PARAMETER + " = " + paramWmsRequest); + GWT.log(GeoportalDataViewerConstants.GET_UUID_PARAMETER + " = " + paramUUID); + GWT.log(GeoportalDataViewerConstants.GET_LAYER_TITLE + " = " + paramLayerTitle); + + if (paramWmsRequest != null && !paramWmsRequest.isEmpty()) { + + try { + //wmsRequestConverter.addRequestToGisViewer(paramWmsRequest, paramLayerTitle, paramUUID); + //FIND BASE URL + int indexStart = paramWmsRequest.indexOf("?"); + String url; + if(indexStart>=0){ + url = paramWmsRequest.substring(0, indexStart); //get only base uri + url = url.trim(); //string trim + }else{ + Window.alert("Bad wms request '?' not found!"); +// throw new Exception("Bad server request '?' not found!"); + } + + String layerName = URLUtil.getValueOfParameter("layers", paramWmsRequest); + String displayName = paramLayerTitle==null || paramLayerTitle.isEmpty()?layerName:paramLayerTitle; + layerManager.addLayerByWmsRequest(displayName, layerName, paramWmsRequest, false, false, paramUUID, true); + } catch (Exception e) { + GWT.log("An error occurred on adding wmsrequest :" + paramWmsRequest); + e.printStackTrace(); + } } - }); - - greetingService.greetServer("SERVICE IMPL", new AsyncCallback() { - - @Override - public void onSuccess(String result) { - - } - - @Override - public void onFailure(Throwable caught) { - - - } - }); - } - + + } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java index 53d2b24..b98b221 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/GeoportalDataViewerConstants.java @@ -1,10 +1,21 @@ package org.gcube.portlets.user.geoportaldataviewer.client; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayersMapParameters; + public class GeoportalDataViewerConstants { public static final String EPSG_4326 = "EPSG:4326"; public static final String EPSG_3857 = "EPSG:3857"; public static final String MAP_DIV = "map"; + + public static final String GET_WMS_PARAMETER = "wmsrequest"; + public static final String GET_UUID_PARAMETER = "uuid"; + public static final String GET_LAYER_TITLE = "layertitle"; + public static final String GET_MAX_ZOOM_LEVEL = OpenLayersMapParameters.OL_MAP_PARAM.maxzoomlevel.name(); + public static final String GET_ZOOM = OpenLayersMapParameters.OL_MAP_PARAM.zoom.name(); + public static final String GET_CENTER_MAP_TO_LONG_LAT = OpenLayersMapParameters.OL_MAP_PARAM.centermap.name(); + + public enum LayerType {RASTER_BASELAYER, FEATURE_TYPE}; } 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 0c61c37..371c925 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 @@ -1,5 +1,7 @@ package org.gcube.portlets.user.geoportaldataviewer.client; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoInformationForWMSRequest; + import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -8,5 +10,7 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; */ @RemoteServiceRelativePath("geoportaldataviewerservice") public interface GeoportalDataViewerService extends RemoteService { - String greetServer(String name) throws IllegalArgumentException; + + GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception; + } 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 ba70d93..6bbc283 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 @@ -1,17 +1,13 @@ package org.gcube.portlets.user.geoportaldataviewer.client; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoInformationForWMSRequest; + import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; public interface GeoportalDataViewerServiceAsync { - /** - * GWT-RPC service asynchronous (client-side) interface - * @see org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService - */ - void greetServer( java.lang.String name, AsyncCallback callback ); - /** * Utility class to get the RPC Async interface from client-side code @@ -34,4 +30,6 @@ public interface GeoportalDataViewerServiceAsync // Utility class should not be instantiated } } + + void parseWmsRequest(String wmsRequest, String layerName, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java new file mode 100644 index 0000000..b828c54 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java @@ -0,0 +1,185 @@ +package org.gcube.portlets.user.geoportaldataviewer.client; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.LayerType; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM; +import org.gcube.portlets.user.geoportaldataviewer.client.util.URLUtil; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoInformationForWMSRequest; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.ZAxis; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * The Class LayerManager. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class LayerManager { + + /** The ol map. */ + private OpenLayerOSM olMap; + + /** The layer items. */ + private List layerItems = new ArrayList(); + + /** + * Instantiates a new layer manager. + * + * @param olMap the ol map + */ + public LayerManager(OpenLayerOSM olMap) { + this.olMap = olMap; + } + + + /** + * Adds the layer by wms. + * + * @param layerTitle the layer title + * @param layerName the layer name + * @param wmsRequest the wms request + * @param isBase the is base + * @param UUID the uuid + */ + public void addLayerByWms(String layerTitle, String layerName, String wmsRequest, boolean isBase, String UUID) { + + boolean displayInLayerSwitcher = false; + if(isBase) + displayInLayerSwitcher = true; + + addLayerByWmsRequest(layerTitle, layerName, wmsRequest, isBase, displayInLayerSwitcher, UUID, true); + } + + /** + * Adds the layer by wms request. + * + * @param layerTitle the layer title + * @param layerName the layer name + * @param wmsRequest the wms request + * @param isBase the is base + * @param displayInLayerSwitcher the display in layer switcher + * @param UUID the uuid + * @param onTop the on top + */ + public void addLayerByWmsRequest(final String layerTitle, final String layerName, final String wmsRequest, final boolean isBase,final boolean displayInLayerSwitcher, final String UUID, final boolean onTop) { + +// final LayoutContainer westPanel = (LayoutContainer) layersPanel.getParent(); +// +// if(layersPanel.getLayerItems().size()==0) +// westPanel.mask("Adding..."+layerName, "x-mask-loading"); +// else +// layersPanel.mask("Adding..."+layerName, "x-mask-loading"); + + final LayerType featureType = isBase?LayerType.RASTER_BASELAYER:LayerType.FEATURE_TYPE; +// Info.display("Adding Layer", layerName); + GeoportalDataViewerServiceAsync.Util.getInstance().parseWmsRequest(wmsRequest, layerName, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + + Window.alert(caught.getMessage()); + } + + @Override + public void onSuccess(GeoInformationForWMSRequest result) { + + GWT.log("Add Layer By WMS: "+result.getMapWMSNoStandard() + ", and isNCWMS? "+result.isNcWMS()); + addLayerByWms(featureType, layerTitle, layerName, result.getWmsRequest(), result.getBaseWmsServiceHost(), true, isBase, displayInLayerSwitcher, (ArrayList) result.getStyles().getGeoStyles(), result.getWmsRequest(), false, result.getMapWMSNoStandard(), result.isNcWMS(), UUID, result.getZAxis()); + + } + }); + } + + + /** + * Adds the layer by wms. + * + * @param layerType the layer type + * @param layerTitle the layer title + * @param layerName the layer name + * @param layerURL the layer URL + * @param mapServerHost the map server host + * @param isExternal the is external + * @param isBase the is base + * @param displayInLayerSwitcher the display in layer switcher + * @param styles the styles + * @param serverWmsRequest the server wms request + * @param onTop the on top + * @param wmsNotStandardParams the wms not standard params + * @param isNcWms the is nc wms + * @param UUID the uuid + * @param zAxis the z axis + */ + private void addLayerByWms(LayerType layerType, String layerTitle, String layerName, String layerURL, String mapServerHost, boolean isExternal, boolean isBase, boolean displayInLayerSwitcher, ArrayList styles, String serverWmsRequest, boolean onTop, HashMap wmsNotStandardParams, boolean isNcWms, String UUID, ZAxis zAxis) { + +// GWT.log("Add addLayerByWms 1"); + LayerItem l = new LayerItem(); + l.setBaseLayer(isBase); + l.setTitle(layerTitle); + l.setName(layerName); + l.setUrl(layerURL); + l.setMapServerHost(mapServerHost); + //l.setExternal(isExternal); + l.setOpacity(1d); + l.setBuffer(2); + l.setServerWmsRequest(serverWmsRequest); + l.setWmsNotStandardParams(wmsNotStandardParams); + l.setNcWms(isNcWms); + l.setUUID(UUID); + l.setZAxis(zAxis); + + switch (layerType) { + + //TODO IMPLEMENT THIS CASE + case RASTER_BASELAYER: + +// l.setHasLegend(false); + l.setBaseLayer(true); + l.setTrasparent(false); + l.setClickData(false); + break; + + case FEATURE_TYPE: + + //CASE FEATURE TYPE + l.setBaseLayer(false); + l.setClickData(true); + l.setTrasparent(true); + break; + + } + + GWT.log("styles "+styles); + + if(styles!=null && styles.size()>0){ + l.setHasLegend(true); + l.setDefaultStyle(styles.get(0)); + l.setStyle(styles.get(0)); + l.setStyles(styles); + }else{ + String style = URLUtil.getValueOfParameter("styles", serverWmsRequest); + if(style!=null){ //CASE OF STYLE =""; + //TENTATIVE TO GET LEGEND + l.setHasLegend(true); + } + } + GWT.log("Built layer: "+l); + layerItems.add(l); + olMap.addWMSLayer(l.getMapServerHost(), layerName); + +// openLayersMap.addLayerItemByWms(l, displayInLayerSwitcher); +// layersPanel.addLayerItems(layerItems, onTop); +// layersPanel.updateLayersOrder(); + } + + + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OsmExample.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java similarity index 89% rename from src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OsmExample.java rename to src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java index 46f6662..6c02fb4 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OsmExample.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java @@ -1,11 +1,12 @@ package org.gcube.portlets.user.geoportaldataviewer.client.gis; +import java.net.MalformedURLException; + import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.Window; import ol.Collection; import ol.Coordinate; @@ -38,26 +39,44 @@ import ol.source.Osm; import ol.source.Vector; import ol.source.XyzOptions; + +// TODO: Auto-generated Javadoc /** - * Example with OSM layer and tile debug layer. - * - * @author Tino Desjardins + * The Class OpenLayerOSM. * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 */ -public class OsmExample { +public class OpenLayerOSM { + /** The map. */ private Map map; + + /** The view. */ private View view; + + /** The view options. */ private ViewOptions viewOptions = OLFactory.createOptions(); + + /** The projection options. */ private ProjectionOptions projectionOptions = OLFactory.createOptions(); + /** The point draw. */ private Draw pointDraw; + + /** The popup overlay. */ private Overlay popupOverlay; + /** + * Instantiates a new open layer OSM. + * + * @param divTargetId the div target id + */ /* (non-Javadoc) * @see de.desjardins.ol3.demo.client.example.Example#show() */ - public OsmExample(String divTargetId) { + public OpenLayerOSM(String divTargetId) { // create a OSM-layer XyzOptions osmSourceOptions = OLFactory.createOptions(); @@ -67,22 +86,7 @@ public class OsmExample { osmLayerOptions.setSource(osmSource); Tile osmLayer = new Tile(osmLayerOptions); - - // create debug layer -// TileDebugOptions tileDebugOptions = OLFactory.createOptions(); -// tileDebugOptions.setProjection(GeoportalDataViewerConstants.EPSG_4326); -// tileDebugOptions.setTileGrid(osmSource.getTileGrid()); - - //TileDebug tileDebugSource = new TileDebug(tileDebugOptions); - - LayerOptions tileDebugLayerOptions = OLFactory.createOptions(); - - //tileDebugLayerOptions.setSource(tileDebugSource); - - //Tile tileDebugLayer = new Tile(tileDebugLayerOptions); - // create a projection - projectionOptions.setCode(GeoportalDataViewerConstants.EPSG_3857); projectionOptions.setUnits("m"); @@ -101,7 +105,6 @@ public class OsmExample { view.setCenter(transformedCenterCoordinate); view.setZoom(5); - // create the map MapOptions mapOptions = OLFactory.createOptions(); mapOptions.setTarget(divTargetId); @@ -142,9 +145,13 @@ public class OsmExample { map.addInteraction(new KeyboardPan()); map.addInteraction(new KeyboardZoom()); - addWMSLayer(); } + /** + * Adds the popup closer handelr. + * + * @param popupOverlay the popup overlay + */ private void addPopupCloserHandelr(Overlay popupOverlay) { Element elPopupCloser = DOM.getElementById("popup-closer"); Event.sinkEvents(elPopupCloser, Event.ONCLICK); @@ -160,6 +167,12 @@ public class OsmExample { }); } + /** + * Handler popu closer. + * + * @param divId the div id + * @param overlayId the overlay id + */ public static native void handlerPopuCloser(String divId, String overlayId) /*-{ var closer = $doc.getElementById(divId); var overlay = $doc.getElementById(overlayId); @@ -171,13 +184,17 @@ public class OsmExample { }-*/; - public void addWMSLayer() { + /** + * Adds the WMS layer. + * @throws MalformedURLException + */ + public void addWMSLayer(String mapServerHost, String layerName) { ImageWmsParams imageWMSParams = OLFactory.createOptions(); - imageWMSParams.setLayers("concessioni_conf:centroids_concessioni"); + imageWMSParams.setLayers(layerName); ImageWmsOptions imageWMSOptions = OLFactory.createOptions(); - imageWMSOptions.setUrl("https://geona-proto.d4science.org/geoserver/concessioni_conf/wms"); + imageWMSOptions.setUrl(mapServerHost); imageWMSOptions.setParams(imageWMSParams); //imageWMSOptions.setRatio(1.5f); @@ -194,6 +211,11 @@ public class OsmExample { } + /** + * Adds the point vector source. + * + * @return the draw + */ public Draw addPointVectorSource() { if(pointDraw==null) initPointInteraction(); @@ -202,6 +224,9 @@ public class OsmExample { return pointDraw; } + /** + * Inits the point interaction. + */ private void initPointInteraction() { Vector vectorSource = new Vector(); DrawOptions drawOptions = new DrawOptions(); @@ -213,10 +238,18 @@ public class OsmExample { pointDraw = new Draw(drawOptions); } + /** + * Removes the interaction. + * + * @param interaction the interaction + */ public void removeInteraction(Interaction interaction) { map.removeInteraction(interaction); } + /** + * Removes the interactions. + */ public void removeInteractions() { Collection interactions = map.getInteractions(); if(interactions!=null) { @@ -228,6 +261,11 @@ public class OsmExample { } } + /** + * Adds the extent interaction. + * + * @return the extent + */ public Extent addExtentInteraction() { ExtentOptions extentOptions = new ExtentOptions(); extentOptions.setWrapX(false); @@ -241,6 +279,12 @@ public class OsmExample { } + /** + * Adds the overlay. + * + * @param element the element + * @return the overlay + */ private Overlay addOverlay(Element element) { /** * Create an overlay to anchor the popup to the map. diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayersMapParameters.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayersMapParameters.java new file mode 100644 index 0000000..7e48ad6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayersMapParameters.java @@ -0,0 +1,56 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.gis; + +import java.util.HashMap; +import java.util.Map; + +/** + * The Class OpenLayersMapParameters. + * + * @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy) + * May 7, 2020 + */ +public class OpenLayersMapParameters { + + + private Map mapToInitOLMap = new HashMap(); + + public enum OL_MAP_PARAM {maxzoomlevel,zoom,centermap} + + /** + * Instantiates a new gis viewer map parameters. + */ + public OpenLayersMapParameters() { + } + + /** + * Adds the parameter. + * + * @param key the key + * @param value the value + */ + public void addParameter(String key, String value) { + mapToInitOLMap.put(key, value); + } + + + /** + * Adds the parameter. + * + * @param key the key + * @param value the value + */ + public void addParameter(OL_MAP_PARAM key, String value) { + if(key!=null) + mapToInitOLMap.put(key.name(), value); + } + + /** + * Gets the pameter. + * + * @param key the key + * @return the pameter + */ + public String getPameter(String key) { + return mapToInitOLMap.get(key); + } +} 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 6a3ef2b..9ecc0ff 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,6 +1,6 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui; -import org.gcube.portlets.user.geoportaldataviewer.client.gis.OsmExample; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Tab; @@ -30,7 +30,7 @@ public class GeonaDataViewMainPanel extends Composite { private MapPanel mapPanel; - private OsmExample map; + private OpenLayerOSM map; public GeonaDataViewMainPanel() { initWidget(uiBinder.createAndBindUi(this)); @@ -51,7 +51,7 @@ public class GeonaDataViewMainPanel extends Composite { return mapPanel; } - public void setMap(OsmExample map) { + public void setMap(OpenLayerOSM map) { this.map = map; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/URLUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/URLUtil.java new file mode 100644 index 0000000..2c398f0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/URLUtil.java @@ -0,0 +1,31 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.util; + +public class URLUtil { + + /** + * Gets the value of parameter. + * + * @param paramName the param name + * @param url the url + * @return the value of parameter + */ + public static String getValueOfParameter(String paramName, String url) { +// logger.trace("finding: "+wmsParam +" into "+url); + int index = url.toLowerCase().indexOf(paramName.toLowerCase()+"="); //ADDING CHAR "=" IN TAIL TO BE SECURE IT IS A PARAMETER +// logger.trace("start index of "+wmsParam+ " is: "+index); + String value = ""; + if(index > -1){ + + int start = index + paramName.length()+1; //add +1 for char '=' + String sub = url.substring(start, url.length()); + int indexOfSeparator = sub.indexOf("&"); + int end = indexOfSeparator!=-1?indexOfSeparator:sub.length(); + value = sub.substring(0, end); + }else + return null; + +// logger.trace("return value: "+value); + return value; + } + +} 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 ff1a6db..a262665 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 @@ -1,7 +1,19 @@ package org.gcube.portlets.user.geoportaldataviewer.server; +import java.util.HashMap; +import java.util.Map; + import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService; -import org.gcube.portlets.user.geoportaldataviewer.shared.FieldVerifier; +import org.gcube.portlets.user.geoportaldataviewer.server.gis.WMSUrlValidator; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoInformationForWMSRequest; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.Styles; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.ZAxis; +import org.gcube.spatial.data.geoutility.GeoNcWMSMetadataUtility; +import org.gcube.spatial.data.geoutility.bean.LayerStyles; +import org.gcube.spatial.data.geoutility.bean.LayerZAxis; +import org.gcube.spatial.data.geoutility.bean.WmsParameters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; @@ -11,26 +23,9 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; @SuppressWarnings("serial") public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet implements GeoportalDataViewerService { - - public String greetServer(String input) throws IllegalArgumentException { - // Verify that the input is valid. - if (!FieldVerifier.isValidName(input)) { - // If the input is not valid, throw an IllegalArgumentException back to - // the client. - throw new IllegalArgumentException( - "Name must be at least 4 characters long"); - } - - String serverInfo = getServletContext().getServerInfo(); - String userAgent = getThreadLocalRequest().getHeader("User-Agent"); - - // Escape data from the client to avoid cross-site script vulnerabilities. - input = escapeHtml(input); - userAgent = escapeHtml(userAgent); - - return "Hello, " + input + "!

I am running " + serverInfo - + ".

It looks like you are using:
" + userAgent; - } + + /** The Constant LOG. */ + private static final Logger LOG = LoggerFactory.getLogger(GeoportalDataViewerServiceImpl.class); /** * Escape an html string. Escaping data received from the client helps to @@ -46,4 +41,52 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme return html.replaceAll("&", "&").replaceAll("<", "<").replaceAll( ">", ">"); } + + @Override + public GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception{ + return loadGeoInfoForWmsRequest(wmsRequest, layerName); + } + + /* Load geo info for wms request. + * + * @param wmsRequest the wms request + * @param layerName the layer name + * @return the gis viewer wms valid parameters + * @throws Exception the exception + */ + public static GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsRequest, String layerName) throws Exception{ + try { + WMSUrlValidator validator = new WMSUrlValidator(wmsRequest, layerName); + String wmsServiceHost = validator.getWmsServiceHost(); + String validWMSRequest = validator.parseWMSRequest(true, true); + layerName = validator.getLayerName(); + String versionWms = validator.getValueOfParsedWMSParameter(WmsParameters.VERSION); + String crs = validator.getValueOfParsedWMSParameter(WmsParameters.CRS); + // + HashMap mapWmsNotStandard = new HashMap(); + + if(validator.getMapWmsNoStandardParams()!=null){ + mapWmsNotStandard.putAll(validator.getMapWmsNoStandardParams()); + } + // + GeoNcWMSMetadataUtility geoGS = new GeoNcWMSMetadataUtility(validWMSRequest, 4000); + //STYLES + LayerStyles layerStyle = geoGS.loadStyles(); + Map mapNcWmsStyles = layerStyle.getMapNcWmsStyles()==null?new HashMap(1):layerStyle.getMapNcWmsStyles(); + mapWmsNotStandard.putAll(mapNcWmsStyles); + //MAP STYLES INTO GWT-SERIALIZABLE OBJECT + Styles styles = new Styles(layerStyle.getGeoStyles(), layerStyle.getMapNcWmsStyles(), layerStyle.isNcWms()); + //ZAxis + LayerZAxis layerZAxis = geoGS.loadZAxis(); + //MAP ZAXIS INTO GWT-SERIALIZABLE OBJECT + ZAxis zAxis = layerZAxis!=null?new ZAxis(layerZAxis.getUnits(), layerZAxis.isPositive(), layerZAxis.getValues()):null; + + return new GeoInformationForWMSRequest(wmsServiceHost, validWMSRequest, layerName, versionWms, crs, mapWmsNotStandard, styles, styles.isNcWms(), zAxis); + } + catch (Exception e) { + String msg = "An error occurred during wms request validation for layer: "+layerName; + LOG.error(msg,e); + throw new Exception(msg); + } + } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WMSUrlValidator.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WMSUrlValidator.java new file mode 100644 index 0000000..4eb3ac2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WMSUrlValidator.java @@ -0,0 +1,402 @@ +package org.gcube.portlets.user.geoportaldataviewer.server.gis; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.spatial.data.geoutility.GeoWmsServiceUtility; +import org.gcube.spatial.data.geoutility.bean.WmsParameters; +import org.gcube.spatial.data.geoutility.util.HttpRequestUtil; +import org.gcube.spatial.data.geoutility.wms.WmsUrlValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * The Class GisViewerWMSUrlValidator. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jan 28, 2016 + */ +public class WMSUrlValidator { + + public static final String GEOSERVER = "/geoserver"; + private static final String WMS = "wms"; + private static final String OWS = "ows"; + private HashMap parametersValue = new HashMap(); + private String wmsRequestURI; + private String wmsServiceHost; + private String layerName; + + private String wmsNoStandardParameters = ""; + private Map mapWmsNoStandardParams; + private WmsUrlValidator urlValidator; + + private static final Logger LOG = LoggerFactory.getLogger(WMSUrlValidator.class); + + + /** + * Instantiates a new gis viewer wms url validator. + * + * @param wmsRequest the full url + * @param layerName the layer name + * @throws Exception the exception + */ + public WMSUrlValidator(String wmsRequest, String layerName) throws Exception{ + + if(wmsRequest==null || wmsRequest.isEmpty()) + throw new Exception("WMS request is null or empty"); + + 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: "+layerName); + + //VALIDATION WMS + String baseWmsService = webMapServerHost.getHost(); + //IS OWS OR WMS? + this.wmsServiceHost = appendWmsServiceToBaseUrl(wmsRequest.substring(0, wmsRequest.indexOf("?")),isOwsService); + this.layerName = layerName; + + try { + //VALIDATE WMS SERVICE FOR WEB MAP SERVER + if(!HttpRequestUtil.urlExists(this.wmsServiceHost, true)){ + LOG.info("baseWmsServiceUrl: "+wmsServiceHost +" is not a geoserver, setting as input base wms server: "+baseWmsService); + this.wmsServiceHost = baseWmsService; + } + + } catch (Exception e) { + LOG.error("error on validating geoserver wms service: "+e); + LOG.info("setting baseWmsService as input base wms server: "+baseWmsService); + this.wmsServiceHost = baseWmsService; + } + + //VALIDATION FOR THREDDS - FIND LAYER NAME INTO WMS PATH + if(this.layerName==null || this.layerName.isEmpty()){ + + this.layerName = WmsUrlValidator.getValueOfParameter(WmsParameters.LAYERS, wmsRequest); + if(this.layerName==null || layerName.isEmpty()) + throw new Exception("Layer name is null or empty"); + + } + + parametersValue.put(WmsParameters.LAYERS.getParameter(), this.layerName); + } + + + /** + * Append wms service to base url. + * + * @param url the url + * @param isOwsServer the is ows server + * @return the string + */ + public String appendWmsServiceToBaseUrl(String url, boolean isOwsServer){ + + if(url.contains("/"+WMS) || url.contains("/"+OWS)) + return url; + + if(url.lastIndexOf("/") != url.length()){ + url+="/"; + } + + if(isOwsServer) + return url+=OWS; + else + return url+=WMS; + } + + /** + * Method: getFullWmsUrlRequest + * Create a correct wms url request + * Returns: + * {String}. + * + * @param returnEmptyParameter if true the wms url returned contains also wms parameter with empty value, none otherwise. + * and mandatory wms parameters that does not found are filled with empty values + * @param fillEmptyParameterAsDefault the fill empty parameter as default + * @return a correct wms url request in formatted string like this: + * "wmsserver?key1=value1&key2=value2&key3=value3" + */ + public String parseWMSRequest(boolean returnEmptyParameter, boolean fillEmptyParameterAsDefault){ + + urlValidator = new org.gcube.spatial.data.geoutility.wms.WmsUrlValidator(wmsRequestURI); + String fullWmsUrlBuilded; + + try { + fullWmsUrlBuilded = urlValidator.parseWmsRequest(returnEmptyParameter, fillEmptyParameterAsDefault); + parametersValue.putAll(urlValidator.getMapWmsParameters()); + + String ln = parametersValue.get(WmsParameters.LAYERS.name()); + LOG.debug("Comparing layer name from Wms request: "+ln +", with OnLineResource layerName: "+this.layerName); + if(ln==null || ln.isEmpty() || ln.compareTo(this.layerName)!=0){ + LOG.info("Layer name into wms request is different to OnLineResource layers name, replacing layer name: "+this.layerName); + parametersValue.put(WmsParameters.LAYERS.getParameter(), this.layerName); + urlValidator.getMapWmsParameters().put(org.gcube.spatial.data.geoutility.bean.WmsParameters.LAYERS.getParameter(), this.layerName); + fullWmsUrlBuilded = org.gcube.spatial.data.geoutility.wms.WmsUrlValidator.setValueOfParameter(org.gcube.spatial.data.geoutility.bean.WmsParameters.LAYERS, fullWmsUrlBuilded, this.layerName, true); + } + +// logger.trace("parametersValue: "+parametersValue); + mapWmsNoStandardParams = new HashMap(urlValidator.getMapWmsNoStandardParams().size()); + mapWmsNoStandardParams.putAll(urlValidator.getMapWmsNoStandardParams()); + wmsNoStandardParameters = urlValidator.getWmsNoStandardParameters(); + } + catch (Exception e) { + LOG.error("An error occurred during wms uri build, returning uri: "+wmsRequestURI, e); + fullWmsUrlBuilded = wmsRequestURI; + } + + LOG.trace("GisViewerWMSUrlValidator parseWMSRequest returning full wms url: "+fullWmsUrlBuilded); + return fullWmsUrlBuilded; + } + + + + /** + * Gets the web map server host. + * + * @param wmsRequest the wms request + * @return the web map server host, (geoserver URI or the wmsRequest substring from start to index of '?' char (if exists)) + */ + public WebMapServerHost getWebMapServerHost(String wmsRequest){ + + WebMapServerHost webMapServerHost = new WebMapServerHost(); + + if(wmsRequest==null) + return webMapServerHost; //uri is empty + + + int end = wmsRequest.toLowerCase().lastIndexOf("?"); + + if(end==-1){ + LOG.trace("char ? not found in geoserver uri, return: "+wmsRequest); + return webMapServerHost; //uri is empty + } + + String webMapServerBaseURL = wmsRequest.substring(0, wmsRequest.toLowerCase().lastIndexOf("?")); + int index = webMapServerBaseURL.lastIndexOf(GEOSERVER); + + if(index>-1){ //FOUND the string GEOSERVER into URL + LOG.trace("found geoserver string: "+GEOSERVER+" in "+webMapServerBaseURL); + + //THERE IS SCOPE? + int lastSlash = webMapServerBaseURL.lastIndexOf("/"); + int includeGeoserverString = index+GEOSERVER.length(); + int endUrl = lastSlash>includeGeoserverString?lastSlash:includeGeoserverString; + LOG.trace("indexs - lastSlash: ["+lastSlash+"], includeGeoserverString: ["+includeGeoserverString+"], endUrl: ["+endUrl+"]"); + int startScope = includeGeoserverString+1 getStylesAsList() { + + List listStyles = new ArrayList(); + String styles = getValueOfParsedWMSParameter(WmsParameters.STYLES); + + if(styles!=null && !styles.isEmpty()){ + + String[] arrayStyle = styles.split(","); + for (String style : arrayStyle) { + if(style!=null && !style.isEmpty()) + listStyles.add(style); + } + } + return listStyles; + } + + + /** + * Gets the map wms no standard params. + * + * @return the map wms no standard params + */ + public Map getMapWmsNoStandardParams() { + return mapWmsNoStandardParams; + } + + /** + * The main method. + * + * @param args the arguments + */ + public static void main(String[] args) { + +// String baseGeoserverUrl = "http://repoigg.services.iit.cnr.it:8080/geoserver/IGG/ows"; +// String baseGeoserverUrl = "http://www.fao.org/figis/geoserver/species"; +// String fullPath = "http://www.fao.org/figis/geoserver/species?SERVICE=WMS&BBOX=-176.0,-90.0,180.0,90&styles=Species_prob, puppa&layers=layerName&FORMAT=image/gif"; +// String fullPath = "http://repoigg.services.iit.cnr.it:8080/geoserver/IGG/ows?service=wms&version=1.1.0&request=GetMap&layers==IGG:area_temp_1000&width=676&height=330&srs=EPSG:4326&crs=EPSG:4326&format=application/openlayers&bbox=-85.5,-180.0,90.0,180.0"; +// String baseGeoserverUrl = "http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc"; +// String fullPath = "http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc?service=wms&version=1.3.0&request=GetMap&layers=analyzed_field&bbox=-85.0,-180.0,85.0,180.0&styles=&width=640&height=480&srs=EPSG:4326&CRS=EPSG:4326&format=image/png&COLORSCALERANGE=auto"; +// WmsUrlValidator validator = new WmsUrlValidator(baseGeoserverUrl, fullPath , "", false); +// logger.trace("base wms service url: "+validator.getBaseWmsServiceUrl()); +// logger.trace("layer name: "+validator.getLayerName()); +// logger.trace("full wms url: "+validator.getFullWmsUrlRequest(false, true)); +// logger.trace("style: "+validator.getStyles()); +// logger.trace("not standard parameter: "+validator.getWmsNotStandardParameters()); +// String[] arrayStyle = validator.getStyles().split(","); +// +// if(arrayStyle!=null && arrayStyle.length>0){ +// +// for (String style : arrayStyle) { +// if(style!=null && !style.isEmpty()) +// +// System.out.println("Style: "+style.trim()); +// } +// } +// +// String fullPath = "http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc?service=wms&version=1.3.0&request=GetMap&layers=analyzed_field&bbox=-85.0,-180.0,85.0,180.0&styles=&width=640&height=480&srs=EPSG:4326&CRS=EPSG:4326&format=image/png&COLORSCALERANGE=auto"; +// +// WmsGeoExplorerUrlValidator validator = new WmsGeoExplorerUrlValidator("http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc", fullPath , "", false); +// validator.getFullWmsUrlRequest(false,true); +// +// System.out.println(validator.getWmsNoStandardParameters()); +// System.out.println(validator.getMapWmsNoStandardParams()); + +// fullPath = WmsUrlValidator.setValueOfParameter(WmsParameters.STYLES, fullPath, "123", true); +// + +// MapPreviewGenerator map = new MapPreviewGenerator(); +// fullPath = map.buildWmsRequestMapPreview(fullPath, "-85.0,-180.0,85.0,180.0"); +// System.out.println(fullPath); + + String wmsRequest = "http://geoserver-dev.d4science-ii.research-infrastructures.eu/geoserver/wms?CRS=EPSG:4326&BBOX=-85.5,-180.0,90.0,180.0&VERSION=1.1.0&FORMAT=application/openlayers&SERVICE=wms&HEIGHT=330&LAYERS=aquamaps:lsoleasolea20130716162322254cest&REQUEST=GetMap&STYLES=Species_prob&SRS=EPSG:4326&WIDTH=676"; +// String wmsRequest = "http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc?service=wms&version=1.3.0&request=GetMap&layers=analyzed_field&styles=&width=640&height=480&srs=EPSG:4326&CRS=EPSG:4326&format=image/png&COLORSCALERANGE=auto&bbox=-85.0,-180.0,85.0,180.0"; + WmsUrlValidator wms; + try { + wms = new WmsUrlValidator(wmsRequest); + System.out.println("Returned wms: "+wms.toString()); + } + catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WebMapServerHost.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WebMapServerHost.java new file mode 100644 index 0000000..cdf8108 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/WebMapServerHost.java @@ -0,0 +1,85 @@ +/** + * + */ +package org.gcube.portlets.user.geoportaldataviewer.server.gis; + + +/** + * The Class GeoserverBaseUri. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jan 28, 2016 + */ +public class WebMapServerHost { + + private String host = ""; + private String scope = ""; + + /** + * Instantiates a new geoserver base uri. + */ + public WebMapServerHost() { + } + + /** + * Instantiates a new geoserver base uri. + * + * @param host the base url + * @param scope the scope + */ + public WebMapServerHost(String host, String scope) { + this.host = host; + this.scope = scope; + } + + + /** + * @return the host + */ + public String getHost() { + + return host; + } + + + /** + * @return the scope + */ + public String getScope() { + + return scope; + } + + + /** + * @param host the host to set + */ + public void setHost(String host) { + + this.host = host; + } + + + /** + * @param scope the scope to set + */ + public void setScope(String scope) { + + this.scope = scope; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("WebMapServerHost [host="); + builder.append(host); + builder.append(", scope="); + builder.append(scope); + builder.append("]"); + return builder.toString(); + } +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/FieldVerifier.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/FieldVerifier.java deleted file mode 100644 index a3d90bd..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/FieldVerifier.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.gcube.portlets.user.geoportaldataviewer.shared; - -/** - *

- * FieldVerifier validates that the name the user enters is valid. - *

- *

- * This class is in the shared packing because we use it in both - * the client code and on the server. On the client, we verify that the name is - * valid before sending an RPC request so the user doesn't have to wait for a - * network round trip to get feedback. On the server, we verify that the name is - * correct to ensure that the input is correct regardless of where the RPC - * originates. - *

- *

- * When creating a class that is used on both the client and the server, be sure - * that all code is translatable and does not use native JavaScript. Code that - * is note translatable (such as code that interacts with a database or the file - * system) cannot be compiled into client side JavaScript. Code that uses native - * JavaScript (such as Widgets) cannot be run on the server. - *

- */ -public class FieldVerifier { - - /** - * Verifies that the specified name is valid for our service. - * - * In this example, we only require that the name is at least four - * characters. In your application, you can use more complex checks to ensure - * that usernames, passwords, email addresses, URLs, and other fields have the - * proper syntax. - * - * @param name the name to validate - * @return true if valid, false if invalid - */ - public static boolean isValidName(String name) { - if (name == null) { - return false; - } - return name.length() > 3; - } -} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BoundsMap.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BoundsMap.java new file mode 100644 index 0000000..7e0b5ff --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/BoundsMap.java @@ -0,0 +1,156 @@ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; + +/** + * The Class BoundsMap. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class BoundsMap implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 69005924452960006L; + + /** The lower left X. */ + private double lowerLeftX = 0.0; + + /** The lower left Y. */ + private double lowerLeftY = 0.0; + + /** The upper right X. */ + private double upperRightX = 0.0; + + /** The upper right Y. */ + private double upperRightY = 0.0; + + /** The crs. */ + private String crs = ""; + + /** + * Instantiates a new bounds map. + */ + public BoundsMap() { + } + + /** + * Instantiates a new bounds map. + * + * @param lowerLeftX the lower left X + * @param lowerLeftY the lower left Y + * @param upperRightX the upper right X + * @param upperRightY the upper right Y + * @param crs the crs + */ + public BoundsMap(double lowerLeftX, double lowerLeftY, double upperRightX, + double upperRightY, String crs) { + super(); + this.lowerLeftX = lowerLeftX; + this.lowerLeftY = lowerLeftY; + this.upperRightX = upperRightX; + this.upperRightY = upperRightY; + this.crs = crs; + } + + /** + * Gets the lower left X. + * + * @return the lower left X + */ + public double getLowerLeftX() { + return lowerLeftX; + } + + /** + * Sets the lower left X. + * + * @param lowerLeftX the new lower left X + */ + public void setLowerLeftX(double lowerLeftX) { + this.lowerLeftX = lowerLeftX; + } + + /** + * Gets the lower left Y. + * + * @return the lower left Y + */ + public double getLowerLeftY() { + return lowerLeftY; + } + + /** + * Sets the lower left Y. + * + * @param lowerLeftY the new lower left Y + */ + public void setLowerLeftY(double lowerLeftY) { + this.lowerLeftY = lowerLeftY; + } + + /** + * Gets the upper right X. + * + * @return the upper right X + */ + public double getUpperRightX() { + return upperRightX; + } + + /** + * Sets the upper right X. + * + * @param upperRightX the new upper right X + */ + public void setUpperRightX(double upperRightX) { + this.upperRightX = upperRightX; + } + + /** + * Gets the upper right Y. + * + * @return the upper right Y + */ + public double getUpperRightY() { + return upperRightY; + } + + /** + * Sets the upper right Y. + * + * @param upperRightY the new upper right Y + */ + public void setUpperRightY(double upperRightY) { + this.upperRightY = upperRightY; + } + + /** + * Gets the crs. + * + * @return the crs + */ + public String getCrs() { + return crs; + } + + /** + * Sets the crs. + * + * @param crs the new crs + */ + public void setCrs(String crs) { + this.crs = crs; + } + + @Override + public String toString() { + return "BoundsMap [lowerLeftX=" + lowerLeftX + ", lowerLeftY=" + lowerLeftY + ", upperRightX=" + upperRightX + + ", upperRightY=" + upperRightY + ", crs=" + crs + "]"; + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/GeoInformationForWMSRequest.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/GeoInformationForWMSRequest.java new file mode 100644 index 0000000..c54f3f7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/GeoInformationForWMSRequest.java @@ -0,0 +1,296 @@ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; +import java.util.HashMap; + +/** + * The Class GeoInformationForWMSRequest. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class GeoInformationForWMSRequest implements Serializable { + + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = -6846636281073641003L; + + /** The base wms service host. */ + private String baseWmsServiceHost; + + /** The wms request. */ + private String wmsRequest; + + /** The layer name. */ + private String layerName; + + /** The version WMS. */ + private String versionWMS; + + /** The crs. */ + private String crs; + + /** The map WMS no standard params. */ + private HashMap mapWMSNoStandardParams; + + /** The styles. */ + private Styles styles; + + /** The is nc WMS. */ + // TODO TO BE REMOVED + private boolean isNcWMS; + + /** The z axis. */ + private ZAxis zAxis; + + /** + * Instantiates a new geo information for wms request. + */ + public GeoInformationForWMSRequest() { + + } + + /** + * Instantiates a new geo information for wms request. + * + * @param baseWmsServiceHost the base wms service host + * @param wmsRequest the wms request + * @param layerName the layer name + * @param versionWms the version wms + * @param crs the crs + * @param mapWmsNoStandard the map wms not standard + * @param styles the layer styles + * @param isNcWMS the is nc WMS + * @param zAxis the z axis + */ + public GeoInformationForWMSRequest(String baseWmsServiceHost, String wmsRequest, String layerName, + String versionWms, String crs, HashMap mapWmsNoStandard, Styles styles, boolean isNcWMS, + ZAxis zAxis) { + this.baseWmsServiceHost = baseWmsServiceHost; + this.wmsRequest = wmsRequest; + this.layerName = layerName; + this.versionWMS = versionWms; + this.crs = crs; + this.mapWMSNoStandardParams = mapWmsNoStandard; + this.styles = styles; + this.zAxis = zAxis; + this.isNcWMS = isNcWMS; + } + + /** + * Gets the z axis. + * + * @return the zAxis + */ + public ZAxis getZAxis() { + + return zAxis; + } + + /** + * Sets the z axis. + * + * @param zAxis the zAxis to set + */ + public void setZAxis(ZAxis zAxis) { + + this.zAxis = zAxis; + } + + /** + * Gets the base wms service host. + * + * @return the baseWmsServiceHost + */ + public String getBaseWmsServiceHost() { + + return baseWmsServiceHost; + } + + /** + * Gets the wms request. + * + * @return the wmsRequest + */ + public String getWmsRequest() { + + return wmsRequest; + } + + /** + * Gets the layer name. + * + * @return the layerName + */ + public String getLayerName() { + + return layerName; + } + + /** + * Gets the version wms. + * + * @return the versionWMS + */ + public String getVersionWMS() { + + return versionWMS; + } + + /** + * Gets the crs. + * + * @return the crs + */ + public String getCrs() { + + return crs; + } + + /** + * Gets the map wms no standard. + * + * @return the mapWMSNoStandard + */ + public HashMap getMapWMSNoStandard() { + + return mapWMSNoStandardParams; + } + + /** + * Gets the styles. + * + * @return the styles + */ + public Styles getStyles() { + + return styles; + } + + /** + * Checks if is nc wms. + * + * @return the isNcWMS + */ + public boolean isNcWMS() { + + return isNcWMS; + } + + /** + * Sets the base wms service host. + * + * @param baseWmsServiceHost the baseWmsServiceHost to set + */ + public void setBaseWmsServiceHost(String baseWmsServiceHost) { + + this.baseWmsServiceHost = baseWmsServiceHost; + } + + /** + * Sets the wms request. + * + * @param wmsRequest the wmsRequest to set + */ + public void setWmsRequest(String wmsRequest) { + + this.wmsRequest = wmsRequest; + } + + /** + * Sets the layer name. + * + * @param layerName the layerName to set + */ + public void setLayerName(String layerName) { + + this.layerName = layerName; + } + + /** + * Sets the version wms. + * + * @param versionWMS the versionWMS to set + */ + public void setVersionWMS(String versionWMS) { + + this.versionWMS = versionWMS; + } + + /** + * Sets the crs. + * + * @param crs the crs to set + */ + public void setCrs(String crs) { + + this.crs = crs; + } + + /** + * Sets the map wms no standard. + * + * @param mapWMSNoStandard the mapWMSNoStandard to set + */ + public void setMapWMSNoStandard(HashMap mapWMSNoStandard) { + + this.mapWMSNoStandardParams = mapWMSNoStandard; + } + + /** + * Sets the styles. + * + * @param styles the styles to set + */ + public void setStyles(Styles styles) { + + this.styles = styles; + } + + /** + * Sets the nc wms. + * + * @param isNcWMS the isNcWMS to set + */ + public void setNcWMS(boolean isNcWMS) { + + this.isNcWMS = isNcWMS; + } + + /** + * To string. + * + * @return the string + */ + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("GeoInformationForWMSRequest [baseWmsServiceHost="); + builder.append(baseWmsServiceHost); + builder.append(", wmsRequest="); + builder.append(wmsRequest); + builder.append(", layerName="); + builder.append(layerName); + builder.append(", versionWMS="); + builder.append(versionWMS); + builder.append(", crs="); + builder.append(crs); + builder.append(", mapWMSNoStandardParams="); + builder.append(mapWMSNoStandardParams); + builder.append(", styles="); + builder.append(styles); + builder.append(", isNcWMS="); + builder.append(isNcWMS); + builder.append(", zAxis="); + builder.append(zAxis); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java new file mode 100644 index 0000000..5753694 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerItem.java @@ -0,0 +1,918 @@ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +// TODO: Auto-generated Javadoc +/** + * The Class LayerItem. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class LayerItem implements Serializable, Cloneable { + + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1664082688635256899L; + + /** The name. */ + private String name; + + /** The title. */ + private String title = null; + + /** The url. */ + private String url; + + /** The base map server URL. */ + private String mapServerHost; + + /** The style. */ + private String style; + + /** The is trasparent. */ + private boolean isTrasparent; + + /** The is base layer. */ + private boolean isBaseLayer; + + /** The is feature type. */ + private boolean isFeatureType; + + /** The buffer. */ + private int buffer = 0; + + /** The has legend. */ + private boolean hasLegend; + + /** The is visible. */ + private boolean isVisible; + + /** The is on map. */ + private boolean isOnMap; + + /** The click data. */ + private boolean clickData; + + /** The max extent. */ + private BoundsMap maxExtent; + + /** The default style. */ + private String defaultStyle = ""; + + /** The opacity. */ + private double opacity = -1; + + /** The styles. */ + private ArrayList styles = new ArrayList(); + + /** The properties. */ + private List properties = new ArrayList(); + + /** The data store. */ + private String dataStore; + + /** The cql filter. */ + private String cqlFilter; + + /** The id. */ + private long id; + + /** The order. */ + private long order; + + /** The wms not standard params. */ + private Map wmsNotStandardParams = null; + + /** The is nc wms. */ + private boolean isNcWms = false; + + /** The server wms request. */ + public String serverWmsRequest; + + /** The cql filter available. */ + private boolean cqlFilterAvailable = false; + + /** The uuid. */ + private String UUID; + + /** The z axis. */ + private ZAxis zAxis = null; + + /** The z axis selected. */ + private Double zAxisSelected = null; + + /** The Constant FLOAT_TYPE. */ + public static final String FLOAT_TYPE = "xsd:float"; + + /** The Constant INT_TYPE. */ + public static final String INT_TYPE = "xsd:int"; + + /** + * Instantiates a new layer item. + */ + public LayerItem() { + } + + /** + * Checks if is checks for legend. + * + * @return true, if is checks for legend + */ + public boolean isHasLegend() { + return hasLegend; + } + + /** + * Sets the checks for legend. + * + * @param hasLegend the new checks for legend + */ + public void setHasLegend(boolean hasLegend) { + this.hasLegend = hasLegend; + } + + /** + * Gets the max extent. + * + * @return the max extent + */ + public BoundsMap getMaxExtent() { + return maxExtent; + } + + /** + * Sets the max extent. + * + * @param maxExtent the new max extent + */ + public void setMaxExtent(BoundsMap maxExtent) { + this.maxExtent = maxExtent; + } + + /** + * Sets the max extent. + * + * @param lowerLeftX the lower left x + * @param lowerLeftY the lower left y + * @param upperRightX the upper right x + * @param upperRightY the upper right y + * @param crs the crs + */ + public void setMaxExtent(double lowerLeftX, double lowerLeftY, double upperRightX, double upperRightY, String crs) { + this.maxExtent = new BoundsMap(lowerLeftX, lowerLeftY, upperRightX, upperRightY, crs); + } + + /** + * Checks if is feature type. + * + * @return true, if is feature type + */ + public boolean isFeatureType() { + return isFeatureType; + } + + /** + * Sets the feature type. + * + * @param isFeatureType the new feature type + */ + public void setFeatureType(boolean isFeatureType) { + this.isFeatureType = isFeatureType; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Gets the url. + * + * @return the url + */ + public String getUrl() { + return url; + } + + /** + * Sets the url. + * + * @param url the new url + */ + public void setUrl(String url) { + this.url = url; + } + + /** + * Gets the style. + * + * @return the style + */ + public String getStyle() { + return style; + } + + /** + * Sets the style. + * + * @param style the new style + */ + public void setStyle(String style) { + this.style = style; + } + + /** + * Checks if is trasparent. + * + * @return true, if is trasparent + */ + public boolean isTrasparent() { + return isTrasparent; + } + + /** + * Sets the trasparent. + * + * @param isTrasparent the new trasparent + */ + public void setTrasparent(boolean isTrasparent) { + this.isTrasparent = isTrasparent; + } + + /** + * Checks if is base layer. + * + * @return true, if is base layer + */ + public boolean isBaseLayer() { + return isBaseLayer; + } + + /** + * Sets the base layer. + * + * @param isBaseLayer the new base layer + */ + public void setBaseLayer(boolean isBaseLayer) { + this.isBaseLayer = isBaseLayer; + } + + /** + * Gets the buffer. + * + * @return the buffer + */ + public int getBuffer() { + return buffer; + } + + /** + * Sets the buffer. + * + * @param buffer the new buffer + */ + public void setBuffer(int buffer) { + this.buffer = buffer; + } + + /** + * Checks if is visible. + * + * @return true, if is visible + */ + public boolean isVisible() { + return isVisible; + } + + /** + * Sets the visible. + * + * @param isVisible the new visible + */ + public void setVisible(boolean isVisible) { + this.isVisible = isVisible; + } + + /** + * Checks if is on map. + * + * @return true, if is on map + */ + public boolean isOnMap() { + return isOnMap; + } + + /** + * Sets the on map. + * + * @param isOnMap the new on map + */ + public void setOnMap(boolean isOnMap) { + this.isOnMap = isOnMap; + } + + /** + * Checks if is click data. + * + * @return true, if is click data + */ + public boolean isClickData() { + return clickData; + } + + /** + * Sets the click data. + * + * @param clickData the new click data + */ + public void setClickData(boolean clickData) { + this.clickData = clickData; + } + + /** + * Gets the default style. + * + * @return the default style + */ + public String getDefaultStyle() { + return defaultStyle; + } + + /** + * Sets the default style. + * + * @param defaultStyle the new default style + */ + public void setDefaultStyle(String defaultStyle) { + this.defaultStyle = defaultStyle; + } + + /** + * Gets the styles. + * + * @return the styles + */ + public ArrayList getStyles() { + return styles; + } + + /** + * Sets the styles. + * + * @param styles the new styles + */ + public void setStyles(ArrayList styles) { + this.styles = styles; + } + + /** + * Gets the opacity. + * + * @return the opacity + */ + public double getOpacity() { + return opacity; + } + + /** + * Sets the opacity. + * + * @param opacity the new opacity + */ + public void setOpacity(double opacity) { + this.opacity = opacity; + } + +// @Override + /** + * Clone. + * + * @return the layer item + */ + /* + * (non-Javadoc) + * + * @see java.lang.Object#clone() + */ + public LayerItem clone() { + LayerItem ele = new LayerItem(); + ele.setBaseLayer(this.isBaseLayer); + ele.setClickData(this.clickData); + ele.setBuffer(this.buffer); + ele.setDefaultStyle(this.defaultStyle); + ele.setHasLegend(this.hasLegend); + ele.setMaxExtent(maxExtent); + ele.setName(this.name); + ele.setOnMap(this.isOnMap); + ele.setOpacity(this.opacity); + ele.setStyle(this.style); + ele.setStyles(this.styles); + ele.setTrasparent(this.isTrasparent); + ele.setUrl(this.url); + ele.setVisible(this.isVisible); + ele.setProperties(this.getProperties()); + ele.setWmsNotStandardParams(this.wmsNotStandardParams); +// ele.setUUID(this.UUID); + return ele; + } + + /** + * Checks if is nc wms. + * + * @return the isNcWms + */ + public boolean isNcWms() { + return isNcWms; + } + + /** + * Sets the nc wms. + * + * @param isNcWms the isNcWms to set + */ + public void setNcWms(boolean isNcWms) { + this.isNcWms = isNcWms; + } + + /** + * Gets the properties. + * + * @return the properties + */ + public List getProperties() { + return properties; + } + + /** + * Sets the properties. + * + * @param properties the new properties + */ + public void setProperties(List properties) { + this.properties = properties; + } + + // search a float property in the layer's feature type + /** + * Contains property. + * + * @param propertyName the property name + * @return true, if successful + */ + public boolean containsProperty(String propertyName) { + boolean contains = false; + for (Property p : properties) { + if (p.getName().equals(propertyName) && (p.getType().equals(FLOAT_TYPE) || p.getType().equals(INT_TYPE))) { + contains = true; + } + } + return contains; + } + + // search a property in the layer's feature type, giving property name and + // property type + /** + * Contains property. + * + * @param propertyName the property name + * @param propertyType the property type + * @return true, if successful + */ + public boolean containsProperty(String propertyName, String propertyType) { + if (properties == null) { + return false; + } + + boolean contains = false; + for (Property p : properties) { + if (p.getName().equals(propertyName) && p.getType().equals(propertyType)) { + contains = true; + } + } + return contains; + } + + // search a property in the layer's feature type, giving a property object + /** + * Contains property. + * + * @param property the property + * @return true, if successful + */ + public boolean containsProperty(Property property) { + if (properties == null) { + return false; + } + + boolean contains = false; + for (Property p : properties) { + if (p.getName().equals(property.getName()) && p.getType().equals(property.getType())) { + contains = true; + } + } + return contains; + } + + // search for float Property objects belongs to the layer + /** + * Gets the all float properties. + * + * @return the all float properties + */ + public List getAllFloatProperties() { + if (properties == null) { + return null; + } + + List floatProperties = new ArrayList(); + for (Property p : properties) { + if (p.getType().equals(FLOAT_TYPE)) { + floatProperties.add(p); + } + } + return floatProperties; + } + + // search for float Property names belongs to the layer + /** + * Gets the all float property names. + * + * @return the all float property names + */ + public List getAllFloatPropertyNames() { + if (properties == null) { + return null; + } + + List floatPropertyNames = new ArrayList(); + for (Property p : properties) { + if (p.getType().equals(FLOAT_TYPE)) { + floatPropertyNames.add(p.getName()); + } + } + + return floatPropertyNames; + } + + // get the first float Property names belongs to the layer + /** + * Gets the first float property name. + * + * @return the first float property name + */ + public String getFirstFloatPropertyName() { + if (properties == null) { + return null; + } + + for (Property p : properties) { + if (p.getType().equals(FLOAT_TYPE)) { + return p.getName(); + } + } + + return null; + } + + /** + * Sets the z axis selected. + * + * @param value the new z axis selected + */ + public void setZAxisSelected(Double value) { + this.zAxisSelected = value; + } + + /** + * Gets the z axis selected. + * + * @return the zAxisSelected + */ + public Double getZAxisSelected() { + + return zAxisSelected; + } + + /** + * Sets the list z axis. + * + * @param zAxis the new list z axis + */ + public void setZAxis(ZAxis zAxis) { + this.zAxis = zAxis; + } + + /** + * Gets the list z axis. + * + * @return the zAxis + */ + public ZAxis getZAxis() { + + return zAxis; + } + + /** + * Sets the data store. + * + * @param dataStore the new data store + */ + public void setDataStore(String dataStore) { + this.dataStore = dataStore; + } + + /** + * Gets the data store. + * + * @return the data store + */ + public String getDataStore() { + return dataStore; + } + + /** + * Sets the title. + * + * @param title the new title + */ + public void setTitle(String title) { + this.title = title; + } + + /** + * Gets the title. + * + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * Gets the id. + * + * @return the id + */ + public long getId() { + return id; + } + + /** + * Sets the id. + * + * @param id the new id + */ + public void setId(long id) { + this.id = id; + } + + /** + * Sets the order. + * + * @param order the new order + */ + public void setOrder(long order) { + this.order = order; + } + + /** + * Gets the order. + * + * @return the order + */ + public long getOrder() { + return order; + } + + /** + * Gets the cql filter. + * + * @return the cql filter + */ + public String getCqlFilter() { + return cqlFilter; + } + + /** + * Sets the cql filter. + * + * @param cqlFilter the new cql filter + */ + public void setCqlFilter(String cqlFilter) { + this.cqlFilter = cqlFilter; + } + + /** + * Sets the uuid. + * + * @param uUID the new uuid + */ + public void setUUID(String uUID) { + this.UUID = uUID; + } + + /** + * Gets the uuid. + * + * @return the uUID + */ + public String getUUID() { + return UUID; + } + + /** + * Checks if is cql filter available. + * + * @return true, if is cql filter available + */ + public boolean isCqlFilterAvailable() { + return cqlFilterAvailable; + } + + /** + * Sets the cql filter available. + * + * @param cqlFilterAvailable the new cql filter available + */ + public void setCqlFilterAvailable(boolean cqlFilterAvailable) { + this.cqlFilterAvailable = cqlFilterAvailable; + } + + /** + * Gets the server wms request. + * + * @return the server wms request + */ + public String getServerWmsRequest() { + return serverWmsRequest; + } + + /** + * Sets the server wms request. + * + * @param serverWmsRequest the new server wms request + */ + public void setServerWmsRequest(String serverWmsRequest) { + this.serverWmsRequest = serverWmsRequest; + } + + /** + * Gets the map server host. + * + * @return the map server host + */ + public String getMapServerHost() { + return mapServerHost; + } + + /** + * Sets the map server host. + * + * @param mapServerHost the new map server host + */ + public void setMapServerHost(String mapServerHost) { + this.mapServerHost = mapServerHost; + } + + /** + * Gets the wms not standard params. + * + * @return the wmsNotStandardParams + */ + public Map getWmsNotStandardParams() { + return wmsNotStandardParams; + } + + /** + * Sets the wms not standard params. + * + * @param wmsNotStandardParams the wmsNotStandardParams to set + */ + public void setWmsNotStandardParams(Map wmsNotStandardParams) { + this.wmsNotStandardParams = wmsNotStandardParams; + } + + /** + * Gets the z axis. + * + * @return the z axis + */ + public ZAxis getzAxis() { + return zAxis; + } + + /** + * Sets the z axis. + * + * @param zAxis the new z axis + */ + public void setzAxis(ZAxis zAxis) { + this.zAxis = zAxis; + } + + /** + * Gets the z axis selected. + * + * @return the z axis selected + */ + public Double getzAxisSelected() { + return zAxisSelected; + } + + /** + * Sets the z axis selected. + * + * @param zAxisSelected the new z axis selected + */ + public void setzAxisSelected(Double zAxisSelected) { + this.zAxisSelected = zAxisSelected; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("LayerItem [name="); + builder.append(name); + builder.append(", title="); + builder.append(title); + builder.append(", url="); + builder.append(url); + builder.append(", mapServerHost="); + builder.append(mapServerHost); + builder.append(", style="); + builder.append(style); + builder.append(", isTrasparent="); + builder.append(isTrasparent); + builder.append(", isBaseLayer="); + builder.append(isBaseLayer); + builder.append(", isFeatureType="); + builder.append(isFeatureType); + builder.append(", buffer="); + builder.append(buffer); + builder.append(", hasLegend="); + builder.append(hasLegend); + builder.append(", isVisible="); + builder.append(isVisible); + builder.append(", isOnMap="); + builder.append(isOnMap); + builder.append(", clickData="); + builder.append(clickData); + builder.append(", maxExtent="); + builder.append(maxExtent); + builder.append(", defaultStyle="); + builder.append(defaultStyle); + builder.append(", opacity="); + builder.append(opacity); + builder.append(", styles="); + builder.append(styles); + builder.append(", properties="); + builder.append(properties); + builder.append(", dataStore="); + builder.append(dataStore); + builder.append(", cqlFilter="); + builder.append(cqlFilter); + builder.append(", id="); + builder.append(id); + builder.append(", order="); + builder.append(order); + builder.append(", wmsNotStandardParams="); + builder.append(wmsNotStandardParams); + builder.append(", isNcWms="); + builder.append(isNcWms); + builder.append(", serverWmsRequest="); + builder.append(serverWmsRequest); + builder.append(", cqlFilterAvailable="); + builder.append(cqlFilterAvailable); + builder.append(", UUID="); + builder.append(UUID); + builder.append(", zAxis="); + builder.append(zAxis); + builder.append(", zAxisSelected="); + builder.append(zAxisSelected); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Property.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Property.java new file mode 100644 index 0000000..d45aeac --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Property.java @@ -0,0 +1,188 @@ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; + + +// TODO: Auto-generated Javadoc +/** + * The Class Property. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class Property implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 8289583721513187916L; + + /** The name. */ + private String name; + + /** The type. */ + private String type; + + /** The nillable. */ + private boolean nillable=true; + + /** The max occours. */ + private int maxOccours=1; + + /** The min occours. */ + private int minOccours=0; + + /** + * Instantiates a new property. + */ + public Property() { + super(); + } + + /** + * Instantiates a new property. + * + * @param name the name + * @param type the type + * @param nillable the nillable + * @param maxOccours the max occours + * @param minOccours the min occours + */ + public Property(String name, String type, boolean nillable, + int maxOccours, int minOccours) { + super(); + + this.name = name; + this.type = type; + this.nillable = nillable; + this.maxOccours = maxOccours; + this.minOccours = minOccours; + } + + /** + * Instantiates a new property. + * + * @param name the name + * @param type the type + */ + public Property(String name, String type) { + super(); + this.name = name; + this.type = type; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Sets the name. + * + * @param name the new name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Checks if is nillable. + * + * @return true, if is nillable + */ + public boolean isNillable() { + return nillable; + } + + /** + * Sets the nillable. + * + * @param nillable the new nillable + */ + public void setNillable(boolean nillable) { + this.nillable = nillable; + } + + /** + * Gets the max occours. + * + * @return the max occours + */ + public int getMaxOccours() { + return maxOccours; + } + + /** + * Sets the max occours. + * + * @param maxOccours the new max occours + */ + public void setMaxOccours(int maxOccours) { + this.maxOccours = maxOccours; + } + + /** + * Gets the min occours. + * + * @return the min occours + */ + public int getMinOccours() { + return minOccours; + } + + /** + * Sets the min occours. + * + * @param minOccours the new min occours + */ + public void setMinOccours(int minOccours) { + this.minOccours = minOccours; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Property [name="); + builder.append(name); + builder.append(", type="); + builder.append(type); + builder.append(", nillable="); + builder.append(nillable); + builder.append(", maxOccours="); + builder.append(maxOccours); + builder.append(", minOccours="); + builder.append(minOccours); + builder.append("]"); + return builder.toString(); + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Styles.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Styles.java new file mode 100644 index 0000000..ab79254 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/Styles.java @@ -0,0 +1,126 @@ +/** + * + */ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.util.List; +import java.util.Map; + +import com.google.gwt.user.client.rpc.IsSerializable; + + +/** + * The Class LayerStyles. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 10, 2016 + */ +public class Styles implements IsSerializable{ + + private List geoStyles; + private Map mapNcWmsStyles; + boolean isNcWms = false; + + /** + * Instantiates a new layer styles. + */ + public Styles() { + } + + /** + * Instantiates a new layer styles. + * + * @param geoStyles the geo styles + * @param mapNcWmsStyles the map nc wms styles + * @param isNcWms the is nc wms + */ + public Styles(List geoStyles, Map mapNcWmsStyles,boolean isNcWms) { + + this.geoStyles = geoStyles; + this.mapNcWmsStyles = mapNcWmsStyles; + this.isNcWms = isNcWms; + } + + + /** + * Gets the geo styles. + * + * @return the geoStyles + */ + public List getGeoStyles() { + + return geoStyles; + } + + + /** + * Gets the map nc wms styles. + * + * @return the mapNcWmsStyles + */ + public Map getMapNcWmsStyles() { + + return mapNcWmsStyles; + } + + + /** + * Checks if is nc wms. + * + * @return the isNcWms + */ + public boolean isNcWms() { + + return isNcWms; + } + + + /** + * Sets the geo styles. + * + * @param geoStyles the geoStyles to set + */ + public void setGeoStyles(List geoStyles) { + + this.geoStyles = geoStyles; + } + + + /** + * Sets the map nc wms styles. + * + * @param mapNcWmsStyles the mapNcWmsStyles to set + */ + public void setMapNcWmsStyles(Map mapNcWmsStyles) { + + this.mapNcWmsStyles = mapNcWmsStyles; + } + + + /** + * Sets the nc wms. + * + * @param isNcWms the isNcWms to set + */ + public void setNcWms(boolean isNcWms) { + + this.isNcWms = isNcWms; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("Styles [geoStyles="); + builder.append(geoStyles); + builder.append(", mapNcWmsStyles="); + builder.append(mapNcWmsStyles); + builder.append(", isNcWms="); + builder.append(isNcWms); + builder.append("]"); + return builder.toString(); + } +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/ZAxis.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/ZAxis.java new file mode 100644 index 0000000..f5eff19 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/ZAxis.java @@ -0,0 +1,140 @@ +/** + * + */ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; +import java.util.List; + + +// TODO: Auto-generated Javadoc +/** + * The Class ZAxis. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Oct 27, 2020 + */ +public class ZAxis implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -1669690469240944967L; + + /** The units. */ + private String units; + + /** The positive. */ + private boolean positive; + + /** The values. */ + private List values; + + /** + * Instantiates a new layer z axis. + */ + public ZAxis() { + } + + /** + * Instantiates a new layer z axis. + * + * @param units the units + * @param positive the positive + * @param values the values + */ + public ZAxis(String units, boolean positive, List values) { + this.units = units; + this.positive = positive; + this.values = values; + } + + + /** + * Gets the units. + * + * @return the units + */ + public String getUnits() { + + return units; + } + + + /** + * Checks if is positive. + * + * @return the positive + */ + public boolean isPositive() { + + return positive; + } + + + /** + * Gets the values. + * + * @return the values + */ + public List getValues() { + + return values; + } + + + /** + * Sets the units. + * + * @param units the units to set + */ + public void setUnits(String units) { + + this.units = units; + } + + + /** + * Sets the positive. + * + * @param positive the positive to set + */ + public void setPositive(boolean positive) { + + this.positive = positive; + } + + + /** + * Sets the values. + * + * @param values the values to set + */ + public void setValues(List values) { + + this.values = values; + } + + /** + * To string. + * + * @return the string + */ + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("ZAxis [units="); + builder.append(units); + builder.append(", positive="); + builder.append(positive); + builder.append(", values="); + builder.append(values); + builder.append("]"); + return builder.toString(); + } +} diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/client/GwtTestGeoportalDataViewer.java b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/client/GwtTestGeoportalDataViewer.java index fd9ec48..570334e 100644 --- a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/client/GwtTestGeoportalDataViewer.java +++ b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/client/GwtTestGeoportalDataViewer.java @@ -1,10 +1,6 @@ package org.gcube.portlets.user.geoportaldataviewer.client; -import org.gcube.portlets.user.geoportaldataviewer.shared.FieldVerifier; -import com.google.gwt.core.client.GWT; import com.google.gwt.junit.client.GWTTestCase; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.rpc.ServiceDefTarget; /** * GWT JUnit integration tests must extend GWTTestCase. @@ -29,12 +25,6 @@ public class GwtTestGeoportalDataViewer extends GWTTestCase { * Tests the FieldVerifier. */ public void testFieldVerifier() { - assertFalse(FieldVerifier.isValidName(null)); - assertFalse(FieldVerifier.isValidName("")); - assertFalse(FieldVerifier.isValidName("a")); - assertFalse(FieldVerifier.isValidName("ab")); - assertFalse(FieldVerifier.isValidName("abc")); - assertTrue(FieldVerifier.isValidName("abcd")); } /** @@ -42,33 +32,7 @@ public class GwtTestGeoportalDataViewer extends GWTTestCase { * GreetingService and verify the response. */ public void testGreetingService() { - // Create the service that we will test. - GeoportalDataViewerServiceAsync greetingService = GWT.create(GeoportalDataViewerService.class); - ServiceDefTarget target = (ServiceDefTarget) greetingService; - target.setServiceEntryPoint(GWT.getModuleBaseURL() + "GeoportalDataViewer/greet"); - - // Since RPC calls are asynchronous, we will need to wait for a response - // after this test method returns. This line tells the test runner to wait - // up to 10 seconds before timing out. - delayTestFinish(10000); - - // Send a request to the server. - greetingService.greetServer("GWT User", new AsyncCallback() { - public void onFailure(Throwable caught) { - // The request resulted in an unexpected error. - fail("Request failure: " + caught.getMessage()); - } - - public void onSuccess(String result) { - // Verify that the response is correct. - assertTrue(result.startsWith("Hello, GWT User!")); - - // Now that we have received a response, we need to tell the test runner - // that the test is complete. You must call finishTest() after an - // asynchronous test finishes successfully, or the test will time out. - finishTest(); - } - }); + }