package de.flower.rmt.ui.page.events; import de.flower.common.ui.inject.InjectorAwareObject; import de.flower.rmt.model.db.entity.User; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.model.db.entity.event.QEvent; import de.flower.rmt.service.IEventManager; import de.flower.rmt.ui.model.EventModel; import de.flower.rmt.ui.model.UserModel; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.spring.injection.annot.SpringBean; import java.util.Iterator; /** * @author flowerrrr */ public class EventDataProvider extends InjectorAwareObject implements IDataProvider<Event> { @SpringBean private IEventManager eventManager; private int itemsPerPage; private Long size; private IModel<User> userModel; private Long nextEventId; public EventDataProvider(final int itemsPerPage) { this(itemsPerPage, null); } public EventDataProvider(final int itemsPerPage, final UserModel userModel) { this.itemsPerPage = itemsPerPage; this.userModel = userModel; } @Override public Iterator<? extends Event> iterator(final int first, final int count) { int pageNum = first / itemsPerPage; return eventManager.findAll(pageNum, itemsPerPage, getUser(), QEvent.event.team).iterator(); } @Override public int size() { // method is called at least twice during rendering -> cache value if (size == null) { size = eventManager.getNumEventsByUser(getUser()); } return size.intValue(); } /** * Get the next upcoming event. */ public boolean isNextEvent(Event event) { if (nextEventId == null) { Event nextEvent = eventManager.findNextEvent(getUser()); nextEventId = (nextEvent == null) ? -1 : nextEvent.getId(); } return event.getId().equals(nextEventId); } @Override public IModel<Event> model(final Event object) { return new EventModel<Event>(object); } @Override public void detach() { this.size = null; if (userModel != null) { this.userModel.detach(); } this.nextEventId = null; } private User getUser() { return (userModel == null) ? null : userModel.getObject(); } }