package org.exoplatform.sample.webui.component;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.exoplatform.sample.webui.component.bean.User;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIContainer;
import org.exoplatform.webui.core.UIRepeater;
import org.exoplatform.webui.core.UIVirtualList;
import org.exoplatform.webui.core.lifecycle.UIContainerLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
@ComponentConfig(lifecycle = UIContainerLifecycle.class, events = {
@EventConfig(listeners = UISampleVirtualList.ViewActionListener.class),
@EventConfig(listeners = UISampleVirtualList.EditActionListener.class),
@EventConfig(listeners = UISampleVirtualList.DeleteActionListener.class) })
public class UISampleVirtualList extends UIContainer {
public static final String BEAN_ID = "userName";
public static final String[] BEAN_NAMES = { BEAN_ID, "favoriteColor", "position", "dateOfBirth" };
public static final String[] ACTIONS = { "View", "Edit", "Delete" };
public UISampleVirtualList() throws Exception {
UIRepeater uiRepeater = createUIComponent(UIRepeater.class, null, null);
uiRepeater.configure(BEAN_ID, BEAN_NAMES, ACTIONS);
uiRepeater.setSource(makeDataSource());
UIVirtualList uiVirtualList = addChild(UIVirtualList.class, null, null);
uiVirtualList.setUIComponent(uiRepeater);
}
public void showPopupMessage(String msg) {
WebuiRequestContext rcontext = WebuiRequestContext.getCurrentInstance();
rcontext.getUIApplication().addMessage(new ApplicationMessage(msg, null));
}
@Override
public void processRender(WebuiRequestContext context) throws Exception {
UIVirtualList uiVirtualList = getChild(UIVirtualList.class);
UIRepeater uiRepeater = uiVirtualList.getRepeater();
uiRepeater.setSource(makeDataSource());
super.processRender(context);
}
private Iterator<List<?>> makeDataSource() {
final List<User> userList = makeUserList();
final int pageSize = 5;
Iterator<List<?>> iterator = new Iterator<List<?>>() {
int currentIndex = 0;
@Override
public boolean hasNext() {
return currentIndex < userList.size();
}
@Override
public List<?> next() {
if (hasNext()) {
List<User> list = new ArrayList<User>(pageSize);
for (int i = currentIndex; i < currentIndex + pageSize; i++) {
if (i < userList.size()) {
list.add(userList.get(i));
} else {
break;
}
}
//
currentIndex += pageSize;
return list;
} else {
return null;
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
return iterator;
}
private List<User> makeUserList() {
List<User> userList = new ArrayList<User>();
for (int i = 0; i < 30; i++) {
userList.add(new User("user " + i, "color " + i, "position " + i, new Date()));
}
return userList;
}
public static class ViewActionListener extends EventListener<UISampleVirtualList> {
@Override
public void execute(Event<UISampleVirtualList> event) throws Exception {
event.getSource().showPopupMessage("View " + event.getRequestContext().getRequestParameter(OBJECTID));
}
}
public static class EditActionListener extends EventListener<UISampleVirtualList> {
@Override
public void execute(Event<UISampleVirtualList> event) throws Exception {
event.getSource().showPopupMessage("Edit " + event.getRequestContext().getRequestParameter(OBJECTID));
}
}
public static class DeleteActionListener extends EventListener<UISampleVirtualList> {
@Override
public void execute(Event<UISampleVirtualList> event) throws Exception {
event.getSource().showPopupMessage("Delete " + event.getRequestContext().getRequestParameter(OBJECTID));
}
}
}