package net.thesocialos.client.presenter;
import java.util.ArrayList;
import java.util.List;
import net.thesocialos.client.CacheLayer;
import net.thesocialos.client.TheSocialOS;
import net.thesocialos.client.app.AppConstants;
import net.thesocialos.client.app.IApplication;
import net.thesocialos.client.desktop.DesktopEventOnClose;
import net.thesocialos.client.desktop.DesktopEventOnMaximize;
import net.thesocialos.client.desktop.DesktopEventOnMinimize;
import net.thesocialos.client.desktop.DesktopEventOnTop;
import net.thesocialos.client.desktop.DesktopEventonEndDrag;
import net.thesocialos.client.desktop.DesktopUnit;
import net.thesocialos.client.desktop.window.Footer;
import net.thesocialos.client.desktop.window.MyCaption;
import net.thesocialos.client.desktop.window.events.WindowCloseEvent;
import net.thesocialos.client.desktop.window.events.WindowEndDragEvent;
import net.thesocialos.client.desktop.window.events.WindowEventHandler;
import net.thesocialos.client.desktop.window.events.WindowMaximizeEvent;
import net.thesocialos.client.desktop.window.events.WindowMinimizeEvent;
import net.thesocialos.client.desktop.window.events.WindowOnTopEvent;
import net.thesocialos.client.desktop.window.events.WindowResizeEvent;
import net.thesocialos.client.event.ShareHistoryChangEvent;
import net.thesocialos.client.event.ShareHistoryChngeEventHandler;
import net.thesocialos.shared.model.SharedHistory;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.WindowPanelLayout;
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 SharedUnit extends DesktopUnit implements IApplication {
Display display;
SingleSelectionModel<SharedHistory> selectionModel;
ListDataProvider<SharedHistory> dataProvider;
ArrayList<SharedHistory> historyList = new ArrayList<SharedHistory>();
/*
* Los modelos de la cajas de seleccion de los usuarios
*/
ProvidesKey<SharedHistory> KEY_USERS_PROVIDER;
Image image = new Image();
Frame frame = new Frame();
public SharedUnit(Display display) {
super(AppConstants.SHAREDMANAGER, "SharedManager", new WindowPanelLayout(false, false, new MyCaption(),
new Footer()), TypeUnit.WINDOW, false);
this.display = display;
handlers();
windowDisplay.getWindow().add(display.asWidget());
setMaximizable(false);
windowDisplay.setResizable(false);
KEY_USERS_PROVIDER = new ProvidesKey<SharedHistory>() {
@Override
public Object getKey(SharedHistory item) {
return item == null ? null : item.getKey();
}
};
selectionModel = new SingleSelectionModel<SharedHistory>(KEY_USERS_PROVIDER);
display.getComponentsList().setSelectionModel(selectionModel);
dataProvider = new ListDataProvider<SharedHistory>(historyList);
dataProvider.addDataDisplay(display.getComponentsList());
frame.setWidth("382px");
frame.setHeight("297px");
image.setWidth("382px");
image.setHeight("297px");
initCellList();
}
private void populateCellList(boolean cached) {
/**
* Populate the List
*/
historyList.clear();
dataProvider.flush();
dataProvider.refresh();
CacheLayer.UserCalls.getShareHistory(cached, new AsyncCallback<List<SharedHistory>>() {
@Override
public void onSuccess(List<SharedHistory> result) {
// TODO Auto-generated method stub
historyList = (ArrayList<SharedHistory>) result;
dataProvider.setList(historyList);
dataProvider.flush();
dataProvider.refresh();
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
private void initCellList() {
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
display.getSimplePanel().clear();
switch (selectionModel.getSelectedObject().getMessageType()) {
case IMAGE:
image.setUrl(selectionModel.getSelectedObject().getData());
display.getSimplePanel().add(image);
break;
case VIDEO:
frame.setUrl(selectionModel.getSelectedObject().getData());
display.getSimplePanel().add(frame);
break;
default:
break;
}
}
});
}
public interface Display {
Widget asWidget();
CellList<SharedHistory> getComponentsList();
SimplePanel getSimplePanel();
}
@Override
public void close(AbsolutePanel absolutePanel) {
absolutePanel.remove(windowDisplay.getWindow());
windowDisplay.getWindow().setVisible(false);
}
@Override
public int getZposition() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void open(AbsolutePanel absolutePanel) {
if (!windowDisplay.getWindow().isAttached()) {
windowDisplay.setWindowTitle(getName());
absolutePanel.add(windowDisplay.getWindow(), x, y);
windowDisplay.setSize(605, 358);
windowDisplay.getWindow().setVisible(true);
populateCellList(true);
}
}
@Override
public void toZPosition(int position) {
// TODO Auto-generated method stub
}
@Override
public String getImage() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}
@Override
public void setImage(String image) {
// TODO Auto-generated method stub
}
@Override
public void setName(String name) {
// TODO Auto-generated method stub
}
private void handlers() {
windowDisplay.addWindowEvents(new WindowEventHandler() {
@Override
public void onClose(WindowCloseEvent event) {
TheSocialOS.getEventBus().fireEvent(new DesktopEventOnClose(SharedUnit.this));
}
@Override
public void onEndDrag(WindowEndDragEvent event) {
TheSocialOS.getEventBus().fireEvent(new DesktopEventonEndDrag(SharedUnit.this));
}
@Override
public void onMaximize(WindowMaximizeEvent windowMaximizeEvent) {
if (isMaximizable()) TheSocialOS.getEventBus().fireEvent(new DesktopEventOnMaximize(SharedUnit.this));
}
@Override
public void onMinimize(WindowMinimizeEvent windowMinimizeEvent) {
if (isMinimizable())
TheSocialOS.getEventBus().fireEvent(new DesktopEventOnMinimize(SharedUnit.this, false));
}
@Override
public void onTop(WindowOnTopEvent event) {
TheSocialOS.getEventBus().fireEvent(new DesktopEventOnTop(SharedUnit.this));
}
@Override
public void onResize(WindowResizeEvent event) {
}
});
TheSocialOS.getEventBus().addHandler(ShareHistoryChangEvent.TYPE, new ShareHistoryChngeEventHandler() {
@Override
public void onHistoryChange(ShareHistoryChangEvent event) {
populateCellList(false);
}
});
}
}