com.cubeia.games.poker.admin.wicket.pages.tournaments.history.ShowTournament.java Source code

Java tutorial

Introduction

Here is the source code for com.cubeia.games.poker.admin.wicket.pages.tournaments.history.ShowTournament.java

Source

/**
 * Copyright (C) 2012 Cubeia Ltd <info@cubeia.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.cubeia.games.poker.admin.wicket.pages.tournaments.history;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.wicket.Component;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;

import com.cubeia.games.poker.admin.service.history.HistoryService;
import com.cubeia.games.poker.admin.wicket.BasePage;
import com.cubeia.games.poker.admin.wicket.pages.history.HandHistory;
import com.cubeia.network.shared.web.wicket.util.LabelLinkPanel;
import com.cubeia.network.shared.web.wicket.util.ParamBuilder;
import com.cubeia.network.web.user.UserSummary;
import com.cubeia.poker.tournament.history.api.HistoricTournament;
import com.cubeia.poker.tournament.history.api.PlayerPosition;
import com.cubeia.poker.tournament.history.api.TournamentEvent;

@SuppressWarnings("serial")
@AuthorizeInstantiation({ "ADMIN", "ROLE_USER" })
public class ShowTournament extends BasePage {

    private static final Logger log = Logger.getLogger(ShowTournament.class);

    @SpringBean
    private HistoryService historyService;

    public ShowTournament(PageParameters parameters) {
        super(parameters);
        String historicTournamentId = parameters.get("historicTournamentId").toString();
        log.debug("Tourn id " + historicTournamentId);
        HistoricTournament tournament = historyService.findTournamentByHistoricId(historicTournamentId);
        addSummary(tournament);
        addResultList(tournament);
        addEvents(tournament);
        addTables(tournament);
    }

    private void addResultList(final HistoricTournament tournament) {
        DataView<PlayerPosition> players = new DataView<PlayerPosition>("players",
                new ListDataProvider<PlayerPosition>(tournament.getPositions())) {

            private static final long serialVersionUID = 1908334758912501993L;

            @Override
            protected void populateItem(Item<PlayerPosition> item) {
                PlayerPosition position = item.getModelObject();
                PageParameters userId = new PageParameters().add("userId", position.getPlayerId());
                BookmarkablePageLink<Object> player = new BookmarkablePageLink<>("player", UserSummary.class,
                        userId);
                player.add(new Label("playerId", position.getPlayerId()));
                item.add(player);
                item.add(new Label("position", String.valueOf(position.getPosition())));
                item.add(new Label("payout", position.getPayout().toPlainString()));
            }
        };

        add(players);
    }

    private void addSummary(HistoricTournament tournament) {
        log.debug("Tournament: " + tournament);
        add(new Label("historicTournamentId", tournament.getId()));
        add(new Label("tournamentId", String.valueOf(tournament.getTournamentId())));
        add(new Label("tournamentTemplateId", String.valueOf(tournament.getTournamentTemplateId())));
        add(new Label("name", tournament.getTournamentName()));
        add(new Label("startTime", new Date(tournament.getStartTime()).toString()));
        add(new Label("endTime", new Date(tournament.getEndTime()).toString()));
    }

    private void addEvents(final HistoricTournament tournament) {
        DataView<TournamentEvent> events = new DataView<TournamentEvent>("events",
                new ListDataProvider<TournamentEvent>(tournament.getEvents())) {
            @Override
            protected void populateItem(Item<TournamentEvent> item) {
                TournamentEvent event = item.getModelObject();

                item.add(new Label("event", event.getEvent()));
                item.add(new Label("details", event.getDetails()));
                item.add(new Label("time", new Date(event.getTimestamp()).toString()));
            }
        };
        add(events);
    }

    private void addTables(final HistoricTournament tournament) {
        List<IColumn<String, String>> columns = new ArrayList<IColumn<String, String>>();
        columns.add(new AbstractColumn<String, String>(new Model<String>("tableId")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void populateItem(Item<ICellPopulator<String>> item, String componentId, IModel<String> model) {
                String tableId = model.getObject();
                Component panel = new LabelLinkPanel(componentId, tableId, HandHistory.class,
                        ParamBuilder.params("tableId", tableId));
                item.add(panel);
            }

            @Override
            public boolean isSortable() {
                return false;
            }

        });
        add(new AjaxFallbackDefaultDataTable<String, String>("tables", columns,
                new TableProvider(tournament.getTables()), 8));
    }

    @Override
    public String getPageTitle() {
        return "Tournament history";
    }

    private static class TableProvider extends SortableDataProvider<String, String> {

        private List<String> items;

        private TableProvider(List<String> items) {
            this.items = items;
        }

        @Override
        public Iterator<? extends String> iterator(long first, long count) {
            return items.iterator();
        }

        @Override
        public long size() {
            return items.size();
        }

        @Override
        public IModel<String> model(String string) {
            return Model.of(string);
        }
    }
}