package com.esir.sr.sweetsnake.registry; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.esir.sr.sweetsnake.exception.PlayerNotFoundException; import com.esir.sr.sweetsnake.session.Player; /** * * @author Herminaƫl Rougier * @author Damien Jouanno * */ @Component public class PlayersRegistry { /********************************************************************************************** * [BLOCK] STATIC FIELDS **********************************************************************************************/ /** The logger */ private static final Logger log = LoggerFactory.getLogger(PlayersRegistry.class); /********************************************************************************************** * [BLOCK] FIELDS **********************************************************************************************/ /** The players map */ private Map<String, Player> players; /********************************************************************************************** * [BLOCK] CONSTRUCTOR **********************************************************************************************/ /** * */ protected PlayersRegistry() { super(); } /** * */ @PostConstruct protected void init() { log.info("Initializing the players registry"); players = new LinkedHashMap<String, Player>(); } /********************************************************************************************** * [BLOCK] PUBLIC METHODS **********************************************************************************************/ /** * * @param name * @return */ public boolean contains(final String name) { return players.containsKey(name); } /** * * @param player */ public void add(final Player player) { players.put(player.getName(), player); } /** * * @param name * @return * @throws PlayerNotFoundException */ public Player get(final String name) throws PlayerNotFoundException { if (!contains(name)) { log.warn("Player with name {} was not found", name); throw new PlayerNotFoundException("player not found"); } return players.get(name); } /** * * @param name * @throws PlayerNotFoundException */ public void remove(final String name) throws PlayerNotFoundException { if (!contains(name)) { log.warn("Player with name {} was not found", name); throw new PlayerNotFoundException("player not found"); } final Player player = players.get(name); players.remove(name); log.debug("Player {} has been removed from registry", player.getName()); } /** * * @return */ public Set<String> getPlayersName() { return Collections.unmodifiableSet(players.keySet()); } }