package com.e2u.sort; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class MatchDataSource { private Map<Integer, Map<Integer, Match>> matchMap = new TreeMap<Integer, Map<Integer, Match>>(); private Map<Integer, Player> playerMap = new TreeMap<Integer, Player>(); private int minorScoreMode = MatchUtil.MINOR_SCORE_OPPONENT_MODE; private static MatchDataSource instance = new MatchDataSource(); private MatchDataSource() { } public static MatchDataSource getInstance() { return instance; } public Map<Integer, Map<Integer, Match>> getMatchMap() { return matchMap; } public Map<Integer, Player> getPlayerMap() { return playerMap; } public int getMinorScoreMode() { return minorScoreMode; } public Match getMatch(int id) { for(Iterator iter = matchMap.entrySet().iterator(); iter.hasNext(); ) { Map.Entry<Integer, Map<Integer, Match>> entry = (Map.Entry<Integer, Map<Integer, Match>>)iter.next(); Map<Integer, Match> roundMatchMap = entry.getValue(); if(roundMatchMap.containsKey(id)) { return roundMatchMap.get(id); } } return null; } public Player getPlayer(int id) { if(playerMap.containsKey(id)) { return playerMap.get(id); } return null; } public boolean isFightBefore(int player1ID, int player2ID) { Player player1 = playerMap.get(player1ID); if(player1 == null) { throw new IllegalArgumentException("[Error]: Can't find player: player1=" + player1ID + ", player2=" + player2ID); } for(int i = 0, size = player1.matchList.size(); i < size; i++) { Match match = getMatch(player1.matchList.get(i)); if(match == null) { throw new IllegalArgumentException("[Error]: Can't find match: matchID=" + player1.matchList.get(i)); } if(player2ID == getOpponentID(player1ID, match)) { return true; } } //This is not necessary. But place here for an assert. if(MatchUtil.isDebug()) { Player player2 = playerMap.get(player2ID); if(player1 == null) { throw new IllegalArgumentException("[Error]: Can't find player: player1=" + player1ID + ", player2=" + player2ID); } for(int i = 0, size = player2.matchList.size(); i < size; i++) { Match match = getMatch(player2.matchList.get(i)); if(match == null) { throw new IllegalArgumentException("[Error]: Can't find match: matchID=" + player2.matchList.get(i)); } if(player1ID == getOpponentID(player2ID, match)) { return true; } } } return false; } public int getOpponentID(int playerID, Match match) { if(match.player1.playerID == playerID) { return match.player2.playerID; } else if(match.player2.playerID == playerID) { return match.player1.playerID; } throw new IllegalArgumentException("[Error]: the player doesn't join the match, player=" + playerID + ", match=" + match); } public Player getOpponent(int playerID, Match match) { if(match.player1.playerID == playerID) { return getPlayer(match.player2.playerID); } else if(match.player2.playerID == playerID) { return getPlayer(match.player1.playerID); } throw new IllegalArgumentException("[Error]: the player doesn't join the match, player=" + playerID + ", match=" + match); } }