You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by do...@apache.org on 2013/09/12 06:56:48 UTC

svn commit: r1522419 - /james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java

Author: dongxu
Date: Thu Sep 12 04:56:48 2013
New Revision: 1522419

URL: http://svn.apache.org/r1522419
Log:
Adding some kind of sorting in client-side. Fixed issue#83

Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java?rev=1522419&r1=1522418&r2=1522419&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java Thu Sep 12 04:56:48 2013
@@ -499,6 +499,9 @@ public class MessagesCellTable extends D
 >>>>>>> remove both of gwt-representer and gwt-dispatch dependencies, add license headers to all new files
 package org.apache.hupa.client.ui;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -540,6 +543,8 @@ import com.google.gwt.place.shared.Place
 import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.storage.client.Storage;
 import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.ColumnSortEvent.AsyncHandler;
+import com.google.gwt.user.cellview.client.ColumnSortList.ColumnSortInfo;
 import com.google.gwt.user.cellview.client.DataGrid;
 import com.google.gwt.user.cellview.client.Header;
 import com.google.gwt.user.cellview.client.RowStyles;
@@ -548,6 +553,7 @@ import com.google.gwt.view.client.Defaul
 import com.google.gwt.view.client.HasData;
 import com.google.gwt.view.client.MultiSelectionModel;
 import com.google.gwt.view.client.ProvidesKey;
+import com.google.gwt.view.client.Range;
 import com.google.inject.Inject;
 import com.google.web.bindery.requestfactory.shared.Receiver;
 import com.google.web.bindery.requestfactory.shared.ServerFailure;
@@ -560,7 +566,7 @@ public class MessagesCellTable extends D
 	private String folderName;
 	private String searchValue;
 
-	public static final int PAGE_SIZE = 25;
+	public static final int PAGE_SIZE = 100;
 
 	private HupaImageBundle imageBundle;
 	CheckboxColumn checkboxCol = new CheckboxColumn();
@@ -644,7 +650,6 @@ public class MessagesCellTable extends D
 				if (null != contactsString) {
 					for (String contact : contactsString.split(",")) {
 						contacts.add(contact.replace("[", "").replace("]", "").trim());
-
 					}
 				}
 				contactsStore.setItem(CONTACTS_STORE, contacts.toString());
@@ -670,6 +675,7 @@ public class MessagesCellTable extends D
 					} else {
 						updateRowCount(response.getRealCount(), true);
 						updateRowData(start, response.getMessages());
+					    getColumnSortList().push(dateCol);
 					}
 					hc.hideTopLoading();
 					Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@@ -787,9 +793,51 @@ public class MessagesCellTable extends D
 			dataProvider = new MessageListDataProvider();
 			dataProvider.addDataDisplay(this);
 		}
+		
+		// make table sortable
+	    AsyncHandler columnSortHandler = new AsyncHandler(this);
+	    addColumnSortHandler(columnSortHandler);
+        fromCol.setSortable(true);
+        subjectCol.setSortable(true);
+        attachedCol.setSortable(true);
+        dateCol.setSortable(true);
+        
 		refresh();
 	}
 
+	// TODO: this should be perform in the server side, but in the meanwhile it is useful
+	// some kind of sorting in client side.
+	@Override
+	public void setVisibleRangeAndClearData(Range range, boolean forceRangeChangeEvent) {
+	    final ColumnSortInfo sortInfo = getColumnSortList().get(0);
+
+	    List<Message> sortedList = new ArrayList<Message>(getVisibleItems());
+        Collections.sort(sortedList, new Comparator<Message>() {
+            public int compare(Message o1, Message o2) {
+                Column<?,?> column = sortInfo.getColumn();
+                Message a = sortInfo.isAscending() ? o1 : o2;
+                Message b = sortInfo.isAscending() ? o2 : o1;
+                if (fromCol.equals(column)) {
+                    return a.getFrom().compareToIgnoreCase(b.getFrom());
+                }
+                if (attachedCol.equals(column)) {
+                    return Boolean.valueOf(a.hasAttachment()).compareTo(Boolean.valueOf(b.hasAttachment()));
+                }
+                if (dateCol.equals(column)) {
+                    return a.getReceivedDate().compareTo(b.getReceivedDate());
+                }
+                if (subjectCol.equals(column)) {
+                    // Remove Re & Fwd, using ugly regex since replaceAll is not case-insensitive in client side.
+                    String s1 = a.getSubject().replaceAll("^([Rr][Ee]|[Ff][Ww][Dd]): (.+)$", "$2 ");
+                    String s2 = b.getSubject().replaceAll("^([Rr][Ee]|[Ff][Ww][Dd]): (.+)$", "$2 ");
+                    return s1.compareTo(s2);
+                }
+                return 0;
+            }
+        });
+        dataProvider.updateRowData(range.getStart(), sortedList);
+	}
+	
 	private String parseFolderName(final PlaceController pc) {
 		Place place = pc.getWhere();
 		if (place instanceof FolderPlace) {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org