package net.thesocialos.client.view;
import java.util.Map;
import net.thesocialos.client.CacheLayer;
import net.thesocialos.client.helper.SearchArrayList;
import net.thesocialos.shared.model.SharedHistory.SHARETYPE;
import net.thesocialos.shared.model.User;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
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 ShareSend extends Composite {
private static ShareSendUiBinder uiBinder = GWT.create(ShareSendUiBinder.class);
@UiField Label lblType;
@UiField Label lblTypeValue;
@UiField(provided = true) CellList<User> cellList = new CellList<User>(new AbstractCell<User>() {
@Override
public void render(Context context, User value, SafeHtmlBuilder sb) {
if (value == null) return;
sb.appendHtmlConstant("<table class='chat_state_offline' width= '100%'>");
// Add the contact image.
sb.appendHtmlConstant("<tr><td rowspan='3'>");
if (value.getUrlAvatar() == null) sb
.appendHtmlConstant("<img src='./images/anonymous_avatar.png' width='30' height='35' />");
else
sb.appendHtmlConstant("<img src=" + value.getUrlAvatar() + " width='30' height='35' />");
sb.appendHtmlConstant("</td>");
// Add the name and address.
sb.appendHtmlConstant("<td style='font-size:95%;'>");
sb.appendEscaped(value.getName() + " " + value.getLastName());
sb.appendHtmlConstant("</td></tr><tr><td>");
sb.appendEscaped(value.getEmail());
sb.appendHtmlConstant("</td></tr></table>");
}
});
@UiField Button buttonSend;
@UiField TextBox searchBox;
@UiField TextBox txtTitle;
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();
private SHARETYPE shareType;
private String url;
interface ShareSendUiBinder extends UiBinder<Widget, ShareSend> {
}
public ShareSend() {
initWidget(uiBinder.createAndBindUi(this));
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);
cellList.setSelectionModel(selectionModel);
dataProvider = new ListDataProvider<User>(usersList);
dataProvider.addDataDisplay(cellList);
init();
handlers();
}
public ShareSend(SHARETYPE shareType, String url) {
this();
lblTypeValue.setText(shareType.name());
this.shareType = shareType;
this.url = url;
}
private void init() {
buttonSend.setEnabled(false);
usersList.clear();
dataProvider.flush();
dataProvider.refresh();
CacheLayer.ContactCalls.getContactsWithoutKey(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) {
result.remove(CacheLayer.UserCalls.getUser().getEmail());
usersList.addAll(result.values());
dataProvider.flush();
dataProvider.refresh();
}
});
}
private void handlers() {
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
buttonSend.setEnabled(true);
}
});
buttonSend.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// TODO Auto-generated method stub
if (selectionModel.getSelectedObject() != null)
CacheLayer.ContactCalls.sendShareToContact(selectionModel.getSelectedObject().getOwnKey(),
shareType, txtTitle.getText(), url, new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(Boolean result) {
/*
* Aqui haces lo que quieras. Es al terminar la subida del mensaje
*/
}
});
}
});
searchBox.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(searchBox.getText()));
// System.out.println(lista.size());
dataProvider.flush();
dataProvider.refresh();
}
});
}
}