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 super ConcessioneDV> 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();
+ }
+
+}