From 0e97a234cec4e5b742cff63ffad578897df77812 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Fri, 10 Dec 2021 16:19:33 +0100 Subject: [PATCH] #22518 Added the search facility --- .../client/GeoportalDataViewer.java | 22 +++- .../events/ShowPopupOnCentroiEvent.java | 61 ++++++++++ .../ShowPopupOnCentroiEventHandler.java | 21 ++++ .../client/ui/GeonaDataViewMainPanel.java | 15 ++- .../client/ui/GeonaDataViewMainPanel.ui.xml | 9 +- .../client/ui/SearchFacilityUI.java | 105 ++++++++++++++---- .../GeoportalDataViewerServiceImpl.java | 15 ++- src/main/webapp/GeoportalDataViewer.css | 6 +- 8 files changed, 213 insertions(+), 41 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java 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 2e1af10..2a133b8 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 @@ -31,6 +31,8 @@ import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEven import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEventHandler; +import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEvent; +import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroiEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEvent; import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEventHandler; import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped; @@ -139,6 +141,7 @@ public class GeoportalDataViewer implements EntryPoint { @Override public void onSuccess(List result) { + GWT.log("Loaded item fields: "+result); for (ItemField itemField : result) { if(itemField.isDisplayIntoTable()) { @@ -160,7 +163,7 @@ public class GeoportalDataViewer implements EntryPoint { initialSortFilter.setOrder(ORDER.ASC); initialSortFilter.setOrderByFields(Arrays.asList(new ItemField("Name", Arrays.asList("name"), true, true, true))); - mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight(),searchByFields,sortByFields,initialSortFilter); + mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight(),sortByFields,searchByFields,initialSortFilter); RootPanel.get(APP_DIV).add(mainPanel); initApplication(); @@ -256,7 +259,7 @@ public class GeoportalDataViewer implements EntryPoint { geonaDataViewerProfile = profile; GWT.log("Profile: " + geonaDataViewerProfile); Iterator it; - String theItemType = paramGeonaItemType; + String theItemType = paramGeonaItemType.toLowerCase(); if (theItemType == null) { it = geonaDataViewerProfile.getMapLayers().keySet().iterator(); it.hasNext(); @@ -381,7 +384,7 @@ public class GeoportalDataViewer implements EntryPoint { public void run() { attempt++; GWT.log("waiting get record: " + attempt); - RecordDV record = mainPanel.getDisplyedRecord(); + RecordDV record = mainPanel.getDisplayedRecord(); if (record != null) { this.cancel(); GWT.log("cancelled timer"); @@ -427,7 +430,7 @@ public class GeoportalDataViewer implements EntryPoint { @Override public void onZoomOut(ZoomOutOverMinimumEvent zoomOutEvent) { - if (mainPanel.getDisplyedRecord() == null && !olMapMng.isQueryPointActive()) { + if (mainPanel.getDisplayedRecord() == null && !olMapMng.isQueryPointActive()) { olMapMng.hidePopInfo(); layerManager.removeAllDetailLayers(); @@ -518,6 +521,17 @@ public class GeoportalDataViewer implements EntryPoint { } }); + + applicationBus.addHandler(ShowPopupOnCentroiEvent.TYPE, new ShowPopupOnCentroiEventHandler() { + + @Override + public void onShowPopup(ShowPopupOnCentroiEvent showPopupOnCentroiEvent) { + + if(showPopupOnCentroiEvent.getRecord()!=null) + performWFSQueryOnCentroid(showPopupOnCentroiEvent.getRecord()); + + } + }); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java new file mode 100644 index 0000000..07c07af --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEvent.java @@ -0,0 +1,61 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.events; + +import org.gcube.application.geoportalcommon.shared.products.model.RecordDV; + +import com.google.gwt.event.shared.GwtEvent; + + +/** + * The Class ShowDetailsEvent. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Jul 30, 2021 + */ +public class ShowPopupOnCentroiEvent extends GwtEvent { + public static Type TYPE = new Type(); + private RecordDV record; + + + /** + * Instantiates a new show details event. + * + * @param geonaItemType the geona item type + * @param geonaMongoID the geona mongo ID + * @param itemName the item name + * @param featureRow the feature row + */ + public ShowPopupOnCentroiEvent(RecordDV record) { + this.record = record; + + } + + + /** + * Gets the associated type. + * + * @return the associated type + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /** + * Dispatch. + * + * @param handler the handler + */ + @Override + protected void dispatch(ShowPopupOnCentroiEventHandler handler) { + handler.onShowPopup(this); + + } + + public RecordDV getRecord() { + return record; + } + + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java new file mode 100644 index 0000000..c668c23 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/events/ShowPopupOnCentroiEventHandler.java @@ -0,0 +1,21 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.events; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface ShowPopupOnCentroiEventHandler. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Dec 10, 2021 + */ +public interface ShowPopupOnCentroiEventHandler extends EventHandler { + + /** + * On show popup. + * + * @param showPopupOnCentroiEvent the show popup on centroi event + */ + void onShowPopup(ShowPopupOnCentroiEvent showPopupOnCentroiEvent); +} 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 6fb57e8..d02ae32 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 @@ -23,6 +23,8 @@ import com.github.gwtbootstrap.client.ui.NavLink; import com.github.gwtbootstrap.client.ui.Paragraph; import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -154,7 +156,18 @@ public class GeonaDataViewMainPanel extends Composite { linkLayers.setCustomIconStyle(GNAIcons.CustomIconType.LAYERS.get()); searchFacility = new SearchFacilityUI(applicationBus, sortByFields, searchForFields, initialSortFilter); + searchFacilityButton.setIcon(IconType.SEARCH); searchFacilityPanel.add(searchFacility); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + searchFacilityPanel.getElement().getParentElement().getStyle().setOpacity(0.9); + + } + + }); + // layersDDB.setToggle(true); bindEvents(); @@ -318,7 +331,7 @@ public class GeonaDataViewMainPanel extends Composite { * * @return the displyed record */ - public RecordDV getDisplyedRecord() { + public RecordDV getDisplayedRecord() { return detailsPanel.getDisplayedRecord(); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml index d0397c4..22022a9 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/GeonaDataViewMainPanel.ui.xml @@ -35,6 +35,11 @@ + + + @@ -52,10 +57,6 @@ text="World" title="Center to World"> - - - diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java index 811853f..d719152 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java @@ -1,25 +1,32 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; import org.gcube.application.geoportalcommon.shared.ItemField; import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData; import org.gcube.application.geoportalcommon.shared.SearchingFilter; import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; -import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.RECORD_TYPE; +import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerServiceAsync; -import org.gcube.portlets.user.geoportaldataviewer.client.events.GetListOfRecordsEvent; +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.util.LoaderIcon; import org.gcube.portlets.user.geoportaldataviewer.client.util.StringUtil; +import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.ListBox; import com.github.gwtbootstrap.client.ui.NavLink; import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.github.gwtbootstrap.client.ui.constants.ButtonType; +import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; @@ -75,6 +82,8 @@ public class SearchFacilityUI extends Composite { private HandlerManager appManagerBus; private static final String LABEL_FILTER_SEPARATOR = " - "; + + private ResultSetPaginatedData latestResult; interface SearchFacilityPanelUiBinder extends UiBinder { } @@ -106,32 +115,35 @@ public class SearchFacilityUI extends Composite { private void bindEvents() { for (ItemField record_FIELD : sortByFields) { - String labelASC = toLabelFilter(record_FIELD, ORDER.ASC); - String labelDESC = toLabelFilter(record_FIELD, ORDER.DESC); - listBoxSortBy.addItem(labelASC); - listBoxSortBy.addItem(labelDESC); + if(record_FIELD.isSortable()) { + String labelASC = toLabelFilter(record_FIELD, ORDER.ASC); + String labelDESC = toLabelFilter(record_FIELD, ORDER.DESC); + listBoxSortBy.addItem(labelASC); + listBoxSortBy.addItem(labelDESC); + } } listBoxSortBy.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { - appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); - + if(latestResult!=null && latestResult.getData().size()>0) { + doSearchEvent(); + } } }); for (ItemField record_FIELD : searchForFields) { - listBoxSearchFor.addItem(record_FIELD.getDisplayName()); + GWT.log("search for: "+record_FIELD); + if(record_FIELD.isSearchable()) { + listBoxSearchFor.addItem(record_FIELD.getDisplayName()); + } } listBoxSearchFor.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { - - // alertSearchFor.setText(listBoxSearchFor.getSelectedValue()); - if (searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) { doSearchEvent(); } @@ -182,8 +194,10 @@ public class SearchFacilityUI extends Composite { @Override public void onClick(ClickEvent event) { searchField.setText(""); - appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); + //appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); resetSearch.setVisible(false); + panelResults.clear(); + latestResult = null; } }); @@ -192,19 +206,30 @@ public class SearchFacilityUI extends Composite { private void searchConcessioni() { SearchingFilter filter = getCurrentSortFilter(); - + panelResults.clear(); + panelResults.add(new HTML("
")); + panelResults.add(new LoaderIcon("Searching...")); GeoportalDataViewerServiceAsync.Util.getInstance().getListConcessioni(0, 30, filter, false, new AsyncCallback() { + + @Override public void onFailure(Throwable caught) { // showLoading(false); // Window.alert(caught.getMessage()); - + panelResults.clear(); + panelResults.add(new HTML("
")); + Alert alert = new Alert("Error on searching. Please, refresh or change it"); + alert.setType(AlertType.ERROR); + alert.setClose(false); + panelResults.add(alert); } @Override public void onSuccess(ResultSetPaginatedData result) { + + latestResult = result; panelResults.clear(); panelResults.add(new HTML("
")); @@ -216,20 +241,24 @@ public class SearchFacilityUI extends Composite { FlexTable ft = new FlexTable(); ft.getElement().setClassName("table-results"); - int i = 0; + int i = 1; ft.setWidget(0, i, new HTML("Name")); String selValue = listBoxSearchFor.getSelectedValue().toLowerCase(); boolean addIntroduction = false; - if(selValue.startsWith("name")) { + if(selValue.startsWith("name") || selValue.startsWith("any")) { ft.setWidget(0, ++i, new HTML("Introduction")); addIntroduction = true; } boolean addStaff = false; - if(selValue.startsWith("staff")) { - ft.setWidget(0, ++i, new HTML("Staff")); + if(selValue.startsWith("direttore")) { + ft.setWidget(0, ++i, new HTML("Authors")); + ft.setWidget(0, ++i, new HTML("Responsabile")); + ft.setWidget(0, ++i, new HTML("Editore")); + ft.setWidget(0, ++i, new HTML("Titolari")); + ft.setWidget(0, ++i, new HTML("Contributore")); addStaff = true; } boolean addParole = false; @@ -242,12 +271,35 @@ public class SearchFacilityUI extends Composite { i = 1; for (ConcessioneDV concessione : result.getData()) { int j = -1; + + NavLink locateOnMap = new NavLink("Show"); + locateOnMap.setTitle("Locate on the Map and show details"); + locateOnMap.setIcon(IconType.MAP_MARKER); + + locateOnMap.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + GeoNaItemRef gir = new GeoNaItemRef(concessione.getItemId(), GeoportalDataViewerConstants.RECORD_TYPE.CONCESSIONE.toString()); + appManagerBus.fireEvent(new ShowDetailsEvent(gir, null, null)); + appManagerBus.fireEvent(new ShowPopupOnCentroiEvent(concessione)); + + } + }); + + ft.setWidget(i, ++j, locateOnMap); + + ft.setWidget(i, ++j, new HTML(concessione.getNome())); if(addIntroduction) ft.setWidget(i, ++j, new HTML(StringUtil.ellipsize(concessione.getIntroduzione(), 100))); if(addStaff) { ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getAuthors()))); + ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getResponsabile())))); + ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getEditore())))); + ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getTitolari()))); + ft.setWidget(i, ++j, new HTML(toDisplayList(Arrays.asList(concessione.getContributore())))); } if(addParole) { @@ -276,7 +328,7 @@ public class SearchFacilityUI extends Composite { // if (!imagePreviewFound) { // ft.setWidget(i, 2, new Image(GNAImages.ICONS.italyIcon())); // } - + i++; } @@ -346,15 +398,22 @@ public class SearchFacilityUI extends Composite { if (searchText != null && !searchText.isEmpty()) { Map searchInto = new HashMap(); - String searchForField = ""; + List listOfSeachingFields = new ArrayList(); for (ItemField recordField : searchForFields) { if (recordField.getDisplayName().equals(listBoxSearchFor.getSelectedValue())) { - searchForField = recordField.getJsonFields().get(0); + listOfSeachingFields = recordField.getJsonFields(); continue; } } - searchInto.put(searchForField, searchText); + + if(listOfSeachingFields.size()==0) { + listOfSeachingFields.add("nome"); + } + for (String fieldname : listOfSeachingFields) { + searchInto.put(fieldname, searchText); + } + searchingFilter.setSearchInto(searchInto); } return searchingFilter; 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 0065e9f..63cdb9f 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 @@ -697,16 +697,19 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme */ @Override public List listOfFieldsForSearching() { - //GeoportalCommon gc = new GeoportalCommon(); - //return gc.getGNADataConfig().getListItemFields(); - + // GeoportalCommon gc = new GeoportalCommon(); + // return gc.getGNADataConfig().getListItemFields(); + List listItemFields = new ArrayList(); + listItemFields.add(new ItemField("Any Field", + Arrays.asList("nome", "authors", "introduzione", "contributore", "titolari", "editore", "responsabile", "paroleChiaveLibere", "paroleChiaveICCD"), false, false, true)); listItemFields.add(new ItemField("Name", Arrays.asList("nome"), true, true, true)); - listItemFields.add(new ItemField("Staff", Arrays.asList("authors"), true, true, true)); - listItemFields.add(new ItemField("Parola chiave", Arrays.asList("paroleChiaveLibere","paroleChiaveICCD"), true, true, true)); + listItemFields.add(new ItemField("Direttore/Staff", + Arrays.asList("authors", "contributore", "titolari", "editore", "responsabile"), true, false, true)); + listItemFields.add(new ItemField("Parola chiave", Arrays.asList("paroleChiaveLibere", "paroleChiaveICCD"), true, + false, true)); return listItemFields; } - /** * Gets the list concessioni. diff --git a/src/main/webapp/GeoportalDataViewer.css b/src/main/webapp/GeoportalDataViewer.css index 26624c2..e5a7752 100644 --- a/src/main/webapp/GeoportalDataViewer.css +++ b/src/main/webapp/GeoportalDataViewer.css @@ -473,14 +473,14 @@ body { .table-results { table-layout: fixed; - width: 600px; + /*width: 600px;*/ } .table-results td { padding: 5px; /* For Firefox */ white-space: pre-wrap; - word-break: break-all; + /*word-break: break-all;*/ /* For Chrome and IE */ word-wrap: break-word; } @@ -496,6 +496,6 @@ body { } .table-results td:nth-child(1) { - width: 200px; + /*width: 200px;*/ } \ No newline at end of file