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 acf29d8..71694af 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,6 @@ package org.gcube.portlets.user.geoportaldataviewer.client; import java.util.Iterator; -import java.util.List; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEventHandler; @@ -9,9 +8,7 @@ import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils; import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM; import org.gcube.portlets.user.geoportaldataviewer.client.ui.GeonaDataViewMainPanel; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataViewerProfile; -import org.gcube.portlets.user.geoportaldataviewer.shared.ProductType; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; -import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import com.github.gwtbootstrap.client.ui.Tab; @@ -60,8 +57,7 @@ public class GeoportalDataViewer implements EntryPoint { /** The param UUID. */ private String paramUUID; - /** The param UUID. */ - private String layerType; + private String geonaItemType; /** The param layer title. */ private String paramLayerTitle; @@ -70,6 +66,10 @@ public class GeoportalDataViewer implements EntryPoint { /** The layer manager. */ private LayerManager layerManager = new LayerManager(eventBus); + + private String geonaItemID; + + private GeoNaDataViewerProfile geonaDataViewerProfile; //https://data.d4science.org/gis-viewer-app/?wmsrequest=https%3A%2F%2Fgeona-proto.d4science.org%2Fgeoserver%2Fconcessioni_conf%2Fwms%3Fservice%3DWMS%26version%3D1.1.0%26request%3DGetMap%26layers%3Dconcessioni_conf%3Acentroids_concessioni%26styles%3D%26bbox%3D8.476%2C39.179%2C17.391%2C45.772%26width%3D768%26height%3D567%26srs%3DEPSG%3A4326%26format%3Dapplication%2Fopenlayers&zoom=6¢ermap=12.45%2C42.98 @@ -109,11 +109,13 @@ public class GeoportalDataViewer implements EntryPoint { // }); paramWmsRequest = Window.Location.getParameter(GeoportalDataViewerConstants.GET_WMS_PARAMETER); - layerType = Window.Location.getParameter(GeoportalDataViewerConstants.GET_DISPLAY_LAYER_TYPE); + geonaItemType = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE); paramUUID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_UUID_PARAMETER); + geonaItemID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID); paramLayerTitle = Window.Location.getParameter(GeoportalDataViewerConstants.GET_LAYER_TITLE); GWT.log(GeoportalDataViewerConstants.GET_WMS_PARAMETER + " = " + paramWmsRequest); - GWT.log(GeoportalDataViewerConstants.GET_DISPLAY_LAYER_TYPE + " = " + layerType); + GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE + " = " + geonaItemType); + GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID + " = " + geonaItemID); GWT.log(GeoportalDataViewerConstants.GET_UUID_PARAMETER + " = " + paramUUID); GWT.log(GeoportalDataViewerConstants.GET_LAYER_TITLE + " = " + paramLayerTitle); @@ -131,140 +133,130 @@ public class GeoportalDataViewer implements EntryPoint { } @Override - public void onSuccess(GeoNaDataViewerProfile result) { - GWT.log("Profile: "+result); + public void onSuccess(GeoNaDataViewerProfile profile) { + geonaDataViewerProfile = profile; + GWT.log("Profile: "+geonaDataViewerProfile); Iterator it; - if(layerType==null) { - it = result.getMapLayers().keySet().iterator(); + if(geonaItemType==null) { + it = geonaDataViewerProfile.getMapLayers().keySet().iterator(); it.hasNext(); - layerType= it.next(); + geonaItemType= it.next(); } - LayerItem layerItem = result.getMapLayers().get(layerType); + LayerItem layerItem = geonaDataViewerProfile.getMapLayers().get(geonaItemType); if(layerItem==null) { - Window.alert("Not detected any layer with type: "+layerType); + Window.alert("Not detected any layer with type: "+geonaItemType); return; } GWT.log("The layerItem is: "+layerItem); - layerManager.addLayerByWmsRequest(null, null, layerItem.getWmsLink(), false, false, null, true); + layerManager.addLayer(geonaItemType, null, null, layerItem.getWmsLink(), false, false, null, true); } }); } }); -// 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; -// Scheduler.get().scheduleDeferred(new ScheduledCommand() { -// -// @Override -// public void execute() { -// layerManager.addLayerByWmsRequest(displayName, layerName, paramWmsRequest, false, false, paramUUID, true); -// -// } -// });*/ -// Scheduler.get().scheduleDeferred(new ScheduledCommand() { -// -// @Override -// public void execute() { -// GWT.log("qui"); -// GeoportalDataViewerServiceAsync.Util.getInstance().getGeoNaDataViewProfile(new AsyncCallback() { -// -// @Override -// public void onFailure(Throwable caught) { -// Window.alert(caught.getMessage()); -// -// } -// -// @Override -// public void onSuccess(GeoNaDataViewerProfile result) { -// GWT.log("Profile: "+result); -// Iterator it; -// if(layerType==null) { -// it = result.getMapLayers().keySet().iterator(); -// it.hasNext(); -// layerType= it.next(); -// } -// layerManager.addLayerByType(layerType); -// } -// }); -// } -// }); -// -// -// } catch (Exception e) { -// GWT.log("An error occurred on adding wmsrequest :" + paramWmsRequest, e); -// e.printStackTrace(); -// } -// } - bindEvents(); } + /** + * Bind events. + */ private void bindEvents() { +// eventBus.addHandler(ShowDetailsEvent.TYPE, new ShowDetailsEventHandler() { +// +// @Override +// public void onShowDetails(ShowDetailsEvent showDetailsEvent) { +// GWT.log("Fired event: "+showDetailsEvent); +// FeatureRow fRow = showDetailsEvent.getFeatureRow(); +// if(fRow!=null) { +// if(showDetailsEvent.getProductType().equals(ProductType.CONCESSIONE)) { +// List productIds = fRow.getMapProperties().get("product_id"); +// if(productIds!=null && productIds.size()>0) { +// long id = Long.parseLong(productIds.get(0)); +// String tabName = "Dettagli Prodotto"; +// List listName = fRow.getMapProperties().get("nome"); +// if(listName!=null && listName.size()>0) { +// tabName = listName.get(0); +// } +// +// boolean found = mainPanel.selectTabForProductId(id); +// GWT.log("Product with id: "+id+" found? "+found); +// if(!found) { +// +// final Tab theTab = mainPanel.addAsTab(tabName, true, null); +// GeoportalDataViewerServiceAsync.Util.getInstance().getConcessioneForId(id, new AsyncCallback() { +// +// @Override +// public void onFailure(Throwable caught) { +// Window.alert(caught.getMessage()); +// theTab.clear(); +// theTab.setIcon(IconType.WARNING_SIGN); +// theTab.add(new HTML(caught.getMessage())); +// +// } +// +// @Override +// public void onSuccess(ConcessioneDV result) { +// GWT.log("Showing: "+result); +// mainPanel.renderProductIntoTab(theTab, result); +// +// } +// }); +// }else +// Window.alert("No product id found"); +// } +// +// } +// } +// +// } +// }); + eventBus.addHandler(ShowDetailsEvent.TYPE, new ShowDetailsEventHandler() { @Override public void onShowDetails(ShowDetailsEvent showDetailsEvent) { GWT.log("Fired event: "+showDetailsEvent); - FeatureRow fRow = showDetailsEvent.getFeatureRow(); - if(fRow!=null) { - if(showDetailsEvent.getProductType().equals(ProductType.CONCESSIONE)) { - List productIds = fRow.getMapProperties().get("product_id"); - if(productIds!=null && productIds.size()>0) { - long id = Long.parseLong(productIds.get(0)); - String tabName = "Dettagli Prodotto"; - List listName = fRow.getMapProperties().get("nome"); - if(listName!=null && listName.size()>0) { - tabName = listName.get(0); - } - - boolean found = mainPanel.selectTabForProductId(id); - GWT.log("Product with id: "+id+" found? "+found); - if(!found) { - - final Tab theTab = mainPanel.addAsTab(tabName, true, null); - GeoportalDataViewerServiceAsync.Util.getInstance().getConcessioneForId(id, new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - Window.alert(caught.getMessage()); - theTab.clear(); - theTab.setIcon(IconType.WARNING_SIGN); - theTab.add(new HTML(caught.getMessage())); - - } - - @Override - public void onSuccess(ConcessioneDV result) { - GWT.log("Showing: "+result); - mainPanel.renderProductIntoTab(theTab, result); - - } - }); - }else - Window.alert("No product id found"); - } - - } + + Long id = showDetailsEvent.getGeonaID(); + + if(id==null) { + Window.alert("Item Id not found"); + return; } + String tabName = showDetailsEvent.getItemName()==null?"Dettagli Prodotto":showDetailsEvent.getItemName(); + + boolean found = mainPanel.selectTabForProductId(id); + GWT.log("Product with id: "+id+" found? "+found); + if(!found) { + + if(showDetailsEvent.getGeonaItemType().equalsIgnoreCase("Concessione")) { + + final Tab theTab = mainPanel.addAsTab(tabName, true, null); + GeoportalDataViewerServiceAsync.Util.getInstance().getConcessioneForId(id, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + theTab.clear(); + theTab.setIcon(IconType.WARNING_SIGN); + theTab.add(new HTML(caught.getMessage())); + + } + + @Override + public void onSuccess(ConcessioneDV result) { + GWT.log("Showing: "+result); + mainPanel.renderProductIntoTab(theTab, result); + + } + }); + } + } } + }); } 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 decc1eb..8c9cee2 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 @@ -10,7 +10,8 @@ public class GeoportalDataViewerConstants { public static final String MAP_DIV = "map"; public static final String GET_WMS_PARAMETER = "wmsrequest"; - public static final String GET_DISPLAY_LAYER_TYPE = "dlt"; + public static final String GET_GEONA_ITEM_TYPE = "git"; + public static final String GET_GEONA_ITEM_ID = "gid"; 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(); 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 147407b..a0c3ce8 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 @@ -5,7 +5,7 @@ import java.util.List; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataObject; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataViewerProfile; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; -import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; @@ -20,7 +20,7 @@ public interface GeoportalDataViewerService extends RemoteService { GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception; - List getDataResult(List layerItems, String mapSrsName, BoundsMap mapBBOX, + List getDataResult(List layerObjects, String mapSrsName, BoundsMap mapBBOX, int maxWFSFeature, double zoomLevel); ConcessioneDV getConcessioneForId(Long id) 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 805c51f..6b7123d 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 @@ -5,7 +5,7 @@ import java.util.List; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataObject; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataViewerProfile; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; -import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; @@ -33,7 +33,7 @@ public interface GeoportalDataViewerServiceAsync { void parseWmsRequest(String wmsRequest, String layerName, AsyncCallback callback); - void getDataResult(List layerItems, String mapSrsName, BoundsMap mapBBOX, int maxWFSFeature, double zoomLevel, + void getDataResult(List layerObjects, String mapSrsName, BoundsMap mapBBOX, int maxWFSFeature, double zoomLevel, AsyncCallback> callback); void getConcessioneForId(Long id, 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 index 56d61de..4c1ca20 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/LayerManager.java @@ -15,10 +15,10 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEven 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.GeoNaDataObject; -import org.gcube.portlets.user.geoportaldataviewer.shared.ProductType; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.ZAxis; @@ -55,9 +55,8 @@ public class LayerManager { /** The ol map. */ private OpenLayerOSM olMap; - - /** The layer items. */ - private List layerItems = new ArrayList(); + + private List layerObjects = new ArrayList(); private HandlerManager eventBus = new HandlerManager(""); @@ -88,9 +87,9 @@ public class LayerManager { GeoQuery selectDataInfo = queryEvent.getGeoQuery(); GWT.log("("+selectDataInfo.getX1()+","+selectDataInfo.getY1()+")("+selectDataInfo.getX2()+","+selectDataInfo.getY2()+")"); - for (LayerItem layerItem : layerItems){ + for (LayerObject layerObj : layerObjects){ //TODO - isLayerVisible(layerItem); + isLayerVisible(layerObj.getLayerItem()); } @@ -126,29 +125,30 @@ public class LayerManager { GWT.log("Bounds is: "+mapBBOX); - GeoportalDataViewerServiceAsync.Util.getInstance().getDataResult(layerItems, olMap.getProjectionCode(), mapBBOX, GeoportalDataViewerConstants.MAX_WFS_FEATURES, olMap.getCurrentZoomLevel(), new AsyncCallback>() { + GeoportalDataViewerServiceAsync.Util.getInstance().getDataResult(layerObjects, olMap.getProjectionCode(), mapBBOX, GeoportalDataViewerConstants.MAX_WFS_FEATURES, olMap.getCurrentZoomLevel(), new AsyncCallback>() { @Override public void onFailure(Throwable caught) { } @Override - public void onSuccess(List result) { + public void onSuccess(List listGeonaDataObjects) { - if(result==null || result.isEmpty()) + GWT.log("GeoNaDataObject's: "+listGeonaDataObjects); + + if(listGeonaDataObjects==null || listGeonaDataObjects.isEmpty()) return; - - GWT.log("Data result: "+result); - + FlexTable flex = new FlexTable(); flex.setCellPadding(1); flex.setCellSpacing(1); flex.getElement().addClassName("popup-table"); boolean featureFound = false; FeatureRow feature = null; - for (GeoNaDataObject geoNaDataObject : result) { + for (GeoNaDataObject geoNaDataObject : listGeonaDataObjects) { List features = geoNaDataObject.getFeatures(); - + + //USING ONLY THE FIRST FEATURE IN THE LIST if(features!=null && features.size()>0) { feature = features.get(0); Map> entries = features.get(0).getMapProperties(); @@ -165,93 +165,99 @@ public class LayerManager { } featureFound = true; - break; //Only the first one + //break; //Only the first one } - } - FeatureRow theFeature = feature; - Button button = null; - if(!featureFound) { - flex.setHTML(0, 0, new HTML("No data available").toString()); - }else { - button = new Button("Open Details"); - button.getElement().setId("open-details"); - button.setType(ButtonType.LINK); - } - - VerticalPanel vpPanel = new VerticalPanel(); - vpPanel.add(flex); - - if(button!=null) { - vpPanel.add(button); - button.setType(ButtonType.LINK); - button.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - applicationBus.fireEvent(new ShowDetailsEvent(ProductType.CONCESSIONE, theFeature)); + + GWT.log("The selected Feature is: "+feature); + FeatureRow theFeature = feature; + Button button = null; + if(!featureFound) { + flex.setHTML(0, 0, new HTML("No data available").toString()); + }else { + button = new Button("Open Details"); + button.getElement().setId("open-details"); + button.setType(ButtonType.LINK); + } + + VerticalPanel vpPanel = new VerticalPanel(); + vpPanel.add(flex); + + if(button!=null) { + vpPanel.add(button); + button.setType(ButtonType.LINK); + button.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + ShowDetailsEvent toEvent = parseGeonaReferences(geoNaDataObject.getSourceLayerObject().getItemType(), theFeature); + applicationBus.fireEvent(toEvent); + + } + }); + } + + olMap.showPopup(vpPanel.toString(), queryEvent.getoLCoordinate()); + + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + Element buttonElement = DOM.getElementById("open-details"); + Event.sinkEvents(buttonElement, Event.ONCLICK); + Event.setEventListener(buttonElement, new EventListener() { + + @Override + public void onBrowserEvent(Event event) { + if(Event.ONCLICK == event.getTypeInt()) { + ShowDetailsEvent toEvent = parseGeonaReferences(geoNaDataObject.getSourceLayerObject().getItemType(), theFeature); + applicationBus.fireEvent(toEvent); + } + } + }); } }); } - - olMap.showPopup(vpPanel.toString(), queryEvent.getoLCoordinate()); - - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - - @Override - public void execute() { - Element buttonElement = DOM.getElementById("open-details"); - Event.sinkEvents(buttonElement, Event.ONCLICK); - Event.setEventListener(buttonElement, new EventListener() { - - @Override - public void onBrowserEvent(Event event) { - if(Event.ONCLICK == event.getTypeInt()) { - applicationBus.fireEvent(new ShowDetailsEvent(ProductType.CONCESSIONE, theFeature)); - } - } - }); - } - }); - } }); } } }); } - - - /** - * 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); - } + + private ShowDetailsEvent parseGeonaReferences(String itemType, FeatureRow fRow) { + if(fRow==null) + return null; + + List productIds = fRow.getMapProperties().get("product_id"); + if(productIds!=null && productIds.size()>0) { + long id = Long.parseLong(productIds.get(0)); + String itemName = "Dettagli Prodotto"; + List listName = fRow.getMapProperties().get("nome"); + if(listName!=null && listName.size()>0) { + itemName = listName.get(0); + } + + return new ShowDetailsEvent(itemType, id, itemName, fRow); + } + + return null; + } + + /** - * Adds the layer by wms request. + * Adds the layer. * + * @param geonaItemType the geona item type * @param layerTitle the layer title * @param layerName the layer name - * @param wmsRequest the wms request + * @param wmsLink the wms link * @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) { + public void addLayer(final String geonaItemType, final String layerTitle, final String layerName, final String wmsLink, final boolean isBase,final boolean displayInLayerSwitcher, final String UUID, final boolean onTop) { // final LayoutContainer westPanel = (LayoutContainer) layersPanel.getParent(); // @@ -262,7 +268,7 @@ public class LayerManager { final LayerType featureType = isBase?LayerType.RASTER_BASELAYER:LayerType.FEATURE_TYPE; // Info.display("Adding Layer", layerName); - GeoportalDataViewerServiceAsync.Util.getInstance().parseWmsRequest(wmsRequest, layerName, new AsyncCallback() { + GeoportalDataViewerServiceAsync.Util.getInstance().parseWmsRequest(wmsLink, layerName, new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -271,40 +277,24 @@ public class LayerManager { } @Override - public void onSuccess(GeoInformationForWMSRequest result) { + public void onSuccess(GeoInformationForWMSRequest geoInfoWMS) { - GWT.log("Add Layer By WMS: "+result.getWmsRequest() + ", and isNCWMS? "+result.isNcWMS()); - addLayerByWms(featureType, layerTitle, result.getLayerName(), result.getWmsRequest(), result.getBaseWmsServiceHost(), true, isBase, displayInLayerSwitcher, (ArrayList) result.getStyles().getGeoStyles(), result.getWmsRequest(), false, result.getMapWMSNoStandard(), result.isNcWMS(), UUID, result.getZAxis()); + GWT.log("Parsed WMS Request returned: "+geoInfoWMS); + //ddLayerByWms(featureType, layerTitle, result.getLayerName(), result.getWmsRequest(), result.getBaseWmsServiceHost(), true, isBase, displayInLayerSwitcher, (ArrayList) result.getStyles().getGeoStyles(), result.getWmsRequest(), false, result.getMapWMSNoStandard(), result.isNcWMS(), UUID, result.getZAxis()); + LayerItem layerItem = toLayerItem(featureType, layerTitle, geoInfoWMS.getLayerName(), geoInfoWMS.getWmsRequest(), geoInfoWMS.getBaseWmsServiceHost(), true, isBase, displayInLayerSwitcher, (ArrayList) geoInfoWMS.getStyles().getGeoStyles(), geoInfoWMS.getWmsRequest(), false, geoInfoWMS.getMapWMSNoStandard(), geoInfoWMS.isNcWMS(), UUID, geoInfoWMS.getZAxis()); + LayerObject lo = new LayerObject(); + lo.setLayerItem(layerItem); + lo.setItemType(geonaItemType); + layerObjects.add(lo); + olMap.addWMSLayer(layerItem.getMapServerHost(), layerItem.getName()); } }); } -// public void addLayerByType(String layerType) { -// -// final boolean isBase = false; -// final LayerType featureType = isBase?LayerType.RASTER_BASELAYER:LayerType.FEATURE_TYPE; -// boolean displayInLayerSwitcher = false; -// GeoportalDataViewerServiceAsync.Util.getInstance().getLayerForType(layerType, 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, result.getLayerName(), result.getLayerName(), result.getWmsRequest(), result.getBaseWmsServiceHost(), true, isBase, displayInLayerSwitcher, (ArrayList) result.getStyles().getGeoStyles(), result.getWmsRequest(), false, result.getMapWMSNoStandard(), result.isNcWMS(), null, result.getZAxis()); -// -// } -// }); -// -// } /** - * Adds the layer by wms. + * To layer item. * * @param layerType the layer type * @param layerTitle the layer title @@ -321,8 +311,9 @@ public class LayerManager { * @param isNcWms the is nc wms * @param UUID the uuid * @param zAxis the z axis + * @return the layer item */ - private void addLayerByWms(LayerType layerType, String layerTitle, String layerName, String layerURL, String mapServerHost, boolean isExternal, boolean isBase, boolean displayInLayerSwitcher, ArrayList styles, String wmsLink, boolean onTop, HashMap wmsNotStandardParams, boolean isNcWms, String UUID, ZAxis zAxis) { + private LayerItem toLayerItem(LayerType layerType, String layerTitle, String layerName, String layerURL, String mapServerHost, boolean isExternal, boolean isBase, boolean displayInLayerSwitcher, ArrayList styles, String wmsLink, boolean onTop, HashMap wmsNotStandardParams, boolean isNcWms, String UUID, ZAxis zAxis) { // GWT.log("Add addLayerByWms 1"); LayerItem layerItem = new LayerItem(); @@ -376,15 +367,10 @@ public class LayerManager { } } GWT.log("Built layer: "+layerItem); - layerItems.add(layerItem); - olMap.addWMSLayer(layerItem.getMapServerHost(), layerName); - -// openLayersMap.addLayerItemByWms(l, displayInLayerSwitcher); -// layersPanel.addLayerItems(layerItems, onTop); -// layersPanel.updateLayersOrder(); + return layerItem; } - + /** * Checks if is layer visible. * @@ -414,10 +400,4 @@ public class LayerManager { return eventBus; } - - - - - - } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowDetailsEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowDetailsEvent.java index 124160c..e231c23 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowDetailsEvent.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowDetailsEvent.java @@ -1,29 +1,38 @@ package org.gcube.portlets.user.geoportaldataviewer.client.events; -import org.gcube.portlets.user.geoportaldataviewer.shared.ProductType; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow; import com.google.gwt.event.shared.GwtEvent; + /** - * The Class QueryDataEvent. + * The Class ShowDetailsEvent. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Oct 29, 2020 + * Nov 13, 2020 */ public class ShowDetailsEvent extends GwtEvent { public static Type TYPE = new Type(); - private ProductType productType; + private String geonaItemType; private FeatureRow featureRow; + private Long geonaID; + private String itemName; + /** - * Instantiates a new table row selected event. - * @param coordinate + * Instantiates a new show details event. + * + * @param geonaItemType the geona item type + * @param geonaID the geona ID + * @param itemName the item name + * @param featureRow the feature row */ - public ShowDetailsEvent(ProductType productType, FeatureRow row) { - this.productType = productType; - this.featureRow = row; + public ShowDetailsEvent(String geonaItemType, long geonaID, String itemName, FeatureRow featureRow) { + this.geonaItemType = geonaItemType; + this.geonaID = geonaID; + this.itemName = itemName; + this.featureRow = featureRow; } @@ -47,12 +56,53 @@ public class ShowDetailsEvent extends GwtEvent { handler.onShowDetails(this); } - - public ProductType getProductType() { - return productType; + + /** + * Gets the geona item type. + * + * @return the geona item type + */ + public String getGeonaItemType() { + return geonaItemType; } - + + /** + * Gets the feature row. + * + * @return the feature row + */ public FeatureRow getFeatureRow() { return featureRow; } + + /** + * Gets the geona ID. + * + * @return the geona ID + */ + public Long getGeonaID() { + return geonaID; + } + + /** + * Gets the item name. + * + * @return the item name + */ + public String getItemName() { + return itemName; + } + + /** + * Sets the item name. + * + * @param itemName the new item name + */ + public void setItemName(String itemName) { + this.itemName = itemName; + } + + + + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java index 454fa2a..67be2fe 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java @@ -196,6 +196,7 @@ public class OpenLayerOSM { public void showPopup(String html, Coordinate coordinate) { + GWT.log("Showing popup on: "+coordinate); if(popupOverlay==null) { Element elPopup = DOM.getElementById("popup"); elPopup.getStyle().setVisibility(Visibility.VISIBLE); 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 0324ada..7a31720 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,5 +1,6 @@ package org.gcube.portlets.user.geoportaldataviewer.server; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,6 +18,8 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataObject; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataViewerProfile; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.Styles; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.ZAxis; @@ -103,30 +106,35 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme throw new Exception(msg); } } - + /** * Gets the data result. * - * @param layerItems the layer items + * @param layerObjects the layer objects * @param mapSrsName the map srs name * @param selectBBOX the select BBOX * @param maxWFSFeature the max WFS feature * @param zoomLevel the zoom level * @return the data result */ - /* - * (non-Javadoc) - * - * @see - * org.gcube.portlets.user.gisviewer.client.GisViewerService#getDataResult(java. - * util.List, java.lang.String, int) - */ @Override - public List getDataResult(List layerItems, String mapSrsName, BoundsMap selectBBOX, + public List getDataResult(List layerObjects, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature, double zoomLevel) { LOG.info("getDataResult called"); - List result = FeatureParser.getDataResults(layerItems, mapSrsName, selectBBOX, maxWFSFeature); - return result; + + List listDAO = new ArrayList(layerObjects.size()); + + for (LayerObject layerObject : layerObjects) { + GeoNaDataObject geoDAO = new GeoNaDataObject(); + List features = FeatureParser.getWFSFeatures(layerObject.getLayerItem(), mapSrsName, selectBBOX, maxWFSFeature); + LOG.debug("For layer name: "+layerObject.getLayerItem().getName() +" got features: "+features); + geoDAO.setFeatures(features); + geoDAO.setSourceLayerObject(layerObject); + LOG.info("Fo layer name: "+layerObject.getLayerItem().getName() +" got "+features.size()+" feature/s"); + listDAO.add(geoDAO); + } + LOG.info("returning "+listDAO+" geona data objects"); + return listDAO; } /** @@ -227,7 +235,6 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme * Gets the layer for type. * * @param layerType the layer type - * @param fallbackOnError the fallback on error * @return the layer for type * @throws Exception the exception */ @@ -258,6 +265,12 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme } + /** + * Gets the geo na data view profile. + * + * @return the geo na data view profile + * @throws Exception the exception + */ @Override public GeoNaDataViewerProfile getGeoNaDataViewProfile() throws Exception{ LOG.info("Called getAvailableLayers"); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/FeatureParser.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/FeatureParser.java index 3e83444..cd4b551 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/FeatureParser.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/gis/FeatureParser.java @@ -17,7 +17,6 @@ import java.util.Map; import org.apache.commons.io.IOUtils; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.server.util.URLParserUtil; -import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureGeometry; @@ -29,48 +28,37 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; - - /** * The Class FeatureParser. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Oct 29, 2020 + * Nov 13, 2020 */ public class FeatureParser { private static Logger LOG = LoggerFactory.getLogger(FeatureParser.class); - /** - * Gets the data results. + * Gets the WFS features. * - * @param layerItems the layer items + * @param layerItem the layer item * @param mapSrsName the map srs name * @param selectBBOX the select BBOX * @param maxWFSFeature the max WFS feature - * @return the data results + * @return the WFS features */ - public static List getDataResults(List layerItems, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature) { + public static List getWFSFeatures(LayerItem layerItem, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature) { if(maxWFSFeature<0) { maxWFSFeature = GeoportalDataViewerConstants.MAX_WFS_FEATURES; } - - List listGeonaDO = new ArrayList(); - //IF WFS IS AVAILABLE USE WFS REQUEST OTHERWHISE TRY TO USE WPS SERVICE - for (LayerItem layerItem : layerItems){ - List rows = getWFSFeatureProperties(layerItem, mapSrsName, selectBBOX, maxWFSFeature); - GeoNaDataObject gdo = new GeoNaDataObject(); - gdo.setLayerItem(layerItem); - gdo.setFeatures(rows); - listGeonaDO.add(gdo); - } - return listGeonaDO; + return getWFSFeatureProperties(layerItem, mapSrsName, selectBBOX, maxWFSFeature); } + + /** * Gets the WFS feature properties. * diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/GeoNaDataObject.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/GeoNaDataObject.java index 290dc68..3c71280 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/GeoNaDataObject.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/GeoNaDataObject.java @@ -3,9 +3,8 @@ package org.gcube.portlets.user.geoportaldataviewer.shared; import java.io.Serializable; import java.util.List; -import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; +import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wfs.FeatureRow; -import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; /** @@ -13,19 +12,16 @@ import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Oct 29, 2020 + * Nov 13, 2020 */ public class GeoNaDataObject implements Serializable{ /** * */ - private static final long serialVersionUID = 5566069859060851625L; - /** The form data entry fields. */ + private static final long serialVersionUID = 3513120677727206958L; private List features; - private ProductType productType; - private LayerItem layerItem; - private ConcessioneDV concessioneDV; + private LayerObject sourceLayerObject; /** * Instantiates a new geo na data object. @@ -34,52 +30,56 @@ public class GeoNaDataObject implements Serializable{ } + /** + * Gets the features. + * + * @return the features + */ public List getFeatures() { return features; } + /** + * Sets the features. + * + * @param features the new features + */ public void setFeatures(List features) { this.features = features; } - public ProductType getProductType() { - return productType; + /** + * Gets the source layer object. + * + * @return the source layer object + */ + public LayerObject getSourceLayerObject() { + return sourceLayerObject; } - public void setProductType(ProductType productType) { - this.productType = productType; - } - - public LayerItem getLayerItem() { - return layerItem; - } - - public void setLayerItem(LayerItem layerItem) { - this.layerItem = layerItem; - } - - public ConcessioneDV getConcessioneDV() { - return concessioneDV; - } - - public void setConcessioneDV(ConcessioneDV concessioneDV) { - this.concessioneDV = concessioneDV; + /** + * Sets the source layer object. + * + * @param sourceLayerObject the new source layer object + */ + public void setSourceLayerObject(LayerObject sourceLayerObject) { + this.sourceLayerObject = sourceLayerObject; } + /** + * To string. + * + * @return the string + */ @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("GeoNaDataObject [features="); builder.append(features); - builder.append(", productType="); - builder.append(productType); - builder.append(", layerItem="); - builder.append(layerItem); - builder.append(", concessioneDV="); - builder.append(concessioneDV); + builder.append(", sourceLayerObject="); + builder.append(sourceLayerObject); builder.append("]"); return builder.toString(); } - } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ProductType.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ProductType.java deleted file mode 100644 index f28f37b..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ProductType.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.gcube.portlets.user.geoportaldataviewer.shared; - -public enum ProductType { - - CONCESSIONE - -} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerObject.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerObject.java new file mode 100644 index 0000000..de25d4c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/gis/LayerObject.java @@ -0,0 +1,82 @@ +package org.gcube.portlets.user.geoportaldataviewer.shared.gis; + +import java.io.Serializable; + + +/** + * The Class LayerObject. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Nov 13, 2020 + */ +public class LayerObject implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -2282478701630148774L; + /* This is the layer/product type. E.g. Concessione */ + private String itemType; + private LayerItem layerItem; + + /** + * Instantiates a new layer object. + */ + public LayerObject() { + // TODO Auto-generated constructor stub + } + + /** + * Gets the item type. + * + * @return the item type + */ + public String getItemType() { + return itemType; + } + + /** + * Sets the item type. + * + * @param itemType the new item type + */ + public void setItemType(String itemType) { + this.itemType = itemType; + } + + /** + * Gets the layer item. + * + * @return the layer item + */ + public LayerItem getLayerItem() { + return layerItem; + } + + /** + * Sets the layer item. + * + * @param layerItem the new layer item + */ + public void setLayerItem(LayerItem layerItem) { + this.layerItem = layerItem; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("LayerObject [itemType="); + builder.append(itemType); + builder.append(", layerItem="); + builder.append(layerItem); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/products/model/RecordDV.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/products/model/RecordDV.java index 7d5c0d9..aac4991 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/products/model/RecordDV.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/products/model/RecordDV.java @@ -11,7 +11,7 @@ import com.google.gwt.user.client.rpc.IsSerializable; * * Nov 2, 2020 */ -public class RecordDV implements Serializable, IsSerializable { +public abstract class RecordDV implements Serializable, IsSerializable { /**