Android Open Source - magicAnnotator Game Service Impl






From Project

Back to project page magicAnnotator.

License

The source code is released under:

GNU General Public License

If you think the Android project magicAnnotator listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Magic Annotator - The only thing you need to write down whatever you want.
 * Copyright (C) 2013 Nahuel Barrios <barrios.nahuel@gmail.com>.
 *//  w w w. jav a 2  s  . c  o  m
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU 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 General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public License
 *     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * GameServiceImpl.java Created by: Nahuel Barrios: 16/03/2012, 05:21:36.
 */
package com.nbempire.android.magicannotator.service.impl;

import com.nbempire.android.magicannotator.domain.Player;
import com.nbempire.android.magicannotator.domain.Team;
import com.nbempire.android.magicannotator.exception.InvalidNumberOfSelectedPlayersException;
import com.nbempire.android.magicannotator.exception.TeamShouldHasPlayersException;
import com.nbempire.android.magicannotator.exception.UserException;
import com.nbempire.android.magicannotator.service.GameService;
import com.nbempire.android.magicannotator.service.PlayerService;
import com.nbempire.android.magicannotator.util.ExpandableArrayList;
import com.nbempire.android.magicannotator.util.ExpandableGroup;
import com.nbempire.android.magicannotator.util.ExpandableList;
import com.nbempire.android.magicannotator.util.RandomGenerator;

import java.util.ArrayList;
import java.util.List;

/**
 * Implementation of the GameService interface.
 *
 * @author Nahuel Barrios.
 * @since 1
 */
public abstract class GameServiceImpl implements GameService {

    /**
     * Service for the Player entity.
     */
    private final PlayerService playerService = new PlayerServiceImpl();

    public List<Team> makeTeams(List<Player> players) throws UserException {
        if (!this.hasValidNumberOfSelectedPlayers(players.size())) {
            throw new InvalidNumberOfSelectedPlayersException(this.getInvalidNumberOfSelectedPlayersExceptionMessage());
        }

        return this.makeRandomTeams(players);
    }

    public ExpandableList getExpandableTeams(List<Team> teams) throws TeamShouldHasPlayersException {
        ExpandableList result = new ExpandableArrayList();

        validateTeams(teams);

        for (Team eachTeam : teams) {
            result.add(new ExpandableGroup(eachTeam.getLabel(), playerService.getExpandablePlayers(eachTeam.getPlayers())));
        }

        return result;
    }

    /**
     * Validate if each Team from the specified list of teams has at least one player.
     *
     * @param teams
     *         The list of teams to validate.
     *
     * @throws com.nbempire.android.magicannotator.exception.TeamShouldHasPlayersException
     *         When any of the specified teams hasn't got any players.
     * @since 15
     */
    private void validateTeams(List<Team> teams) throws TeamShouldHasPlayersException {
        for (Team eachTeam : teams) {
            if (eachTeam.getPlayers().isEmpty()) {
                throw new TeamShouldHasPlayersException();
            }
        }
    }

    /**
     * Make a list of teams by selecting randomly each player from the specified list of players.
     *
     * @param players
     *         The list of playes which the teams will be created.
     *
     * @return The generated list of teams.
     *
     * @since 1
     */
    private List<Team> makeRandomTeams(List<Player> players) {
        List<Team> teams = new ArrayList<Team>();

        RandomGenerator<Player> generator = new RandomGenerator<Player>(players);

        Team firstGroup = new Team(this.getFirstTeamLabel());
        Team secondGroup = new Team(this.getSecondTeamLabel());

        int limit = this.getTeamPlayersLimit(players.size());
        for (int counter = 1; generator.hasNext(); counter++) {
            Player player = generator.next();
            if (counter <= limit) {
                firstGroup.addPlayer(player);
            } else {
                secondGroup.addPlayer(player);
            }
        }

        if (!firstGroup.getPlayers().isEmpty()) {
            teams.add(firstGroup);
        }
        if (!secondGroup.getPlayers().isEmpty()) {
            teams.add(secondGroup);
        }

        return teams;
    }

    /**
     * Gets the label to show to the user for the first team.
     *
     * @return String with the label to show to the user.
     *
     * @since 1
     */
    protected abstract String getFirstTeamLabel();

    /**
     * Gets the label to show to the user for the second team.
     *
     * @return String with the label to show to the user.
     *
     * @since 1
     */
    protected abstract String getSecondTeamLabel();

    /**
     * Calculates the maximum number of players per team based on the specified number of {@code selectedPlayers}.
     *
     * @param selectedPlayers
     *         The number of players selected for the annotator.
     *
     * @return An integer with the maximum number of players per team.
     *
     * @since 1
     */
    protected abstract int getTeamPlayersLimit(int selectedPlayers);

    /**
     * Validates for each specific game when the number of selected players is valid/invalid.
     *
     * @param numberOfPlayers
     *         The current number of selected players.
     *
     * @return {@code true} when the number of players is valid. Otherwise {@code false}.
     *
     * @since 1
     */
    protected abstract boolean hasValidNumberOfSelectedPlayers(int numberOfPlayers);

    /**
     * Gets the message to show to the user when the number of selected players is invalid.
     *
     * @return String with the message to the user.
     *
     * @since 1
     */
    protected abstract String getInvalidNumberOfSelectedPlayersExceptionMessage();
}




Java Source Code List

com.nbempire.android.magicannotator.AppParameter.java
com.nbempire.android.magicannotator.GameKeys.java
com.nbempire.android.magicannotator.MagicAnnotatorApp.java
com.nbempire.android.magicannotator.component.activity.AboutActivity.java
com.nbempire.android.magicannotator.component.activity.ChooseAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.ChoosePlayersActivity.java
com.nbempire.android.magicannotator.component.activity.StartUpActivity.java
com.nbempire.android.magicannotator.component.activity.ViewTeamsActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.ChanchoAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.GenericAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.GolfAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.MarketAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.TrucoAnnotatorActivity.java
com.nbempire.android.magicannotator.component.activity.annotator.TuteAnnotatorActivity.java
com.nbempire.android.magicannotator.dao.MarketItemDao.java
com.nbempire.android.magicannotator.dao.PlayerDao.java
com.nbempire.android.magicannotator.dao.impl.MarketItemDaoImpl.java
com.nbempire.android.magicannotator.dao.impl.PlayerDaoImpl.java
com.nbempire.android.magicannotator.domain.Activities.java
com.nbempire.android.magicannotator.domain.MarketItem.java
com.nbempire.android.magicannotator.domain.Player.java
com.nbempire.android.magicannotator.domain.Team.java
com.nbempire.android.magicannotator.domain.game.Chancho.java
com.nbempire.android.magicannotator.domain.game.Game.java
com.nbempire.android.magicannotator.domain.game.Truco.java
com.nbempire.android.magicannotator.domain.game.TuteScores.java
com.nbempire.android.magicannotator.domain.game.Tute.java
com.nbempire.android.magicannotator.exception.InvalidNumberOfSelectedPlayersException.java
com.nbempire.android.magicannotator.exception.TeamShouldHasPlayersException.java
com.nbempire.android.magicannotator.exception.UserException.java
com.nbempire.android.magicannotator.listener.TrucoScoreListener.java
com.nbempire.android.magicannotator.service.AnnotatorService.java
com.nbempire.android.magicannotator.service.GameServiceFactory.java
com.nbempire.android.magicannotator.service.GameService.java
com.nbempire.android.magicannotator.service.MarketItemService.java
com.nbempire.android.magicannotator.service.NavigationService.java
com.nbempire.android.magicannotator.service.PlayerService.java
com.nbempire.android.magicannotator.service.impl.AnnotatorServiceImpl.java
com.nbempire.android.magicannotator.service.impl.ChanchoServiceImpl.java
com.nbempire.android.magicannotator.service.impl.GameServiceImpl.java
com.nbempire.android.magicannotator.service.impl.GolfServiceImpl.java
com.nbempire.android.magicannotator.service.impl.MarketItemServiceImpl.java
com.nbempire.android.magicannotator.service.impl.NavigationServiceImpl.java
com.nbempire.android.magicannotator.service.impl.PlayerServiceImpl.java
com.nbempire.android.magicannotator.service.impl.TrucoServiceImpl.java
com.nbempire.android.magicannotator.service.impl.TuteServiceImpl.java
com.nbempire.android.magicannotator.storage.MagicAnnotatorDBHelper.java
com.nbempire.android.magicannotator.storage.schema.MarketItemTable.java
com.nbempire.android.magicannotator.storage.schema.PlayerTable.java
com.nbempire.android.magicannotator.util.ArrayUtil.java
com.nbempire.android.magicannotator.util.ExpandableArrayList.java
com.nbempire.android.magicannotator.util.ExpandableGroup.java
com.nbempire.android.magicannotator.util.ExpandableList.java
com.nbempire.android.magicannotator.util.RandomGenerator.java
com.nbempire.android.magicannotator.util.android.AppRater.java
com.nbempire.android.magicannotator.util.android.SimpleExpandableListActivity.java
com.nbempire.android.magicannotator.util.android.SimpleListAdapter.java
com.nbempire.android.magicannotator.util.android.TableListAdapter.java
com.nbempire.android.magicannotator.util.android.analytics.GoogleAnalyticsUtil.java
com.nbempire.android.magicannotator.util.android.database.SQLiteUtil.java
com.nbempire.android.magicannotator.util.android.view.MarketItemView.java
com.nbempire.android.magicannotator.util.android.view.ScoreEditorView.java
com.nbempire.android.magicannotator.util.android.view.ViewsUtil.java