geoportal-data-viewer-app/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/ui/SearchFacilityUI.java

477 lines
14 KiB
Java

package org.gcube.portlets.user.geoportaldataviewer.client.ui;
import java.util.List;
import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.DropdownButton;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.NavLink;
import com.github.gwtbootstrap.client.ui.TextBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The Class SearchFacilityUI.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Dec 14, 2021
*/
public class SearchFacilityUI extends Composite {
private static SearchFacilityPanelUiBinder uiBinder = GWT.create(SearchFacilityPanelUiBinder.class);
protected static final int MIN_LENGHT_SERCHING_STRING = 3;
@UiField
ListBox listBoxSortBy;
@UiField
ListBox listBoxSearchFor;
@UiField
TextBox searchField;
@UiField
NavLink sortByToogle;
@UiField
Button resetSearch;
@UiField
HTMLPanel panelResults;
@UiField
HorizontalPanel toogleSortBy;
// private List<ItemField> searchForFields;
//
// private List<ItemField> sortByFields;
private SearchingFilter currentSortFilter;
private HandlerManager appManagerBus;
private static final String LABEL_FILTER_SEPARATOR = " - ";
private ResultSetPaginatedData latestResult;
private DropdownButton searchFacilityButton;
/**
* The Interface SearchFacilityPanelUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Dec 14, 2021
*/
interface SearchFacilityPanelUiBinder extends UiBinder<Widget, SearchFacilityUI> {
}
// /**
// * Instantiates a new search facility UI.
// *
// * @param appManagerBus the app manager bus
// * @param sortByFields the sort by fields
// * @param searchForFields the search for fields
// * @param initialSortFilter the initial sort filter
// */
// public SearchFacilityUI(HandlerManager appManagerBus, List<ItemField> sortByFields, List<ItemField> searchForFields,
// SearchingFilter initialSortFilter) {
// initWidget(uiBinder.createAndBindUi(this));
// this.searchForFields = searchForFields;
// this.currentSortFilter = initialSortFilter;
// this.sortByFields = sortByFields;
// this.appManagerBus = appManagerBus;
//
// resetSearch.setType(ButtonType.LINK);
//
// listBoxSortBy.setWidth("180px");
// listBoxSearchFor.setWidth("140px");
//
// bindEvents();
// }
// /**
// * To label filter.
// *
// * @param itemField the item field
// * @param direction the direction
// * @return the string
// */
// private String toLabelFilter(ItemField itemField, ORDER direction) {
// String labelFilter = itemField.getDisplayName() + LABEL_FILTER_SEPARATOR + direction.name();
// return labelFilter;
// }
/**
* Bind events.
*/
// private void bindEvents() {
//
// for (ItemField record_FIELD : sortByFields) {
// 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) {
// if(latestResult!=null && latestResult.getData().size()>0) {
// doSearchEvent();
// }
// }
// });
//
// for (ItemField record_FIELD : searchForFields) {
// 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) {
// if (searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) {
// doSearchEvent();
// }
//
// }
// });
//
// sortByToogle.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
// if (toogleSortBy.isVisible())
// toogleSortBy.setVisible(false);
// else
// toogleSortBy.setVisible(true);
//
// }
// });
//
// searchField.addKeyPressHandler(new KeyPressHandler() {
//
// @Override
// public void onKeyPress(KeyPressEvent event) {
// if (com.google.gwt.event.dom.client.KeyCodes.KEY_ENTER == event.getCharCode()) {
// GWT.log(searchField.getText());
// doSearchEvent();
// }
//
// }
// });
//
// resetSearch.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
// searchField.setText("");
// resetSearch.setVisible(false);
// panelResults.clear();
// latestResult = null;
// appManagerBus.fireEvent(new SearchPerformedEvent(null,true));
// setSearchEnabled(false);
// }
// });
//
// }
private void setSearchEnabled(boolean bool) {
if(bool) {
searchFacilityButton.getElement().addClassName("highlight-button");
}
else {
searchFacilityButton.getElement().removeClassName("highlight-button");
}
}
/**
* Search concessioni.
*/
private void searchConcessioni() {
SearchingFilter filter = getCurrentSortFilter();
panelResults.clear();
panelResults.add(new HTML("<hr>"));
panelResults.add(new LoaderIcon("TODO..."));
//TODO
// GeoportalDataViewerServiceAsync.Util.getInstance().getListConcessioni(0, 30, filter, false,
// new AsyncCallback<ResultSetPaginatedData>() {
//
//
//
// @Override
// public void onFailure(Throwable caught) {
//// showLoading(false);
//// Window.alert(caught.getMessage());
// panelResults.clear();
// panelResults.add(new HTML("<hr>"));
// Alert alert = new Alert("Error on searching. Please, refresh or change the search");
// alert.setType(AlertType.ERROR);
// alert.setClose(false);
// panelResults.add(alert);
// }
//
// @Override
// public void onSuccess(ResultSetPaginatedData result) {
//
// appManagerBus.fireEvent(new SearchPerformedEvent(result.getData(),false));
// setSearchEnabled(true);
// latestResult = result;
//
// panelResults.clear();
// panelResults.add(new HTML("<hr>"));
//
// if (result.getData().size() == 0) {
// panelResults.add(new HTML("No result found"));
// return;
// }
//
// FlexTable ft = new FlexTable();
// ft.getElement().setClassName("table-results");
// int i = 1;
// ft.setWidget(0, i, new HTML("Nome Progetto"));
//
// String selValue = listBoxSearchFor.getSelectedValue().toLowerCase();
//
// boolean addIntroduction = false;
// if(selValue.startsWith("proj") || selValue.startsWith("any")) {
// ft.setWidget(0, ++i, new HTML("Introduzione"));
// addIntroduction = true;
// }
//
// boolean addStaff = false;
// if(selValue.startsWith("director")) {
// ft.setWidget(0, ++i, new HTML("Autori"));
// 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;
// if(selValue.startsWith("keyword")) {
// ft.setWidget(0, ++i, new HTML("Parole Libere"));
// ft.setWidget(0, ++i, new HTML("Parole Cronologia"));
// addParole = true;
// }
//
// 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(), 200)));
//
// 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) {
// ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getParoleChiaveLibere())));
// ft.setWidget(i, ++j, new HTML(toDisplayList(concessione.getParoleChiaveICCD())));
// }
//
//
//// List<UploadedImageDV> listImg = concessione.getImmaginiRappresentative();
//// GWT.log(listImg.toString());
//// boolean imagePreviewFound = false;
//// if (listImg != null && listImg.size() > 0) {
////
//// UploadedImageDV uImg = listImg.get(0);
////
//// if (uImg != null && uImg.getListWsContent() != null
//// && uImg.getListWsContent().size() > 0) {
//// WorkspaceContentDV wsc = uImg.getListWsContent().get(0);
//// String image = "<img style=\"width:50px;height:50px;\" src='" + wsc.getLink()
//// + "' alt='" + wsc.getName() + "'>";
//// ft.setWidget(i, 2, new HTML(image));
//// imagePreviewFound = true;
//// }
//// }
////
//// if (!imagePreviewFound) {
//// ft.setWidget(i, 2, new Image(GNAImages.ICONS.italyIcon()));
//// }
//
// i++;
// }
//
// panelResults.add(ft);
//
// }
// });
}
/**
* To display authors.
*
* @param listValues the list values
* @return the string
*/
private String toDisplayList(List<String> listValues) {
String toDisplay = "";
if (listValues == null)
return toDisplay;
for (String author : listValues) {
toDisplay += author + "; ";
}
return toDisplay;
}
/**
* Do search event.
*/
private void doSearchEvent() {
String searchText = searchField.getText();
if (searchText.length() < MIN_LENGHT_SERCHING_STRING) {
Window.alert("Please enter at least " + MIN_LENGHT_SERCHING_STRING + " characters");
return;
}
resetSearch.setVisible(true);
// appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE,
// getCurrentSortFilter()));
searchConcessioni();
}
// /**
// * To sort filter.
// *
// * @param labelFilter the label filter
// * @return the searching filter
// */
// public SearchingFilter toSortFilter(String labelFilter) {
// GWT.log("toSortFilter for label " + labelFilter);
// String[] array = labelFilter.split(LABEL_FILTER_SEPARATOR);
//
// SearchingFilter sortFilter = null;
// try {
// ItemField recordField = null;
// for (ItemField value : sortByFields) {
// if (array[0].equalsIgnoreCase(value.getDisplayName())) {
// recordField = value;
// break;
// }
// }
// ORDER orderField = ORDER.valueOf(array[1]);
// sortFilter = new SearchingFilter(Arrays.asList(recordField), orderField);
// } catch (Exception e) {
//
// }
// GWT.log("toSortFilter Got " + sortFilter);
// return sortFilter;
//
// }
/**
* Built searching filter.
*
* @return the searching filter
*/
//TODO
// private SearchingFilter builtSearchingFilter() {
// SearchingFilter searchingFilter = toSortFilter(listBoxSortBy.getSelectedValue());
// String searchText = searchField.getText();
// if (searchText != null && !searchText.isEmpty()) {
// Map<String, Object> searchInto = new HashMap<String, Object>();
//
// List<String> listOfSeachingFields = new ArrayList<String>();
//
// for (ItemField recordField : searchForFields) {
// if (recordField.getDisplayName().equals(listBoxSearchFor.getSelectedValue())) {
// listOfSeachingFields = recordField.getJsonFields();
// continue;
// }
// }
//
// if(listOfSeachingFields.size()==0) {
// listOfSeachingFields.add("nome");
// }
// for (String fieldname : listOfSeachingFields) {
// searchInto.put(fieldname, searchText);
// }
//
// WhereClause where = new WhereClause();
// where.setSearchInto(searchInto);
// where.setOperator(LOGICAL_OP.OR);
//
// //THIS CLAUSE IS ADDED IN ORDER TO SEARCH ONLY PUBLISHED PRODUCT (WITH SUCCESS)
// Map<String, Object> searchInto2 = new HashMap<String, Object>();
// searchInto2.put("report.status", "PASSED");
// WhereClause where2 = new WhereClause(LOGICAL_OP.AND, searchInto2);
//
// searchingFilter.setConditions(Arrays.asList(where, where2));
// }
// return searchingFilter;
// }
/**
* Gets the current sort filter.
*
* @return the current sort filter
*/
public SearchingFilter getCurrentSortFilter() {
//TODO
//currentSortFilter = builtSearchingFilter();
GWT.log("currentSortFilter: " + currentSortFilter);
return currentSortFilter;
}
public void setSearchButton(DropdownButton searchFacilityButton) {
this.searchFacilityButton = searchFacilityButton;
}
}