package net.thesocialos.client.chat;
import java.util.HashMap;
import java.util.Iterator;
import net.thesocialos.client.CacheLayer;
import net.thesocialos.client.app.AppConstants;
import net.thesocialos.client.chat.view.ChatBlockView;
import net.thesocialos.client.desktop.DesktopUnit;
import net.thesocialos.shared.model.User;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.objectify.Key;
public class ListChatBlockPresenter extends DesktopUnit {
Display display;
HashMap<Key<User>, ChatBlockView> conversationsBlock = new HashMap<Key<User>, ChatBlockView>();
public ListChatBlockPresenter(Display display) {
super(AppConstants.CHAT, "ChatBlock", null, TypeUnit.STATIC, true);
this.display = display;
}
public interface Display {
Widget asWidget();
HorizontalPanel getHConverPanel();
}
@Override
public void close(AbsolutePanel absolutePanel) {
// TODO Auto-generated method stub
}
@Override
public int getZposition() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void open(AbsolutePanel absolutePanel) {
absolutePanel.add(display.asWidget());
}
@Override
public void toZPosition(int position) {
// TODO Auto-generated method stub
}
/**
* Add a conversationBlock in the horizontalPanel
*
* @param userKey
*/
public void addConvesationBlock(final Key<User> userKey) {
if (conversationsBlock.containsKey(userKey)) return;
CacheLayer.ContactCalls.getContact(userKey, new AsyncCallback<User>() {
@Override
public void onSuccess(User result) {
conversationsBlock.put(userKey, new ChatBlockView(userKey, result.getUrlAvatar()));
if (!display.asWidget().isVisible()) conversationsBlock.get(userKey).setActivated(true);
display.getHConverPanel().add(conversationsBlock.get(userKey));
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
/**
* Remove a ConversationBlock in the panel
*
* @param userKey
* @return true if success or false if has a problem
*/
public boolean removeConversationBlock(Key<User> userKey) {
if (!conversationsBlock.containsKey(userKey)) return false;
boolean close = display.getHConverPanel().remove(conversationsBlock.get(userKey));
conversationsBlock.remove(userKey);
return close;
}
/**
* Activate the animation of the userKey conversation
*
* @param userKey
*/
public void messagePending(Key<User> userKey) {
if (!conversationsBlock.containsKey(userKey)) return;
conversationsBlock.get(userKey).messagesPending(true);
}
/**
* Activate the ConversationBlock for animation
*
* @param userKey
* @param activation
* animation on if true
*/
public void setActivateConversationBlock(Key<User> userKey, boolean activation) {
if (!conversationsBlock.containsKey(userKey)) return;
conversationsBlock.get(userKey).setActivated(activation);
}
/**
* Modify the conversations block to true except one
*
* @param userKey
*/
public void modifyConversationsBlock(Key<User> userKey) {
Iterator<ChatBlockView> iterator = conversationsBlock.values().iterator();
while (iterator.hasNext())
iterator.next().setActivated(true);
conversationsBlock.get(userKey).setActivated(false);
}
@Override
public void toBack() {
}
@Override
public void toFront() {
}
/**
* Hide the chatBlocks
*
* @param hide
*/
public void hide(boolean hide) {
display.asWidget().setVisible(!hide);
}
}