package net.thesocialos.client.presenter; import java.util.ArrayList; import java.util.List; import java.util.Map; import net.thesocialos.client.CacheLayer; 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.PopUpInfoContact; import net.thesocialos.shared.model.User; import com.google.gwt.dom.client.Document; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.event.dom.client.ContextMenuHandler; import com.google.gwt.event.dom.client.DomEvent; 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.HTMLPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.StackLayoutPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; 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 SearchBoxPresenter extends DesktopUnit implements IsTypeInfo { public interface Display { Widget asWidget(); Image getAvatarIMG(); CellList<User> getComponentsList(); Label getLabelFriends(); Label getLabelGroups(); Label getLabelInfo(); Label getLabelInvite(); VerticalPanel getSearchBoxPanel(); StackLayoutPanel getStackLayout(); TextBox getSearchBox(); HTMLPanel getHtmlPanel(); void setComponentsList(CellList<User> cellList); } SingleSelectionModel<User> selectionModel; ListDataProvider<User> dataProvider; /* * Los modelos de la cajas de seleccion de los usuarios */ ProvidesKey<User> KEY_USERS_PROVIDER; SearchArrayList usersList = new SearchArrayList(); /* * Los modelos de la cajas de seleccion de los grupos */ ProvidesKey<Object> KEY_GROUPS_PROVIDER; List<Object> groupsList = new ArrayList<Object>(); Display display; public SearchBoxPresenter(Display display) { super(AppConstants.SEARCHBOX, "Contacts Search", null, TypeUnit.INFO, false); this.display = display; KEY_USERS_PROVIDER = new ProvidesKey<User>() { @Override public Object getKey(User item) { return item == null ? null : item.getEmail(); } }; /* * Inicializado el adaptador de la cellList de usuario */ selectionModel = new SingleSelectionModel<User>(KEY_USERS_PROVIDER); display.getComponentsList().setSelectionModel(selectionModel); dataProvider = new ListDataProvider<User>(usersList); dataProvider.addDataDisplay(display.getComponentsList()); handlers(); } private void addPetitionContact(User contactUser) { CacheLayer.ContactCalls.addPetitionContact(contactUser, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { System.out.println(caught.getMessage()); } @Override public void onSuccess(Boolean result) { System.out.println(result); } }); } @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("contactsBoxes_close", true); display.getHtmlPanel().setStyleName("appManager_open", false); timer.schedule(500); // absolutePanel.remove(display.asWidget()); } @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(); } /** * Obtiene todos los usuarios del servidor */ private void getUsers() { usersList.clear(); dataProvider.flush(); dataProvider.refresh(); CacheLayer.ContactCalls.getUsers(true, new AsyncCallback<Map<String, User>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(Map<String, User> result) { // display.setComponentsList(new CellList<User>(usersCell())); result.remove(CacheLayer.UserCalls.getUser().getEmail()); usersList.addAll(result.values()); dataProvider.flush(); dataProvider.refresh(); } }); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { if (CacheLayer.ContactCalls.isContact(selectionModel.getSelectedObject().getOwnKey())) display .getLabelInvite().setVisible(false); else display.getLabelInvite().setVisible(true); if (selectionModel.getSelectedObject().getUrlAvatar() == null) display.getAvatarIMG().setUrl( "./images/anonymous_avatar.png"); else display.getAvatarIMG().setUrl(selectionModel.getSelectedObject().getUrlAvatar()); } }); display.getComponentsList().addDomHandler(new ContextMenuHandler() { @Override public void onContextMenu(ContextMenuEvent event) { DomEvent.fireNativeEvent( Document.get().createClickEvent(0, event.getNativeEvent().getScreenX(), event.getNativeEvent().getScreenY(), event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY(), false, false, false, false), display.getComponentsList()); } }, ContextMenuEvent.getType()); } @Override public int getZposition() { // TODO Auto-generated method stub return 0; } /* * Eventos de la interfaz */ private void handlers() { display.getLabelFriends().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { display.getStackLayout().showWidget(0); } }); /* * display.getLabelGroups().addClickHandler(new ClickHandler() { * @Override public void onClick(ClickEvent event) { display.getStackLayout().showWidget(1); } }); */ display.getLabelInvite().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { User contactUser; if ((contactUser = selectionModel.getSelectedObject()) != null) addPetitionContact(contactUser); } }); display.getLabelInfo().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { User contactUser; if ((contactUser = selectionModel.getSelectedObject()) != null) { PopUpInfoContact contactInfoPopup = new PopUpInfoContact(contactUser.getEmail(), contactUser .getName(), contactUser.getLastName(), contactUser.getUrlAvatar()); contactInfoPopup.setGlassEnabled(true); contactInfoPopup.center(); contactInfoPopup.show(); } } }); display.getSearchBox().addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { // TODO Auto-generated method stub // System.out.println(display.getSearchBox().getText()); // ArrayList<User> lista = ; dataProvider.setList(usersList.getSearchUsers(display.getSearchBox().getText())); // System.out.println(lista.size()); dataProvider.flush(); dataProvider.refresh(); } }); } @Override public void open(AbsolutePanel absolutePanel) { if (!display.asWidget().isAttached()) { absolutePanel.add(display.asWidget(), x, y); display.asWidget().setVisible(true); display.getHtmlPanel().setStyleName("contactsBoxes_open", true); display.getHtmlPanel().setStyleName("contactsBoxes_close", false); getUsers(); } } @Override public void setPosition(int x, int y) { 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) { // TODO Auto-generated method stub } }