blob: 62fe04c3b8e07e37ea8c1750dd07632a09001fbe [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.hupa.client.mvp;
import java.util.ArrayList;
import java.util.Iterator;
import net.customware.gwt.dispatch.client.DispatchAsync;
import net.customware.gwt.presenter.client.EventBus;
import org.apache.hupa.client.HupaCallback;
import org.apache.hupa.shared.data.ImapFolderImpl;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.shared.domain.Message;
import org.apache.hupa.shared.domain.User;
import org.apache.hupa.shared.events.FolderSelectionEvent;
import org.apache.hupa.shared.events.FolderSelectionEventHandler;
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.events.LoadMessagesEventHandler;
import org.apache.hupa.shared.events.LoginEvent;
import org.apache.hupa.shared.events.LoginEventHandler;
import org.apache.hupa.shared.events.LogoutEvent;
import org.apache.hupa.shared.events.LogoutEventHandler;
import org.apache.hupa.shared.events.MessagesReceivedEvent;
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
import org.apache.hupa.shared.proxy.IMAPFolderProxy;
=======
>>>>>>> first commit
=======
import org.apache.hupa.shared.proxy.IMAPFolderProxy;
>>>>>>> Aim to make the front end view work after the server side's IMAPFolder services RF being working, but there are issues on RF's find* method, I think.
=======
import org.apache.hupa.shared.proxy.ImapFolder;
>>>>>>> Make the ValueProxy(ImapFolder) work with Manolo's patch. Hupa can display folders in west view with RequestFactory now.
=======
>>>>>>> Allow client can use the domain entity interface.
import org.apache.hupa.shared.rpc.FetchMessages;
import org.apache.hupa.shared.rpc.FetchMessagesResult;
import com.google.gwt.gen2.table.client.MutableTableModel;
import com.google.gwt.gen2.table.client.TableModelHelper;
import com.google.gwt.gen2.table.client.TableModelHelper.Request;
import com.google.inject.Inject;
/**
* TableModel which retrieve the messages for the user
*
*/
public class MessageTableModel extends MutableTableModel<Message> {
private EventBus eventBus;
private DispatchAsync dispatcher;
private User user;
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
private IMAPFolderProxy folder;
=======
private IMAPFolder folder;
>>>>>>> first commit
=======
private IMAPFolderProxy folder;
>>>>>>> Aim to make the front end view work after the server side's IMAPFolder services RF being working, but there are issues on RF's find* method, I think.
=======
private ImapFolder folder;
>>>>>>> Make the ValueProxy(ImapFolder) work with Manolo's patch. Hupa can display folders in west view with RequestFactory now.
private String searchValue;
@Inject
public MessageTableModel(EventBus eventBus, DispatchAsync dispatcher){
this.eventBus = eventBus;
this.dispatcher = dispatcher;
// bind some Events
eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() {
public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) {
user = loadMessagesEvent.getUser();
folder = loadMessagesEvent.getFolder();
searchValue = loadMessagesEvent.getSearchValue();
}
});
eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
public void onFolderSelectionEvent(FolderSelectionEvent event) {
user = event.getUser();
folder = event.getFolder();
searchValue = null;
}
});
eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() {
public void onLogin(LoginEvent event) {
user = event.getUser();
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
folder = (IMAPFolderProxy)new IMAPFolder(user.getSettings().getInboxFolderName());
=======
folder = new IMAPFolder(user.getSettings().getInboxFolderName());
>>>>>>> first commit
=======
folder = (IMAPFolderProxy)new IMAPFolder(user.getSettings().getInboxFolderName());
>>>>>>> Aim to make the front end view work after the server side's IMAPFolder services RF being working, but there are issues on RF's find* method, I think.
=======
folder = (ImapFolder)new ImapFolderImpl(user.getSettings().getInboxFolderName());
>>>>>>> Make the ValueProxy(ImapFolder) work with Manolo's patch. Hupa can display folders in west view with RequestFactory now.
searchValue = null;
}
});
eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
public void onLogout(LogoutEvent logoutEvent) {
user = null;
folder = null;
searchValue = null;
}
});
}
@Override
public void requestRows(
final Request request,
final com.google.gwt.gen2.table.client.TableModel.Callback<Message> callback) {
// if the given user or folder is null, its safe to return an empty list
if (user == null || folder == null) {
callback.onRowsReady(request, new TableModelHelper.Response<Message>() {
@Override
public Iterator<Message> getRowValues() {
return new ArrayList<Message>().iterator();
}
});
}
dispatcher.execute(new FetchMessages(folder, request.getStartRow(), request.getNumRows(), searchValue),new HupaCallback<FetchMessagesResult>(dispatcher, eventBus) {
public void callback(final FetchMessagesResult result) {
// Update folder information before notifying presenter
folder.setMessageCount(result.getRealCount());
folder.setUnseenMessageCount(result.getRealUnreadCount());
<<<<<<< HEAD
<<<<<<< HEAD
setRowCount(result.getRealCount());
callback.onRowsReady(request, new TableModelHelper.Response<Message>() {
=======
// Notify presenter to update folder tree view
eventBus.fireEvent(new MessagesReceivedEvent(folder, result.getMessages()));
TableModelHelper.Response<Message> response = new TableModelHelper.Response<Message>() {
>>>>>>> first commit
=======
setRowCount(result.getRealCount());
callback.onRowsReady(request, new TableModelHelper.Response<Message>() {
>>>>>>> constantly changed by manolo
@Override
public Iterator<Message> getRowValues() {
if (result != null && result.getMessages() != null) {
return result.getMessages().iterator();
} else {
return new ArrayList<Message>().iterator();
}
}
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> constantly changed by manolo
});
// Notify presenter to update folder tree view
eventBus.fireEvent(new MessagesReceivedEvent(folder, result.getMessages()));
<<<<<<< HEAD
=======
};
setRowCount(result.getRealCount());
callback.onRowsReady(request,response);
>>>>>>> first commit
=======
>>>>>>> constantly changed by manolo
}
});
}
@Override
protected boolean onRowInserted(int beforeRow) {
return true;
}
@Override
protected boolean onRowRemoved(int row) {
return true;
}
@Override
protected boolean onSetRowValue(int row, Message rowValue) {
return true;
}
}