diff --git a/pom.xml b/pom.xml index 1a006b9..ba81118 100644 --- a/pom.xml +++ b/pom.xml @@ -198,7 +198,6 @@ com.google.guava guava - com.google.code.gson gson 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 174b71b..7b88bab 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 @@ -7,6 +7,7 @@ import java.util.Set; import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile; import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences; import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; @@ -403,8 +404,24 @@ public class GeoportalDataViewer implements EntryPoint { if (record != null) { this.cancel(); GWT.log("cancelled timer"); - performWFSQueryOnCentroid(record.getTheProjectDV().getId(), - record.getCentroidLong(), record.getCentroidLat()); + GeoJSON spatialReference = record.getTheProjectDV().getSpatialReference(); + if (spatialReference == null) { + GWT.log("No spatial reference found, cancelling timer"); + this.cancel(); + + } + try { + ExtentWrapped ew = new ExtentWrapped(spatialReference.getBbox().getMinX(), + spatialReference.getBbox().getMinY(), + spatialReference.getBbox().getMaxX(), + spatialReference.getBbox().getMaxY()); + + Coordinate centerCoordinate = ew.getCenter(); + performWFSQueryOnCentroid(record.getTheProjectDV().getId(), + centerCoordinate.getX(), centerCoordinate.getY()); + } catch (Exception e) { + GWT.log("Error on calculating center of the extent " + e.getMessage()); + } } if (attempt > MAX_RETRY) { @@ -562,7 +579,7 @@ public class GeoportalDataViewer implements EntryPoint { List result = searchPerformedEvent.getData(); if (result != null && result.size() > 0) { - String cqlFilter = GeoportalDataViewerConstants.PROJECT_ID_KEY_FEATURE+" IN("; + String cqlFilter = GeoportalDataViewerConstants.PROJECT_ID_KEY_FEATURE + " IN("; for (DocumentDV documentDV : result) { cqlFilter += "'" + documentDV.getProjectID() + "',"; } @@ -602,7 +619,7 @@ public class GeoportalDataViewer implements EntryPoint { // }-*/; private void performWFSQueryOnCentroid(String projectID, Double centroidLong, Double centroidLat) { - GWT.log("Perform performWFSQueryOnCentroid: "+projectID+ " long: "+centroidLong + ", lat: "+centroidLat); + GWT.log("Perform performWFSQueryOnCentroid: " + projectID + " long: " + centroidLong + ", lat: " + centroidLat); if (projectID != null) { Double x = centroidLong; Double y = centroidLat; diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/MapUtils.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/MapUtils.java index 08406ff..4940ed0 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/MapUtils.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/MapUtils.java @@ -1,5 +1,9 @@ package org.gcube.portlets.user.geoportaldataviewer.client.gis; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; + +import com.google.gwt.core.client.GWT; + import ol.Collection; import ol.Coordinate; import ol.control.Attribution; @@ -10,50 +14,46 @@ import ol.control.ZoomSlider; import ol.geom.LineString; import ol.proj.Projection; - /** * The Class MapUtils. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Nov 12, 2020 + * Nov 12, 2020 */ public final class MapUtils { + /** + * Creates some default controls and adds it to the collection. + * + * @param controls collection with controls + */ + public static void addDefaultControls(final Collection controls) { - /** - * Creates some default controls and adds it to the collection. - * - * @param controls collection with controls - */ - public static void addDefaultControls(final Collection controls) { + controls.push(new FullScreen()); + controls.push(new ZoomSlider()); + MousePosition mousePosition = new MousePosition(); + mousePosition.setCoordinateFormat(Coordinate.createStringXY(5)); + controls.push(mousePosition); - controls.push(new FullScreen()); - controls.push(new ZoomSlider()); - MousePosition mousePosition = new MousePosition(); - mousePosition.setCoordinateFormat(Coordinate.createStringXY(5)); - controls.push(mousePosition); - Attribution attribution = new Attribution(); attribution.setCollapsed(true); controls.push(attribution); - //controls.push(new ZoomToExtent()); + // controls.push(new ZoomToExtent()); + + } - } - /** * Transform coordiante. * * @param centerCoordinate the center coordinate - * @param source the source - * @param target the target + * @param source the source + * @param target the target * @return the coordinate */ public static Coordinate transformCoordiante(Coordinate centerCoordinate, String source, String target) { return Projection.transform(centerCoordinate, source, target); } - - /** * Distance between centroid. @@ -63,10 +63,9 @@ public final class MapUtils { * @return the long */ public static long distanceBetweenCentroid(ExtentWrapped ex1, ExtentWrapped ex2) { - return distanceBetween(ex1.getCenter(),ex2.getCenter()); + return distanceBetween(ex1.getCenter(), ex2.getCenter()); } - - + /** * Distance between. * @@ -84,15 +83,43 @@ public final class MapUtils { // GWT.log("Line length is: "+ls); return Math.round(ls.getLength() * 100) / 100; } - - + /** * Reverse coordinate. * * @param coord the coord * @return the coordinate */ - public static Coordinate reverseCoordinate(Coordinate coord){ + public static Coordinate reverseCoordinate(Coordinate coord) { return new Coordinate(coord.getY(), coord.getX()); } + + /** + * Geo JSONT to B box center. + * + * @param spatialReference the spatial reference + * @param transforFrom the transfor from + * @param transformTo the transform to + * @return the coordinate + */ + public static Coordinate geoJSONTToBBoxCenter(GeoJSON spatialReference, String transforFrom, String transformTo) { + + try { + if (spatialReference != null) { + ExtentWrapped ew = new ExtentWrapped(spatialReference.getBbox().getMinX(), + spatialReference.getBbox().getMinY(), spatialReference.getBbox().getMaxX(), + spatialReference.getBbox().getMaxY()); + + Coordinate center = ew.getCenter(); + if (transforFrom != null && transformTo != null) + center = transformCoordiante(center, transforFrom, transformTo); + + return center; + } + } catch (Exception e) { + GWT.log("geoJSONTToBBoxCenter error: " + e.getMessage()); + } + + return null; + } } 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 8301077..dd61c78 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 @@ -196,13 +196,18 @@ public class GeonaDataViewMainPanel extends Composite { //navLink.setText(ucd.getName()); navLink.addClickHandler(new ClickHandler() { + private SearchFacilityUI currentSearchFacility; + @Override public void onClick(ClickEvent event) { + if(this.currentSearchFacility!=null) + this.currentSearchFacility.resetCurrentSearch(); + searchFacilityPanel.clear(); - SearchFacilityUI searchFacility = new SearchFacilityUI(ucd.getProfileID(), applicationBus, sortByFields, searchByFields, + this.currentSearchFacility = new SearchFacilityUI(ucd.getProfileID(), applicationBus, sortByFields, searchByFields, initialSortFilter); - searchFacilityPanel.add(searchFacility); - searchFacility.setSearchButton(searchFacilityButton); + searchFacilityPanel.add(currentSearchFacility); + currentSearchFacility.setSearchButton(searchFacilityButton); } }); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/ProjectViewer.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/ProjectViewer.java index 8317031..ea8a13c 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/ProjectViewer.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/project/ProjectViewer.java @@ -3,12 +3,15 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui.cms.project; import java.util.List; import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; import org.gcube.application.geoportalcommon.shared.geoportal.project.RelationshipDV; import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView; import org.gcube.application.geoportalcommon.shared.geoportal.view.SectionView; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync; +import org.gcube.portlets.user.geoportaldataviewer.client.OLUtil; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped; import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils; import org.gcube.portlets.user.geoportaldataviewer.client.ui.ModalWindow; import org.gcube.portlets.user.geoportaldataviewer.client.ui.dialogs.DialogShareableLink; @@ -56,7 +59,7 @@ public class ProjectViewer extends Composite { @UiField Button expandButton; - + @UiField Button relationshipsButton; @@ -81,8 +84,8 @@ public class ProjectViewer extends Composite { this(geoportalItemRefs, projectView, true, true); } - public ProjectViewer(GeoportalItemReferences geoportalItemRefs, final ProjectView projectView, boolean viewImageButtonVisible, - boolean openImageButtonVisible) { + public ProjectViewer(GeoportalItemReferences geoportalItemRefs, final ProjectView projectView, + boolean viewImageButtonVisible, boolean openImageButtonVisible) { this(); GWT.log("Rendering " + projectView.getTheProjectDV().getId()); this.theProjectView = projectView; @@ -92,7 +95,7 @@ public class ProjectViewer extends Composite { final String theTitle = projectView.getTheProjectDV().getProfileName() != null ? projectView.getTheProjectDV().getProfileName() - : "Project ID: "+projectView.getTheProjectDV().getId(); + : "Project ID: " + projectView.getTheProjectDV().getId(); headerPanel.add(new HTML(theTitle)); @@ -118,7 +121,8 @@ public class ProjectViewer extends Composite { @Override public void onClick(ClickEvent event) { - ProjectViewer cv = new ProjectViewer(geoportalItemReferences, theProjectView, false, openImageButtonVisible); + ProjectViewer cv = new ProjectViewer(geoportalItemReferences, theProjectView, false, + openImageButtonVisible); cv.setExpandViewButtonVisible(false); int width = Window.getClientWidth() * 75 / 100; int height = Window.getClientHeight() * 70 / 100; @@ -130,17 +134,16 @@ public class ProjectViewer extends Composite { } }); - + relationshipsButton.setType(ButtonType.LINK); relationshipsButton.setIcon(IconType.LINK); relationshipsButton.setTitle("Show Relationships of this Project"); - + List relationships = projectView.getTheProjectDV().getRelationships(); - if(relationships!=null && relationships.size()>0) { + if (relationships != null && relationships.size() > 0) { relationshipsButton.setVisible(true); - }else + } else relationshipsButton.setVisible(false); - GeoportalDataViewerServiceAsync.Util.getInstance().getMyLogin(new AsyncCallback() { @@ -170,19 +173,21 @@ public class ProjectViewer extends Composite { MapView mapView = new MapView(transformedCenterCoordinate, GeoportalDataViewerConstants.LIGHT_MAP_ITALY_FIT_ZOOM_ON, "70%", "300px"); - if (theProjectView != null && theProjectView.getCentroidLat() != null - && theProjectView.getCentroidLong() != null) { - Coordinate coord = new Coordinate(theProjectView.getCentroidLong(), theProjectView.getCentroidLat()); - Coordinate transfCoord = MapUtils.transformCoordiante(coord, MAP_PROJECTION.EPSG_4326.getName(), + if (theProjectView != null && theProjectView.getTheProjectDV() != null) { + + GeoJSON spatialReference = theProjectView.getTheProjectDV().getSpatialReference(); + Coordinate transfCoord = MapUtils.geoJSONTToBBoxCenter(spatialReference, MAP_PROJECTION.EPSG_4326.getName(), MAP_PROJECTION.EPSG_3857.getName()); - // Coordinate invertedCoordinate = MapUtils.reverseCoordinate(coord); - boolean authenticatedUser = myLogin != null ? true : false; - mapView.addMarker(transfCoord, authenticatedUser); - centroidPanel.add(mapView); + + if (transfCoord != null) { + boolean authenticatedUser = myLogin != null ? true : false; + mapView.addMarker(transfCoord, authenticatedUser); + centroidPanel.add(mapView); + } } else if (theProjectView != null) { GeoportalDataViewerConstants - .printJs("I cannot add centroid as maker one or both coordinates are null. Lat: " - + theProjectView.getCentroidLong() + ", Long:" + theProjectView.getCentroidLat()); + .printJs("I cannot add centroid as maker one or both coordinates are null. Lat: " + theProjectView + + ", Long:" + theProjectView); } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/search/SearchFacilityUI.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/search/SearchFacilityUI.java index da9df0a..5029ee1 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/search/SearchFacilityUI.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/cms/search/SearchFacilityUI.java @@ -15,10 +15,13 @@ import org.gcube.application.geoportalcommon.shared.WhereClause; import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV; import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync; +import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION; import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEvent; +import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils; import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon; import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil; @@ -50,6 +53,8 @@ import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; +import ol.Coordinate; + /** * The Class SearchFacilityUI. * @@ -224,17 +229,21 @@ public class SearchFacilityUI extends Composite { @Override public void onClick(ClickEvent event) { - searchField.setText(""); - resetSearch.setVisible(false); - panelResults.clear(); - latestResult = null; - appManagerBus.fireEvent(new SearchPerformedEvent(null, true)); - setSearchEnabled(false); + resetCurrentSearch(); } }); } + public void resetCurrentSearch() { + searchField.setText(""); + resetSearch.setVisible(false); + panelResults.clear(); + latestResult = null; + appManagerBus.fireEvent(new SearchPerformedEvent(null, true)); + setSearchEnabled(false); + } + /** * Sets the search enabled. * @@ -307,28 +316,42 @@ public class SearchFacilityUI extends Composite { i = 1; for (DocumentDV documentDV : result.getData()) { - - ResultDocumentDV resultDoc = (ResultDocumentDV) documentDV; + + ResultDocumentDV resultDoc = (ResultDocumentDV) documentDV; NavLink locateOnMap = new NavLink("Show"); - locateOnMap.setTitle("Open this project and show details"); + locateOnMap.setTitle("Locate this project on Map and show details"); locateOnMap.setIcon(IconType.MAP_MARKER); locateOnMap.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - GeoportalItemReferences gir = new GeoportalItemReferences(documentDV.getProjectID(), + GeoportalItemReferences gir = new GeoportalItemReferences(resultDoc.getProjectID(), profileID); appManagerBus.fireEvent(new ShowDetailsEvent(gir, null, null)); - appManagerBus.fireEvent(new ShowPopupOnCentroiEvent(documentDV, resultDoc.getCentroidLong(), resultDoc.getCentroidLat())); + + GeoJSON spatialReference = resultDoc.getSpatialReference(); + Coordinate transfCoord = MapUtils.geoJSONTToBBoxCenter(spatialReference, null, + null); + + Double centerLong = null; + Double centerLat = null; + + if (transfCoord != null) { + centerLong = transfCoord.getX(); + centerLat = transfCoord.getY(); + } + + appManagerBus + .fireEvent(new ShowPopupOnCentroiEvent(resultDoc, centerLong, centerLat)); } }); - //First column + // First column ft.setWidget(i, 0, locateOnMap); int j = 0; - //Other columns + // Other columns for (ItemFieldDV itemField : searchForFields) { if (j > MAX_COLUMNS_RESULTS) { @@ -336,7 +359,7 @@ public class SearchFacilityUI extends Composite { } String firstJsonField = itemField.getJsonFields().get(0); - GWT.log("The json fields is: "+firstJsonField); + GWT.log("The json fields is: " + firstJsonField); String key = firstJsonField.replace(DEFAULT_DOCUMENT_PROJECTION_NAME + ".", ""); Object value = documentDV.getDocumentAsMap().get(key); @@ -357,7 +380,7 @@ public class SearchFacilityUI extends Composite { toReturn += ""; GWT.log("Array returning: " + key + " is instance of: " + value.getClass() + " to return: " + toReturn); - + toTitle = toDisplayTitle; objectToRender = StringUtil.ellipsize(toReturn, MAX_TEXT_DIMENSION); } else { @@ -365,8 +388,8 @@ public class SearchFacilityUI extends Composite { toTitle = valueStr; objectToRender = StringUtil.ellipsize(valueStr, MAX_TEXT_DIMENSION); } - - GWT.log("The key is: "+key+" objectToRender is: "+objectToRender); + + GWT.log("The key is: " + key + " objectToRender is: " + objectToRender); HTML htmlValue = new HTML(objectToRender); htmlValue.setTitle(toTitle); ft.setWidget(i, ++j, htmlValue); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/OGCUtils.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/OGCUtils.java index 3a499d6..054d74e 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/OGCUtils.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/util/OGCUtils.java @@ -36,5 +36,8 @@ public class OGCUtils { // } } } + + + } 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 58f6762..bb57e3c 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 @@ -20,6 +20,7 @@ import org.bson.Document; import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.configuration.Index; import org.gcube.application.geoportal.common.model.document.Project; +import org.gcube.application.geoportal.common.model.document.identification.IdentificationReference; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; import org.gcube.application.geoportal.common.rest.Projects; @@ -38,9 +39,11 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ConfigurationDV; import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV; import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV; import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.PayloadDV; +import org.gcube.application.geoportalcommon.shared.geoportal.project.IdentificationReferencesTYPE; import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER; import org.gcube.application.geoportalcommon.shared.geoportal.ucd.HandlerDeclarationDV; @@ -692,18 +695,27 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme // TODO TO Check index flag should be in configuration or evaluated according to // user credentials - String toCheckFlag = "internal"; + String indexFlag = "public"; //default + + GeoportalServiceIdentityProxy gsp = getGeoportalServiceProxy(); + if(gsp.isUser()) { + indexFlag = "internal"; + LOG.info("user logged - using indexFlag: "+indexFlag); + }else if(gsp.isIAMClient()) { + indexFlag = "public"; + LOG.info("user not logged - using indexFlag: "+indexFlag); + } // TODO constant coll.setIndexes(new ArrayList()); LOG.debug("Checking if " + u.getId() + " is GIS Indexed. Index flag needed is " - + toCheckFlag); + + indexFlag); for (Index index : ucdConfig.getIndexes()) { try { IndexLayerDV toAdd = ConvertToDataValueObjectModel.convert(index); - if (toAdd.getFlag().equals(toCheckFlag)) { + if (toAdd.getFlag().equals(indexFlag)) { coll.getIndexes().add(toAdd); } } catch (Exception e) { @@ -1109,7 +1121,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme * @param maxWFSFeature the max WFS feature * @param zoomLevel the zoom level * @return the data result - * @throws Exception + * @throws Exception */ @Override public List getDataResult(List layerObjects, String mapSrsName, @@ -1120,7 +1132,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme ", mapSrsName: " + mapSrsName + ", selectBBOX: " + selectBBOX + ", maxWFSFeature: " + maxWFSFeature + ", zoomLevel: " + zoomLevel); } - + List listDAO = new ArrayList(layerObjects.size()); try { @@ -1168,7 +1180,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme // Sets only profileID and profileName into ProjectDV if (layerObject.getProjectDV() == null) { - ProjectDV projectDV = minimaProjectDV(profileID, projectID); + ProjectDV projectDV = minimalProjectDV(profileID, projectID); layerObject.setProjectDV(projectDV); } } @@ -1191,10 +1203,15 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme // Mininal set of info for displaying into popup if (layerObject.getProjectDV() == null) { - ProjectDV projectDV = minimaProjectDV(layerObject.getProfileID(), + ProjectDV projectDV = minimalProjectDV(layerObject.getProfileID(), layerObject.getProjectID()); layerObject.setProjectDV(projectDV); } + + if(layerObject.getProjectDV().getSpatialReference()==null) { + GeoJSON geoJson = spatialReference(layerObject.getProfileID(), layerObject.getProjectID()); + layerObject.getProjectDV().setSpatialReference(geoJson); + } if (layerObject.getProjectDV().getTheDocument() == null) { try { @@ -1225,19 +1242,19 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme } } - } catch (Exception e) { String erroMsg = "Error occurred on getting data results"; LOG.error(erroMsg, e); throw new Exception(erroMsg); } - + LOG.info("returning " + listDAO + " geona data objects"); return listDAO; } - private ProjectDV minimaProjectDV(String profileID, String projectID) { + private ProjectDV minimalProjectDV(String profileID, String projectID) { + LOG.trace("minimalProjectDV for profileID: " + profileID + ", projectID: " + projectID + "called"); QueryRequest request = new QueryRequest(); request.setFilter( @@ -1264,6 +1281,23 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme return projectDV; } + private GeoJSON spatialReference(String profileID, String projectID) { + LOG.trace("spatialReference for profileID: " + profileID + ", projectID: " + projectID + "called"); + try { + + List listIR = projects(profileID).build().getById(projectID) + .getIdentificationReferenceByType(IdentificationReferencesTYPE.SPATIAL_REFERENCE.getType()); + if (listIR != null && !listIR.isEmpty()) { + String _identificationReferenceString = listIR.get(0).toJson(); // one expected + LOG.debug("converting for profileID: " + profileID + ", projectID: " + projectID + "called"); + return ConvertToDataValueObjectModel.toSpatialReference(_identificationReferenceString); + } + } catch (Exception e1) { + // silent + } + return new GeoJSON(); + } + /** * Gets the entry sets document for project ID. * diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/mongoservice/GeoportalServiceIdentityProxy.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/mongoservice/GeoportalServiceIdentityProxy.java index 6d1a85f..33d9ebb 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/mongoservice/GeoportalServiceIdentityProxy.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/mongoservice/GeoportalServiceIdentityProxy.java @@ -22,6 +22,10 @@ public class GeoportalServiceIdentityProxy { private static final Logger LOG = LoggerFactory.getLogger(GeoportalServiceIdentityProxy.class); private GcubeIdentity gCubeIdentity; + + private boolean isUser = false; + + private boolean isIAMClient = false; /** * Instantiates a new concessioni mongo service proxy. @@ -42,48 +46,23 @@ public class GeoportalServiceIdentityProxy { username = null; // to be sure that is null and not empty string } if (username != null) { + isUser = true; LOG.info("User detected, using its identity"); gCubeIdentity = new UserIdentity(); } else { + isIAMClient = true; LOG.info("User not detected, using IAM Client identity"); gCubeIdentity = new IAMClientIdentity(); } gCubeIdentity.setIdentity(request); } - -// /** -// * Gets the project by ID. -// * -// * @param profileID the profile ID -// * @param projectID the project ID -// * @return the project by ID -// * @throws Exception the exception -// */ -// public ProjectDV getProjectByID(String profileID, String projectID) throws Exception { -// ProjectsCaller clientPrj = GeoportalClientCaller.projects(); -// Project theProject = clientPrj.getProjectByID(profileID, projectID); -// ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true); -// return ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder); -// /* -// * try { // Obtain the client ConcessioniMongoService concessioniManager = new -// * ConcessioniMongoService(); // Returning item by Id return -// * concessioniManager.getItemById(mongoItemId); }catch(Exception e) { -// * LOG.error("Error on reading itemById: "+mongoItemId, e); throw(e); }finally { -// * gCubeIdentity.resetIdentity(); } -// */ -// } - -// /** -// * Gets the UCD by ID. -// * -// * @param profileID the profile ID -// * @return the UCD by ID -// * @throws Exception the exception -// */ -// public UseCaseDescriptorDV getUCDByID(String profileID) throws Exception { -// UseCaseDescriptorCaller ucdCaller = GeoportalClientCaller.useCaseDescriptors(); -// UseCaseDescriptor ucd = ucdCaller.getUCDForId(profileID); -// return ConvertToDataValueObjectModel.toUseCaseDescriptorDV(ucd, null); -// } + + public boolean isUser() { + return isUser; + } + + public boolean isIAMClient() { + return isIAMClient; + } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/ContextRequest.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/ContextRequest.java index 3429ad2..f6132ef 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/ContextRequest.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/util/ContextRequest.java @@ -15,6 +15,7 @@ public abstract class ContextRequest { private static final Logger LOG = LoggerFactory.getLogger(ContextRequest.class); private static List preoperations = new ArrayList<>(); + private GeoportalServiceIdentityProxy geoportalServiceProxy; public static void addPreoperation(Runnable preoperation) { preoperations.add(preoperation); @@ -35,7 +36,7 @@ public abstract class ContextRequest { r.run(); } - new GeoportalServiceIdentityProxy(request); + geoportalServiceProxy = new GeoportalServiceIdentityProxy(request); LOG.debug("Context is " + SessionUtil.getCurrentContext(request, true)); LOG.debug("Context is " + SessionUtil.getCurrentToken(request, true) == null ? null : "***"); LOG.trace("Executing actual method.."); @@ -53,6 +54,10 @@ public abstract class ContextRequest { public T getResult() { return result; } + + public GeoportalServiceIdentityProxy getGeoportalServiceProxy() { + return geoportalServiceProxy; + } protected abstract T run() throws Exception, ControlledError; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ViewerConfiguration.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ViewerConfiguration.java index 51bdb2b..30f8430 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ViewerConfiguration.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/shared/ViewerConfiguration.java @@ -37,11 +37,4 @@ public class ViewerConfiguration implements Serializable { public void setAvailableCollections(Map availableCollections) { this.availableCollections = availableCollections; } - - // TODO -// public List displayedCollections; -// -// -// public Map selectedProjects; - } diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java index bcabd41..1780e27 100644 --- a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java +++ b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java @@ -6,6 +6,7 @@ import java.util.List; import org.bson.Document; import org.gcube.application.geoportal.common.model.document.Project; +import org.gcube.application.geoportal.common.model.document.identification.IdentificationReference; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel; @@ -13,6 +14,9 @@ import org.gcube.application.geoportalcommon.ProjectDVBuilder; import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller; import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller; import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller; +import org.gcube.application.geoportalcommon.geoportal.util.GisUtil; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.Crs; +import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV; import org.gcube.application.geoportalcommon.shared.geoportal.materialization.innerobject.PayloadDV; import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV; @@ -20,7 +24,9 @@ import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portlets.user.geoportaldataviewer.server.Geoportal_JSON_Mapper; +import org.json.JSONObject; import org.junit.Before; +import org.junit.Test; /** * The Class GeoportalViewer_Tests. @@ -39,10 +45,10 @@ public class GeoportalViewer_Tests { // private static String TOKEN = ""; //preVRE private static String CONTEXT = "/gcube/devsec/devVRE"; - private static String TOKEN = ""; // devVRE + private static String TOKEN = "c41a00c0-7897-48d2-a67a-05190d6ce5e6-98187548"; // devVRE private static String PROFILE_ID = "profiledConcessioni"; - private static String PROJECT_ID = "634fc41ecd343e6571ed3db0"; + private static String PROJECT_ID = "6356ad1dde985906377eef3f"; private static String USERNAME = "francesco.mangiacrapa"; @@ -110,7 +116,42 @@ public class GeoportalViewer_Tests { } - //@Test + @Test + public void getSpatialReference() { + System.out.println("getSpatialReference [profileID: " + PROFILE_ID + ", projectID: " + PROJECT_ID + "] called"); + try { + + ScopeProvider.instance.set(CONTEXT); + SecurityTokenProvider.instance.set(TOKEN); + Project project = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID); + + List itentificationReference = project.getIdentificationReferences(); + + for (IdentificationReference identificationReference : itentificationReference) { + String geoJSON = identificationReference.get("geoJSON").toString(); + JSONObject jsonObject = new JSONObject(geoJSON); + + GeoJSON geoJson = new GeoJSON(); + geoJson.setType(jsonObject.getString("type")); + geoJson.setBbox(GisUtil.fromJSONArray(jsonObject.getJSONArray("bbox"))); + Crs crs = org.gcube.application.geoportal.client.utils.Serialization + .convert(jsonObject.getJSONObject("crs").toString(), Crs.class); + geoJson.setCrs(crs); + geoJson.setGeoJSON(geoJSON); + + System.out.println(geoJson); + } + + } catch (Exception e) { + String erroMsg = "getSpatialReference not available for profileID " + PROFILE_ID + " with projectID " + + PROJECT_ID; + System.out.println(erroMsg); + e.printStackTrace(); + } + + } + + // @Test public void getImagesForId() { System.out.println("getImagesForId [profileID: " + PROFILE_ID + ", projectID: " + PROJECT_ID + "] called"); @@ -137,8 +178,8 @@ public class GeoportalViewer_Tests { } } - - //@Test + + // @Test public void testUCDQuery() { QueryRequest request = new QueryRequest(); request.setFilter(