public GWTMessageList retrieveMessages( String folderId, int start, int pageSize, String sortField, String dir,
String[][] params ) throws Exception {
if ( folderId != null ) {
IMailbox mailbox = SessionManager.get().getMailbox();
UserAccount account = SessionManager.get().getUserAccount();
log.debug( "retrieving messages from " + folderId + " ..." );
try {
IMailFolder currentFolder = mailbox.getMailFolderById( folderId );
mailbox.setCurrentFolder( currentFolder );
Message[] msgs = currentFolder.retrieveMessages( sortField );
String quickSearchFields = MessageUtils.getParamValue( params, "fields" );
String extendedSearchFields = MessageUtils.getParamValue( params,
GWTMailConstants.EXTENDED_SEARCH_FIELDS );
// all messages with only header data
// quick search params
if ( quickSearchFields != null ) {
String quickSearchText = MessageUtils.getParamValue( params, "query" );
msgs = MessageUtils.quickFilterMessages( msgs, quickSearchFields, quickSearchText );
}
else if ( extendedSearchFields != null ) {
msgs = MessageUtils.filterMessages( currentFolder, msgs, extendedSearchFields, params );
}
boolean ascending = "ASC".equals( dir );
MessageUtils.sortMessages( msgs, sortField, ascending );
if ( msgs != null && msgs.length > 0 ) {
log.debug( "Building Array objects..." );
long time = System.currentTimeMillis();
int total_count = msgs.length;
start = Math.min( total_count - 1, start == -1 ? 0 : start );
pageSize = pageSize == -1 ? account.getPreferences().getPageCount() : pageSize;
pageSize = Math.min( pageSize, total_count - start );
Message[] pagedMessages = new Message[pageSize];
int pagedIndex = 0;
for (int msgIndex = start; msgIndex < start + pageSize; msgIndex++) {