package net.thesocialos.client.presenter; import java.util.Iterator; import java.util.List; import java.util.Map; import net.thesocialos.client.CacheLayer; import net.thesocialos.client.TheSocialOS; import net.thesocialos.client.app.AppConstants; import net.thesocialos.client.desktop.DesktopUnit; import net.thesocialos.client.desktop.IsTypeInfo; import net.thesocialos.client.helper.SearchArrayList; import net.thesocialos.client.view.AccountText; import net.thesocialos.client.view.LabelText; import net.thesocialos.shared.model.Account; import net.thesocialos.shared.model.Facebook; import net.thesocialos.shared.model.FlickR; import net.thesocialos.shared.model.Google; import net.thesocialos.shared.model.Group; import net.thesocialos.shared.model.Twitter; import net.thesocialos.shared.model.User; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DecoratedTabPanel; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.ProvidesKey; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; public class ContactsPresenter extends DesktopUnit implements IsTypeInfo { public interface Display { Widget asWidget(); Button GetBtnUserPrivateMessage(); Button GetBtnUserSearchPrivateMessage(); LabelText getContactName(); // Users LabelText getContactSearchName(); LabelText getContactSearchSurname(); LabelText getContactSurname(); TextArea getBio(); HorizontalPanel getContatcsMenu(); CellList<Group> getGroupListBox(); Label getGroupName(); Label getGroupSearchName(); Label getGroupSize(); Label GetGroupSizeCount(); Label GetGroupSizeCountSearch(); Label GetGroupSizeSearch(); DecoratedTabPanel getGroupUsersPanel(); Image getImageFriend(); Image getImageGroup(); Image getImageSearchContact(); Image getImageSearchGroup(); TextBox getSearchBox(); CellList<User> getUserListBox(); AccountText getAccountFlickR(); AccountText getAccountFacebook(); AccountText getAccountTwitter(); AccountText getAccountGoogle(); HTMLPanel getHtmlPanel(); } Display display; List<String> ListContacts; List<String> ListGroups; /* * Los modelos de la cajas de seleccion de los contactos */ ProvidesKey<User> KEY_PROVIDER; SingleSelectionModel<User> contactSelectionModel; ListDataProvider<User> contactDataProvider; SearchArrayList contactList; public ContactsPresenter(Display display) { super(AppConstants.CONTACTS, "Contacts", null, TypeUnit.INFO, false); this.display = display; KEY_PROVIDER = new ProvidesKey<User>() { @Override public Object getKey(User item) { return item == null ? null : item.getEmail(); } }; contactSelectionModel = new SingleSelectionModel<User>(KEY_PROVIDER); } /* * Rpc Secction */ @Override public void close(final AbsolutePanel absolutePanel) { Timer timer = new Timer() { @Override public void run() { absolutePanel.remove(display.asWidget()); display.asWidget().setVisible(false); } }; display.getHtmlPanel().setStyleName("contacts_close", true); display.getHtmlPanel().setStyleName("contacts_open", false); timer.schedule(500); } @Override public int getWidth() { return display.asWidget().getOffsetWidth(); } @Override public int getHeight() { return display.asWidget().getOffsetHeight(); } @Override public int getAbsoluteLeft() { return display.asWidget().getAbsoluteLeft(); } @Override public int getAbsoluteTop() { return display.asWidget().getAbsoluteTop(); } public HorizontalPanel getContactsPresenter() { return display.getContatcsMenu(); } private void getFriends() { // Indica la variable que ser� seleccionada como key // Crea una clase SingleSelectionModel y la inicializas con la key anterior // Le indicas a la cellList el tipo de seleccion que vas a usar display.getUserListBox().setSelectionModel(contactSelectionModel); contactList = new SearchArrayList(); contactDataProvider = new ListDataProvider<User>(contactList); CacheLayer.ContactCalls.getContactsWithoutKey(false, new AsyncCallback<Map<String, User>>() { @Override public void onFailure(Throwable caught) { contactDataProvider.addDataDisplay(display.getUserListBox()); } @Override public void onSuccess(Map<String, User> result) { // TODO Auto-generated method stub Iterator<User> iterator = result.values().iterator(); while (iterator.hasNext()) contactList.add(iterator.next()); contactDataProvider.addDataDisplay(display.getUserListBox()); } }); handlers(); } @Override public int getZposition() { return 0; } private void handlers() { // Handler de la CellList de Contacts contactSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { display.getAccountFacebook().setAccounts(TheSocialOS.getConstants().empty()); display.getAccountGoogle().setAccounts(TheSocialOS.getConstants().empty()); display.getAccountTwitter().setAccounts(TheSocialOS.getConstants().empty()); display.getAccountFlickR().setAccounts(TheSocialOS.getConstants().empty()); display.getAccountGoogle().disableAccount(); display.getAccountFacebook().disableAccount(); display.getAccountFlickR().disableAccount(); display.getAccountTwitter().disableAccount(); display.getContactName().setText(contactSelectionModel.getSelectedObject().getName()); display.getContactSurname().setText(contactSelectionModel.getSelectedObject().getLastName()); display.getBio().setText(contactSelectionModel.getSelectedObject().getBio()); if (contactSelectionModel.getSelectedObject().getUrlAvatar() != null) display.getImageFriend().setUrl( contactSelectionModel.getSelectedObject().getUrlAvatar()); else display.getImageFriend().setUrl("/images/anonymous_avatar.png"); CacheLayer.ContactCalls.getContactAccounts(contactSelectionModel.getSelectedObject().getOwnKey(), false, new AsyncCallback<List<Account>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(List<Account> result) { Iterator<Account> iterator = result.iterator(); while (iterator.hasNext()) { Account account = iterator.next(); if (account instanceof Facebook) display.getAccountFacebook().setAccounts(account.getUsername()); if (account instanceof FlickR) display.getAccountFlickR().setAccounts(account.getUsername()); if (account instanceof Google) display.getAccountGoogle().setAccounts(account.getUsername()); if (account instanceof Twitter) display.getAccountTwitter().setAccounts(account.getUsername()); } } }); } }); display.getSearchBox().addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { // TODO Auto-generated method stub /* * new RPCXSRF<List<User>>(userService) { * @Override protected void XSRFcallService(AsyncCallback<List<User>> cb) { * userService.getFriendsSuggestionList(display.getSearchBox().getText(), cb); } public void * onSuccess(List<User> returnUsers){ System.out.println(returnUsers.size()); } public void * onFailure(Throwable caught){ } }.retry(3); */ /* * CacheLayer.ContactCalls.getContactsWithoutKey(false, new AsyncCallback<Map<String, User>>() { * @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } * @Override public void onSuccess(Map<String, User> result) { String text[] = * display.getSearchBox().getText().split(" "); if (text != null && text.length > 0) { // * display.getUserListBox(). contactList.clear(); Iterator<User> iterator = result.values().iterator(); * while (iterator.hasNext()) { User contact = iterator.next(); if (contact.getName().contains(text[0])) * contactList.add(contact); } contactDataProvider.flush(); contactDataProvider.refresh(); } } }); */ contactDataProvider.setList(contactList.getSearchUsers(display.getSearchBox().getText())); // System.out.println(lista.size()); contactDataProvider.flush(); contactDataProvider.refresh(); } }); } @Override public void open(AbsolutePanel absolutePanel) { absolutePanel.add(display.asWidget()); display.asWidget().setVisible(true); getFriends(); display.getHtmlPanel().setStyleName("contacts_open", true); display.getHtmlPanel().setStyleName("contacts_close", false); } @Override public void setPosition(int x, int y) { // TODO Auto-generated method stub this.x = x; this.y = y; } @Override public void setSize(int height, int width) { // TODO Auto-generated method stub } @Override public void toBack() { } @Override public void toFront() { } @Override public void toZPosition(int position) { } }