package solution; import model.Arrest; import model.Play; import model.PlayData; import java.util.ArrayList; import java.util.HashMap; /** * Created by vmuser on 5/8/15. */ public class ArrestParser { public static PlayData parseArrest(Play play, HashMap<String, ArrayList<String>> teamSeasonToPlayersArrested) { Arrest arrest = new Arrest(); processPlay(play, arrest, teamSeasonToPlayersArrested); return new PlayData(play, arrest, null, null); } private static void processPlay(Play play, Arrest arrest, HashMap<String, ArrayList<String>> teamSeasonToPlayersArrested) { checkArrests(play, arrest, true, teamSeasonToPlayersArrested); checkArrests(play, arrest, false, teamSeasonToPlayersArrested); if (play.getOffense().equals(play.getHomeTeam())) { // Offense is home team arrest.setHomeTeamPlayerArrested(arrest.getOffensePlayerArrested()); arrest.setAwayTeamPlayerArrested(arrest.getDefensePlayerArrested()); } else { // Defense is home team arrest.setHomeTeamPlayerArrested(arrest.getDefensePlayerArrested()); arrest.setAwayTeamPlayerArrested(arrest.getOffensePlayerArrested()); } } /** * Checks to see if the team has any arrests */ private static void checkArrests(Play play, Arrest arrest, boolean checkOffense, HashMap<String, ArrayList<String>> teamSeasonToPlayersArrested) { boolean playerArrested = false; String season = play.getYear().toString(); // Check for arrests ArrayList<String> arrestedPlayers = teamSeasonToPlayersArrested.get(getKey(season, checkOffense ? play.getOffense().toString() : play.getDefense().toString())); if (arrestedPlayers != null) { if (checkOffense) { arrest.setOffensePlayerArrested(true); playerArrested = wasPlayerArrested(play.getQB().toString(), play, arrestedPlayers); if (!playerArrested) { playerArrested = wasPlayerArrested(play.getOffensivePlayer().toString(), play, arrestedPlayers); } arrest.setPlayerArrested(arrest.getPlayerArrested() || playerArrested); } else { playerArrested = wasPlayerArrested(play.getDefensivePlayer1().toString(), play, arrestedPlayers); if (!playerArrested && play.getDefensivePlayer2() != null) { playerArrested = wasPlayerArrested(play.getDefensivePlayer2().toString(), play, arrestedPlayers); } arrest.setPlayerArrested(arrest.getPlayerArrested() || playerArrested); } } } private static boolean wasPlayerArrested(String player, Play play, ArrayList<String> arrestedPlayers) { for (String arrestedPlayer : arrestedPlayers) { // See if the regular name is there if (player.equals(arrestedPlayer)) { return true; } // Try it again with the initial String firstInitial = arrestedPlayer.substring(0, 1) + "." + arrestedPlayer.substring(arrestedPlayer.indexOf(" ")); if (firstInitial.equals(player)) { return true; } // Try one more time in the play description in case it wasn't parsed if (play.getPlayDesc().toString().indexOf(firstInitial) != -1 || play.getPlayDesc().toString().indexOf(arrestedPlayer) != -1) { return true; } } return false; } public static String getKey(String season, String team) { return season + "-" + team; } }