diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 43c8195..cac0df4 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 7812414..d62827e 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -2,6 +2,6 @@ - + diff --git a/pom.xml b/pom.xml index d9fc82d..1a7a83b 100644 --- a/pom.xml +++ b/pom.xml @@ -25,12 +25,12 @@ - 2.7.0 + 2.9.0 ${project.build.directory}/${project.build.finalName} UTF-8 UTF-8 - 1.7 + 1.8 1.8 @@ -59,6 +59,22 @@ + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + + xml-apis + xml-apis + 1.4.01 + provided + com.google.gwt gwt-user diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ConstantsGeoPortalDataEntryApp.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ConstantsGeoPortalDataEntryApp.java index be14eb4..cd372a8 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ConstantsGeoPortalDataEntryApp.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ConstantsGeoPortalDataEntryApp.java @@ -2,6 +2,13 @@ package org.gcube.portlets.user.geoportaldataentry.client; import org.gcube.portlets.widgets.mpformbuilder.client.ConstantsMPFormBuilder; +/** + * The Class ConstantsGeoPortalDataEntryApp. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ public class ConstantsGeoPortalDataEntryApp { public static final String DATE_FORMAT = ConstantsMPFormBuilder.DATE_FORMAT; @@ -12,12 +19,59 @@ public class ConstantsGeoPortalDataEntryApp { public static final String ERROR_ON_INIZIALITAION_STAGE_PLEASE_CONTACT_THE_SUPPORT = "Error on inizialization stage, please contact the support!"; + /** + * The Enum RECORD_TYPE. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ public enum RECORD_TYPE { CONCESSIONE } + /** + * The Enum ACTION_ON_ITEM. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ public enum ACTION_ON_ITEM { SHOW_ON_MAP, SHOW_METADATA, REMOVE } + /** + * The Enum RECORD_FIELD. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ + public static enum RECORD_FIELD { + NAME, INTRODUCTION, AUTHOR, PROJECT_START, CREATED, CREATED_BY + } + + /** + * The Enum RECORD_FIELD. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ + public static enum RECORD_DISPLAY_FIELD { + NAME, INTRODUCTION, AUTHOR, PROJECT_START_END_DATE, CREATED, CREATED_BY + } + + /** + * The Enum ORDER. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ + public static enum ORDER { + ASC, DESC + } + } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java index 03ef45b..0dde10e 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java @@ -10,6 +10,8 @@ import java.util.TreeMap; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_ON_ITEM; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ORDER; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEvent; import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEventHandler; @@ -24,7 +26,6 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaRecordsPaginate import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel; import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm; import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML; -import org.gcube.portlets.user.geoportaldataentry.client.ui.table.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogConfirm; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil.HTML_TAG; @@ -33,6 +34,7 @@ import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.NewBrowserWind import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync; import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean; @@ -90,7 +92,12 @@ public class GeoPortalDataEntryApp implements EntryPoint { */ public void onModuleLoad() { - mainTabPanel = new GeonaMainTabPanel(appManagerBus); + RECORD_FIELD[] sortByOptions = new RECORD_FIELD[] { RECORD_FIELD.NAME, RECORD_FIELD.PROJECT_START, + RECORD_FIELD.CREATED, RECORD_FIELD.CREATED_BY }; + + SortFilter initialSortFilter = new SortFilter(RECORD_FIELD.NAME, ORDER.ASC); + + mainTabPanel = new GeonaMainTabPanel(appManagerBus, sortByOptions, initialSortFilter); mainTabPanel.setLoaderVisible("Loading...", true); geoNaMainForm = new GeonaDataEntryMainForm(appManagerBus); @@ -386,7 +393,7 @@ public class GeoPortalDataEntryApp implements EntryPoint { public void onGetList(GetListOfRecordsEvent getListOfRecordsEvent) { GeonaRecordsPaginatedView grpw = new GeonaRecordsPaginatedView(appManagerBus, RECORD_TYPE.CONCESSIONE, - null, DISPLAY_FIELD.NAME); + null, getListOfRecordsEvent.getSortFilter()); mainTabPanel.showListOfConcessioniView(grpw); } }); @@ -496,7 +503,8 @@ public class GeoPortalDataEntryApp implements EntryPoint { hp.add(alert); appManagerBus.fireEvent( - new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE)); + new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, + mainTabPanel.getCurrentSortFilter())); } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java index cfefca8..2e4a3ca 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java @@ -7,7 +7,8 @@ import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataE import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; -import org.gcube.portlets.user.geoportaldataentry.shared.SearchedData; +import org.gcube.portlets.user.geoportaldataentry.shared.ResultSetPaginatedData; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -52,12 +53,14 @@ public interface GeoportalDataEntryService extends RemoteService { * Gets the list concessioni. * * @param start the start - * @param offset the offset + * @param limit the limit + * @param filter the filter * @param reloadFromService the reload from service * @return the list concessioni * @throws Exception the exception */ - SearchedData getListConcessioni(Integer start, Integer offset, boolean reloadFromService) throws Exception; + public ResultSetPaginatedData getListConcessioni(Integer start, Integer limit, SortFilter filter, boolean reloadFromService) throws Exception; + /** * Delete record. diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java index a263630..ac5a768 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java @@ -7,7 +7,8 @@ import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataE import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; -import org.gcube.portlets.user.geoportaldataentry.shared.SearchedData; +import org.gcube.portlets.user.geoportaldataentry.shared.ResultSetPaginatedData; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -47,7 +48,8 @@ public interface GeoportalDataEntryServiceAsync void getLinksFor(String itemId, RECORD_TYPE recordType, AsyncCallback callback); - void getListConcessioni(Integer start, Integer offset, boolean reloadFromService, AsyncCallback callback); + void getListConcessioni(Integer start, Integer limit, SortFilter filter, boolean reloadFromService, + AsyncCallback callback); void deleteRecord(String itemId, RECORD_TYPE recordType, AsyncCallback callback); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/GetListOfRecordsEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/GetListOfRecordsEvent.java index 9fb313f..cbea945 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/GetListOfRecordsEvent.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/GetListOfRecordsEvent.java @@ -2,6 +2,7 @@ package org.gcube.portlets.user.geoportaldataentry.client.events; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import com.google.gwt.event.shared.GwtEvent; @@ -17,13 +18,14 @@ public class GetListOfRecordsEvent extends GwtEvent TYPE = new Type(); private RECORD_TYPE recordType; - + private SortFilter sortFilter; /** * Instantiates a new cancel upload event. */ - public GetListOfRecordsEvent(ConstantsGeoPortalDataEntryApp.RECORD_TYPE recordType) { + public GetListOfRecordsEvent(ConstantsGeoPortalDataEntryApp.RECORD_TYPE recordType, SortFilter sortFilter) { this.recordType = recordType; + this.sortFilter = sortFilter; } /** @@ -57,9 +59,13 @@ public class GetListOfRecordsEvent extends GwtEvent"); + anchorTop = new HTML("Go to top of table"); + + // Anchor bottom + divAnchorBotton = new HTML("
"); + anchorBottom = new HTML("Go to bottom of table"); + } + /** + * Bind events. + */ private void bindEvents() { buttCreateNewProject.addClickHandler(new ClickHandler() { @@ -93,7 +133,7 @@ public class GeonaMainTabPanel extends Composite { @Override public void onClick(ClickEvent event) { - appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE)); + appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); } }); @@ -102,13 +142,49 @@ public class GeonaMainTabPanel extends Composite { @Override public void onClick(ClickEvent event) { + GeonaRecordsPaginatedView grpw = new GeonaRecordsPaginatedView(appManagerBus, RECORD_TYPE.CONCESSIONE, - null, DISPLAY_FIELD.NAME); + null, currentSortFilter); showListOfConcessioniView(grpw); } }); + for (RECORD_FIELD record_FIELD : sortByFields) { + + // ASC + SortFilter sortFilter = new SortFilter(record_FIELD, ORDER.ASC); + String labelASC = toLabelFilter(sortFilter); + NavLink nav = new NavLink(labelASC); + dropdownSortBy.add(nav); + + nav.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + GWT.log("Sort by: " + sortFilter); + setCurrentSortFilter(sortFilter); + appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); + } + }); + +// //DESC + SortFilter sortFilter2 = new SortFilter(record_FIELD, ORDER.DESC); + String labelASC2 = toLabelFilter(sortFilter2); + NavLink nav2 = new NavLink(labelASC2); + dropdownSortBy.add(nav2); + + nav2.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + GWT.log("Sort by: " + sortFilter2); + setCurrentSortFilter(sortFilter2); + appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); + } + }); + } + } /** @@ -120,11 +196,23 @@ public class GeonaMainTabPanel extends Composite { geonaMainFormPanel.add(formPanel); } + /** + * Show list of concessioni view. + * + * @param grpw the grpw + */ public void showListOfConcessioniView(GeonaRecordsPaginatedView grpw) { geonaListOfConcessioniPanel.clear(); VerticalPanel htmllPanel = new VerticalPanel(); + + htmllPanel.add(divAnchorTop); + htmllPanel.add(anchorBottom); + htmllPanel.add(grpw.getCellPanel()); htmllPanel.add(grpw.getPagerPanel()); + + htmllPanel.add(anchorTop); + htmllPanel.add(divAnchorBotton); geonaListOfConcessioniPanel.add(htmllPanel); } @@ -139,4 +227,51 @@ public class GeonaMainTabPanel extends Composite { loader.setVisible(visible); } + private void setCurrentSortFilter(SortFilter sortFilter) { + this.currentSortFilter = sortFilter; + this.textBoxSortBy.setText(toLabelFilter(sortFilter)); + } + + /** + * To label filter. + * + * @param sortFilter the sort filter + * @return the string + */ + public String toLabelFilter(SortFilter sortFilter) { + + String labelFilter = sortFilter.getOrderByField().name() + LABEL_FILTER_SEPARATOR + + sortFilter.getOrder().name(); + GWT.log("Got " + sortFilter); + return labelFilter; + } + + /** + * To sort filter. + * + * @param labelFilter the label filter + * @return the sort filter + */ + public SortFilter toSortFilter(String labelFilter) { + + String[] array = labelFilter.split(LABEL_FILTER_SEPARATOR); + + SortFilter sortFilter = null; + try { + RECORD_FIELD recordField = RECORD_FIELD.valueOf(array[0]); + ORDER orderField = ORDER.valueOf(array[1]); + sortFilter = new SortFilter(recordField, orderField); + } catch (Exception e) { + + } + + GWT.log("Got " + sortFilter); + return sortFilter; + + } + + public SortFilter getCurrentSortFilter() { + return currentSortFilter; + } + } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml index 9982f00..cdfc9bc 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml @@ -16,6 +16,10 @@ margin-bottom: 10px; border: 1px solid #eee; } + + .margin-top-5 { + margin-top: 5px; + } List of Projects + + + + + + + + Reload Projects diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java index 37e0b0e..595a51a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java @@ -3,13 +3,14 @@ package org.gcube.portlets.user.geoportaldataentry.client.ui; import java.util.List; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_DISPLAY_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp; import org.gcube.portlets.user.geoportaldataentry.client.ui.table.ItemsTable; -import org.gcube.portlets.user.geoportaldataentry.client.ui.table.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ui.table.SortedCellTable; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; -import org.gcube.portlets.user.geoportaldataentry.shared.SearchedData; +import org.gcube.portlets.user.geoportaldataentry.shared.ResultSetPaginatedData; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.HandlerManager; @@ -49,21 +50,23 @@ public class GeonaRecordsPaginatedView { private int serverStartIndex; private HandlerManager eventBus; private RECORD_TYPE recordType; + private SortFilter currentSortFilter; /** * Instantiates a new geona records paginated view. * - * @param eventbus the eventbus - * @param recordType the record type - * @param displayFields the display fields - * @param sortByField the sort by field + * @param eventbus the eventbus + * @param recordType the record type + * @param displayFields the display fields + * @param currentSortFilter the sort by field */ - public GeonaRecordsPaginatedView(HandlerManager eventbus, RECORD_TYPE recordType, DISPLAY_FIELD[] displayFields, - DISPLAY_FIELD sortByField) { + public GeonaRecordsPaginatedView(HandlerManager eventbus, RECORD_TYPE recordType, + RECORD_DISPLAY_FIELD[] displayFields, SortFilter currentSortFilter) { this.recordType = recordType; + this.currentSortFilter = currentSortFilter; this.initClassFirstRangeChanged = true; this.eventBus = eventbus; - itemsTable = new ItemsTable(eventbus, displayFields, sortByField); + itemsTable = new ItemsTable(eventbus, displayFields, currentSortFilter); itemsTable.initTable(null, null, dataProvider); orginalLoadingIndicator = itemsTable.getCellTable().getLoadingIndicator(); @@ -111,13 +114,13 @@ public class GeonaRecordsPaginatedView { /** * Load new page. * - * @param startIdx the start idx - * @param limit the limit - * @param resetStore the reset store + * @param startIdx the start idx + * @param limit the limit + * @param resetStore the reset store * @param invalidCache the invalid cache */ private void loadNewPage(final int startIdx, final int limit, final boolean resetStore, - final boolean invalidCache) { + final SortFilter currentSortFilter, final boolean invalidCache) { // initFirstRangeChanged = resetStore; GWT.log("loadNewPage with parameters [startIdx: " + startIdx + ", limit: " + limit + ", resetStore:" + resetStore + "]"); @@ -133,7 +136,7 @@ public class GeonaRecordsPaginatedView { getTableDataProvider().updateRowCount(ITEMS_PER_PAGE, false); } - loadConcessioni(newStartIndex, limit, serverStartIndex, invalidCache); + loadConcessioni(newStartIndex, limit, serverStartIndex, currentSortFilter, invalidCache); } /** @@ -144,7 +147,7 @@ public class GeonaRecordsPaginatedView { public void loadItemsForType(RECORD_TYPE recordType) { this.recordType = recordType; getCellTable().setVisibleRangeAndClearData(new Range(ITEM_START_INDEX, ITEMS_PER_PAGE), false); - loadNewPage(ITEM_START_INDEX, ITEMS_PER_PAGE, true, true); + loadNewPage(ITEM_START_INDEX, ITEMS_PER_PAGE, true, currentSortFilter, true); } /** @@ -152,7 +155,7 @@ public class GeonaRecordsPaginatedView { * * @param result the new new page result */ - private void setNewPageResult(SearchedData result) { + private void setNewPageResult(ResultSetPaginatedData result) { GWT.log("setNewPageResult: " + result); serverStartIndex = result.getServerEndIndex(); SelectionModel sm = getCellTable().getSelectionModel(); @@ -194,14 +197,14 @@ public class GeonaRecordsPaginatedView { * @param limit the limit * @param serverIndex the server index */ - private void loadConcessioni(int newStartIndex, int limit, int serverIndex, boolean invalidCache) { + private void loadConcessioni(int newStartIndex, int limit, int serverIndex, SortFilter sortFilter, + boolean invalidCache) { showLoading(true); GWT.log("calling loadItemsForStatus with parameters [startIndex: " + newStartIndex + ", limit: " + limit - + ", serverIndex:" + serverIndex + "]"); - - GeoPortalDataEntryApp.greetingService.getListConcessioni(newStartIndex, limit, invalidCache, - new AsyncCallback() { + + ", serverIndex:" + serverIndex + ", sortFilter: " + sortFilter + "]"); + GeoPortalDataEntryApp.greetingService.getListConcessioni(newStartIndex, limit, sortFilter, invalidCache, + new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -211,7 +214,7 @@ public class GeonaRecordsPaginatedView { } @Override - public void onSuccess(SearchedData result) { + public void onSuccess(ResultSetPaginatedData result) { showLoading(false); setNewPageResult(result); @@ -287,7 +290,7 @@ public class GeonaRecordsPaginatedView { return; } GWT.log("Range changed: " + start + " " + length + " visible count: " + display.getVisibleItemCount()); - loadNewPage(start, length, false, false); + loadNewPage(start, length, false, currentSortFilter, false); // eventBus.fireEvent(new TableRangeViewChangedEvent(start, length)); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java index 9edee64..bdd7649 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java @@ -13,7 +13,9 @@ import java.util.Set; import org.gcube.application.geoportalcommon.ConvertToDataViewModel; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_ON_ITEM; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_DISPLAY_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEvent; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import com.github.gwtbootstrap.client.ui.Pagination; import com.google.gwt.cell.client.ButtonCell; @@ -58,35 +60,26 @@ public class ItemsTable extends AbstractItemsCellTable< private AbstractDataProvider dataProvider; - /** - * The Enum DISPLAY_FIELD. - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 1, 2016 - */ - public static enum DISPLAY_FIELD { - NAME, INTRO, AUTHOR, PROJECT_START_DATE, PROJECT_START_END_DATE, CREATED, CREATED_BY - }; - - private List displayFields; + private List displayFields; private TextColumn startEndProjectColumn; // private Column startProjectDateColumn; // private Column endProjectDateColumn; - private DISPLAY_FIELD startSortByColumn; private boolean isAsyncronusTable; private TextColumn insertedBy; private Column createdColumn; + private SortFilter currentSortFilter; /** * Instantiates a new items table. * * @param eventBus the event bus - * @param fields the fields + * @param displayFields the display fields * @param startSortByColumn the start sort by column */ - public ItemsTable(HandlerManager eventBus, DISPLAY_FIELD[] fields, DISPLAY_FIELD startSortByColumn) { + public ItemsTable(HandlerManager eventBus, RECORD_DISPLAY_FIELD[] displayFields, SortFilter currentSortFilter) { this.eventBus = eventBus; - this.startSortByColumn = startSortByColumn; - setDisplayFields(fields); + this.currentSortFilter = currentSortFilter; + setDisplayFields(displayFields); } /** @@ -115,7 +108,7 @@ public class ItemsTable extends AbstractItemsCellTable< this.isAsyncronusTable = dataProvider instanceof ListDataProvider ? false : true; setEmptyTableMessage(NO_DATA); - if (this.displayFields.contains(DISPLAY_FIELD.NAME)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.NAME)) { // NAME name = new TextColumn() { @@ -152,7 +145,7 @@ public class ItemsTable extends AbstractItemsCellTable< } - if (this.displayFields.contains(DISPLAY_FIELD.INTRO)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.INTRODUCTION)) { introduction = new TextColumn() { @Override @@ -181,7 +174,7 @@ public class ItemsTable extends AbstractItemsCellTable< } - if (this.displayFields.contains(DISPLAY_FIELD.AUTHOR)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.AUTHOR)) { author = new TextColumn() { @Override @@ -212,7 +205,7 @@ public class ItemsTable extends AbstractItemsCellTable< } - if (this.displayFields.contains(DISPLAY_FIELD.PROJECT_START_END_DATE)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.PROJECT_START_END_DATE)) { startEndProjectColumn = new TextColumn() { @Override @@ -231,7 +224,7 @@ public class ItemsTable extends AbstractItemsCellTable< } - if (this.displayFields.contains(DISPLAY_FIELD.CREATED)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.CREATED)) { DateCell date = new DateCell(dtformat); createdColumn = new Column(date) { @@ -275,7 +268,7 @@ public class ItemsTable extends AbstractItemsCellTable< } - if (this.displayFields.contains(DISPLAY_FIELD.CREATED_BY)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.CREATED_BY)) { // NAME insertedBy = new TextColumn() { @@ -336,22 +329,22 @@ public class ItemsTable extends AbstractItemsCellTable< sortedCellTable.addColumn(deleteRecordColumn); sortedCellTable.setColumnWidth(deleteRecordColumn, 80, Unit.PX); - GWT.log("startSortByColumn: " + startSortByColumn); + GWT.log("currentSortFilter: " + currentSortFilter); - if (startSortByColumn != null) - switch (startSortByColumn) { + if (currentSortFilter != null) + switch (currentSortFilter.getOrderByField()) { case NAME: - if (this.displayFields.contains(DISPLAY_FIELD.NAME)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.NAME)) { sortedCellTable.setInitialSortColumn(name); } break; - case INTRO: - if (this.displayFields.contains(DISPLAY_FIELD.INTRO)) { + case INTRODUCTION: + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.INTRODUCTION)) { sortedCellTable.setInitialSortColumn(introduction); } break; case AUTHOR: - if (this.displayFields.contains(DISPLAY_FIELD.AUTHOR)) { + if (this.displayFields.contains(RECORD_DISPLAY_FIELD.AUTHOR)) { sortedCellTable.setInitialSortColumn(author); } break; @@ -361,6 +354,12 @@ public class ItemsTable extends AbstractItemsCellTable< } + /** + * To display authors. + * + * @param authors the authors + * @return the string + */ private String toDisplayAuthors(List authors) { String toDisplay = ""; if (authors == null) @@ -400,9 +399,9 @@ public class ItemsTable extends AbstractItemsCellTable< * * @param fields the new display fields */ - public void setDisplayFields(DISPLAY_FIELD[] fields) { + public void setDisplayFields(RECORD_DISPLAY_FIELD[] fields) { this.displayFields = fields != null && fields.length > 0 ? Arrays.asList(fields) - : Arrays.asList(DISPLAY_FIELD.values()); + : Arrays.asList(RECORD_DISPLAY_FIELD.values()); } /** @@ -421,7 +420,7 @@ public class ItemsTable extends AbstractItemsCellTable< * * @return the displayFields */ - public List getDisplayFields() { + public List getDisplayFields() { return displayFields; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java index 27634c5..445cf01 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java @@ -1,6 +1,7 @@ package org.gcube.portlets.user.geoportaldataentry.server; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,19 +21,23 @@ import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataentry.client.ConcessioniFormCardTitle; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ORDER; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryService; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport.STATE; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; -import org.gcube.portlets.user.geoportaldataentry.shared.SearchedData; +import org.gcube.portlets.user.geoportaldataentry.shared.ResultSetPaginatedData; +import org.gcube.portlets.user.geoportaldataentry.shared.SortFilter; import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean; import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** @@ -405,19 +410,124 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen return item; } + /* + * @Override public ResultSetPaginatedData getListConcessioni(Integer start, + * Integer limit, SortFilter filter, boolean reloadFromService) throws Exception + * { LOG.info("getListConcessioni called wit start: " + start + ", limit: " + + * limit + ", filter: " + filter); + * + * try { List listOfConcessioni = + * SessionUtil.getListOfConcessioni(getThreadLocalRequest(), reloadFromService); + * int listConcessioniSize = listOfConcessioni.size(); + * + * List toReturn = new ArrayList(); int startIndex; + * int limitIndex = 0; if (start == null && limit == null) { startIndex = 0; + * limitIndex = listConcessioniSize; } else { startIndex = start; limitIndex = + * start + limit; if (limitIndex > listConcessioniSize) { limitIndex = + * listConcessioniSize; } } + * + * ResultSetPaginatedData searchedData = new ResultSetPaginatedData(start, + * limit, startIndex, false); searchedData.setTotalItems(listConcessioniSize); + * + * if (filter == null) { // unsorted list of records toReturn = + * listOfConcessioni.subList(startIndex, limitIndex); } else { + * + * RECORD_FIELD orderBy = filter.getOrderByField(); ORDER order = + * filter.getOrder(); + * + * if (orderBy == null) orderBy = RECORD_FIELD.NAME; + * + * if (order == null) order = ORDER.ASC; + * + * ResultSetSorted resultSetSorted = + * SessionUtil.getLatestResultSetSorted(getThreadLocalRequest()); boolean + * latestOrderBy = + * resultSetSorted.getSearchFilter().getOrderByField().equals(orderBy); boolean + * latestOrder = resultSetSorted.getSearchFilter().getOrder().equals(order); + * + * //Checking if SortFilter is new (different to previous one used). If yes + * sorting again if(resultSetSorted==null || !latestOrderBy || !latestOrder) { + * + * // CASE INSENSITIVE COMPARATOR Comparator comparator = null; + * switch (orderBy) { case NAME: if (order.equals(ORDER.ASC)) { comparator = + * Comparator.comparing(Concessione::getNome, + * Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)); } else { comparator = + * Comparator .comparing(Concessione::getNome, + * Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)) .reversed(); } + * + * break; case CREATED: if (order.equals(ORDER.ASC)) { comparator = + * Comparator.comparing(Concessione::getCreationTime, + * Comparator.nullsLast(Comparator.naturalOrder())); } else { comparator = + * Comparator.comparing(Concessione::getCreationTime, + * Comparator.nullsLast(Comparator.naturalOrder())).reversed(); } break; + * + * case CREATED_BY: if (order.equals(ORDER.ASC)) { comparator = + * Comparator.comparing(Concessione::getCreationUser, + * Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)); } else { comparator = + * Comparator.comparing(Concessione::getCreationUser, + * Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)).reversed(); } break; + * + * case PROJECT_START: if (order.equals(ORDER.ASC)) { comparator = + * Comparator.comparing(Concessione::getDataInizioProgetto, + * Comparator.nullsLast(Comparator.naturalOrder())); } else { comparator = + * Comparator.comparing(Concessione::getDataInizioProgetto, + * Comparator.nullsLast(Comparator.naturalOrder())).reversed(); } break; + * + * default: break; } + * + * // sorting with nullsLast + * listOfConcessioni.sort(Comparator.nullsLast(comparator)); + * Log.debug("sorted list: " + listOfConcessioni); //saving in session the + * ResultSetSorted with SortFilter and ordered data ResultSetSorted rsSorted = + * new ResultSetSorted(new SortFilter(orderBy, order), listOfConcessioni); + * SessionUtil.setLatestResultSetSorted(getThreadLocalRequest(),rsSorted); + * + * }else { //Using the ResultSet sorted at previous request listOfConcessioni = + * resultSetSorted.getData(); } + * + * // pagination toReturn = listOfConcessioni.subList(startIndex, limitIndex); } + * + * List toReturnList = new + * ArrayList(toReturn.size()); + * + * for (Concessione concessione : toReturn) { ConcessioneDV concessioneDV = + * ConvertToDataViewModel.toBaseConcessione(concessione); + * toReturnList.add(concessioneDV); } + * + * + * searchedData.setData(toReturnList); + * + * if (listConcessioniSize == limit || listConcessioniSize == 0) { + * LOG.debug("Page completed returning " + listConcessioniSize + " items"); int + * newOffset = startIndex + start; + * searchedData.setServerSearchFinished(newOffset > listConcessioniSize || + * listConcessioniSize == 0); LOG.debug("is Search finished: " + + * searchedData.isServerSearchFinished()); return searchedData; } + * + * LOG.debug("Returning: " + toReturnList); + * LOG.info("Returning list of concessioni with size: " + toReturnList.size()); + * return searchedData; } catch (Exception e) { + * LOG.error("Error on loading list of concessioni: ", e); throw new + * Exception("Error occurred on loading list of Concessioni. Error: " + + * e.getMessage()); } + * + * } + */ + /** * Gets the list concessioni. * * @param start the start * @param limit the limit - * @param reloadFromService if true, ignore the concessioni saved in session and - * reload them from service + * @param filter the filter + * @param reloadFromService the reload from service * @return the list concessioni * @throws Exception the exception */ @Override - public SearchedData getListConcessioni(Integer start, Integer limit, boolean reloadFromService) throws Exception { - LOG.info("getListConcessioni called wit start: " + start + ", limit: " + limit); + public ResultSetPaginatedData getListConcessioni(Integer start, Integer limit, SortFilter filter, + boolean reloadFromService) throws Exception { + LOG.info("getListConcessioni called wit start: " + start + ", limit: " + limit + ", filter: " + filter); try { List listOfConcessioni = SessionUtil.getListOfConcessioni(getThreadLocalRequest(), @@ -428,7 +538,6 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen int startIndex; int limitIndex = 0; if (start == null && limit == null) { - toReturn.addAll(listOfConcessioni); startIndex = 0; limitIndex = listConcessioniSize; } else { @@ -439,10 +548,78 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen } } - SearchedData searchedData = new SearchedData(start, limit, startIndex, false); + ResultSetPaginatedData searchedData = new ResultSetPaginatedData(start, limit, startIndex, false); searchedData.setTotalItems(listConcessioniSize); - toReturn = listOfConcessioni.subList(startIndex, limitIndex); + if (filter == null) { + // unsorted list of records + toReturn = listOfConcessioni.subList(startIndex, limitIndex); + } else { + + RECORD_FIELD orderBy = filter.getOrderByField(); + ORDER order = filter.getOrder(); + + if (orderBy == null) + orderBy = RECORD_FIELD.NAME; + + if (order == null) + order = ORDER.ASC; + + // CASE INSENSITIVE COMPARATOR + Comparator comparator = null; + switch (orderBy) { + case NAME: + if (order.equals(ORDER.ASC)) { + comparator = Comparator.comparing(Concessione::getNome, + Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)); + } else { + comparator = Comparator + .comparing(Concessione::getNome, Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)) + .reversed(); + } + + break; + case CREATED: + if (order.equals(ORDER.ASC)) { + comparator = Comparator.comparing(Concessione::getCreationTime, + Comparator.nullsLast(Comparator.naturalOrder())); + } else { + comparator = Comparator.comparing(Concessione::getCreationTime, + Comparator.nullsLast(Comparator.naturalOrder())).reversed(); + } + break; + + case CREATED_BY: + if (order.equals(ORDER.ASC)) { + comparator = Comparator.comparing(Concessione::getCreationUser, + Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)); + } else { + comparator = Comparator.comparing(Concessione::getCreationUser, + Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)).reversed(); + } + break; + + case PROJECT_START: + if (order.equals(ORDER.ASC)) { + comparator = Comparator.comparing(Concessione::getDataInizioProgetto, + Comparator.nullsLast(Comparator.naturalOrder())); + } else { + comparator = Comparator.comparing(Concessione::getDataInizioProgetto, + Comparator.nullsLast(Comparator.naturalOrder())).reversed(); + } + break; + + default: + break; + } + + // sorting with nullsLast + listOfConcessioni.sort(Comparator.nullsLast(comparator)); + Log.debug("sorted list: " + listOfConcessioni); + + // pagination + toReturn = listOfConcessioni.subList(startIndex, limitIndex); + } List toReturnList = new ArrayList(toReturn.size()); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java index 735e6d3..549cf8a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java @@ -17,6 +17,7 @@ import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.portlets.user.geoportaldataentry.shared.ResultSetSorted; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; @@ -154,17 +155,16 @@ public class SessionUtil { } } - LOG.debug("Got list of concessioni from client mongo: " + listOfConcessioni); + // LOG.debug("Got list of concessioni from client mongo: " + listOfConcessioni); session.setAttribute(LIST_OF_CONCESSIONI, listOfConcessioni); LOG.info("Saved in session list of concessioni from client mongo with size: " + listOfConcessioni.size()); } else - LOG.info("list of concessioni presents in session"); + LOG.info("list of concessioni presents in session, using it"); LOG.info("read list of concessioni with size: " + listOfConcessioni.size()); return listOfConcessioni; } - /** * Gets the geportal viewer resource profile. * @@ -183,8 +183,31 @@ public class SessionUtil { geoNaDataViewerProfile = gc.getGeoNaDataViewProfile(null); session.setAttribute(GEONA_DATAVIEWER_PROFILE, geoNaDataViewerProfile); } - + return geoNaDataViewerProfile; } + + /** + * Gets the latest result set sorted. + * + * @param httpServletRequest the http servlet request + * @return the latest result set sorted + */ + public static ResultSetSorted getLatestResultSetSorted(HttpServletRequest httpServletRequest) { + HttpSession session = httpServletRequest.getSession(); + return (ResultSetSorted) session.getAttribute("LATEST_RESULT_SET_SORTED"); + } + + /** + * Gets the latest sort filter. + * + * @param httpServletRequest the http servlet request + * @return the latest sort filter + */ + public static void setLatestResultSetSorted(HttpServletRequest httpServletRequest, ResultSetSorted rsSorted) { + HttpSession session = httpServletRequest.getSession(); + session.setAttribute("LATEST_RESULT_SET_SORTED", rsSorted); + } + } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SearchedData.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetPaginatedData.java similarity index 85% rename from src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SearchedData.java rename to src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetPaginatedData.java index f9bb70c..d838915 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SearchedData.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetPaginatedData.java @@ -10,13 +10,13 @@ import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; /** - * The Class SearchedFolder. + * The Class ResultSetPaginatedData. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Jun 16, 2021 + * Aug 6, 2021 */ -public class SearchedData implements Serializable { +public class ResultSetPaginatedData implements Serializable { /** * @@ -32,18 +32,19 @@ public class SearchedData implements Serializable { /** * Instantiates a new searched folder. */ - public SearchedData() { + public ResultSetPaginatedData() { } + /** - * Instantiates a new searched data. + * Instantiates a new result set paginated data. * - * @param clientStartIndex the client start index - * @param limit the limit - * @param serverEndIndex the server end index + * @param clientStartIndex the client start index + * @param limit the limit + * @param serverEndIndex the server end index * @param isServerSearchFinished the is server search finished */ - public SearchedData(int clientStartIndex, int limit, int serverEndIndex, boolean isServerSearchFinished) { + public ResultSetPaginatedData(int clientStartIndex, int limit, int serverEndIndex, boolean isServerSearchFinished) { this.clientStartIndex = clientStartIndex; this.limit = limit; @@ -159,10 +160,15 @@ public class SearchedData implements Serializable { this.totalItems = totalItems; } + /** + * To string. + * + * @return the string + */ @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("SearchedData [data="); + builder.append("ResultSetPaginatedData [data="); builder.append(data); builder.append(", clientStartIndex="); builder.append(clientStartIndex); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetSorted.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetSorted.java new file mode 100644 index 0000000..412d1a0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/ResultSetSorted.java @@ -0,0 +1,56 @@ +package org.gcube.portlets.user.geoportaldataentry.shared; + +import java.io.Serializable; +import java.util.List; + +import org.gcube.application.geoportal.common.model.legacy.Concessione; + +public class ResultSetSorted implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 889420364685643758L; + + private SortFilter searchFilter; + + private List data; + + ResultSetSorted() { + + } + + public ResultSetSorted(SortFilter searchFilter, List data) { + super(); + this.searchFilter = searchFilter; + this.data = data; + } + + public SortFilter getSearchFilter() { + return searchFilter; + } + + public List getData() { + return data; + } + + public void setSearchFilter(SortFilter searchFilter) { + this.searchFilter = searchFilter; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ResultSetSorted [searchFilter="); + builder.append(searchFilter); + builder.append(", data="); + builder.append(data); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SortFilter.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SortFilter.java new file mode 100644 index 0000000..aca6e31 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/shared/SortFilter.java @@ -0,0 +1,99 @@ +package org.gcube.portlets.user.geoportaldataentry.shared; + +import java.io.Serializable; + +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ORDER; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_FIELD; + + +/** + * The Class SortFilter. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 6, 2021 + */ +public class SortFilter implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -4004094263090373626L; + + private RECORD_FIELD orderByField; + + private ORDER order; + + + /** + * Instantiates a new sort filter. + */ + public SortFilter() { + + } + + + /** + * Instantiates a new sort filter. + * + * @param orderByField the order by field + * @param order the order + */ + public SortFilter(RECORD_FIELD orderByField, ORDER order) { + this.orderByField = orderByField; + this.order = order; + } + + /** + * Gets the order by field. + * + * @return the order by field + */ + public RECORD_FIELD getOrderByField() { + return orderByField; + } + + /** + * Gets the order. + * + * @return the order + */ + public ORDER getOrder() { + return order; + } + + /** + * Sets the order by field. + * + * @param orderByField the new order by field + */ + public void setOrderByField(RECORD_FIELD orderByField) { + this.orderByField = orderByField; + } + + /** + * Sets the order. + * + * @param order the new order + */ + public void setOrder(ORDER order) { + this.order = order; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("SortFilter [orderByField="); + builder.append(orderByField); + builder.append(", order="); + builder.append(order); + builder.append("]"); + return builder.toString(); + } + +}