package hu.sch.web.wicket.components.tables; import hu.sch.domain.Membership; import hu.sch.web.wicket.components.customlinks.GroupLink; import hu.sch.web.wicket.components.customlinks.LinkPanel; import hu.sch.web.wicket.components.customlinks.OldBoyLinkPanel; import hu.sch.web.wicket.util.SortableList; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; /** * Itt listázzuk ki a felhasználó tagságait. * * @author messo * @since 2.3.1 */ public abstract class UsersMembershipTable implements Serializable { AjaxFallbackDefaultDataTable<Membership, String> table; MySortableDataProvider provider; public UsersMembershipTable(String id, List<Membership> memberships, boolean isOwnProfile, int rowsPerPage) { provider = new MySortableDataProvider(memberships); List<IColumn<Membership, String>> columns = new ArrayList<IColumn<Membership, String>>(5); columns.add(new PanelColumn<Membership>("Kör neve", Membership.SORT_BY_GROUP) { @Override public Panel getPanel(String componentId, Membership ms) { return new GroupLink(componentId, ms.getGroup()); } }); columns.add(new PropertyColumn<Membership, String>(new Model<String>("Betöltött poszt"), Membership.SORT_BY_POSTS, "membership")); columns.add(new DateIntervalPropertyColumn<Membership>( new Model<String>("Tagsági idő"), Membership.SORT_BY_INTERVAL, "start", "end")); if (isOwnProfile) { // csak akkor kell ez az oszlop, ha ez a mi táblázatunk columns.add(new LinkColumn<Membership>("Öregtaggá válás?") { @Override protected boolean isVisible(Membership ms) { return ms.getEnd() == null; } @Override public void onClick(Membership ms) { onWannabeOldBoy(ms); } @Override protected LinkPanel getLinkPanel(String componentId, Membership ms) { return new OldBoyLinkPanel(componentId, ms); } }); } table = new AjaxFallbackDefaultDataTable<Membership, String>(id, columns, provider, rowsPerPage); provider.setSort(Membership.SORT_BY_GROUP, SortOrder.ASCENDING); } public AjaxFallbackDefaultDataTable<Membership, String> getDataTable() { return table; } protected abstract void onWannabeOldBoy(Membership ms); static class MySortableDataProvider extends SortableDataProvider<Membership, String> { private SortableList<Membership> items; private MySortableDataProvider(List<Membership> items) { this.items = new SortableList<Membership>(items); } @Override public Iterator<? extends Membership> iterator(long first, long count) { items.sort(getSort()); return items.getList().subList((int) first, (int) (first + count)).iterator(); } @Override public long size() { return items.size(); } @Override public IModel<Membership> model(Membership ms) { return new LoadableDetachableModel<Membership>(ms) { @Override protected Membership load() { // TODO(messo): ilyenkor mi van? :) return new Membership(); } }; } } }