Coverage Summary for Class: TeamMapper (it.polimi.ingsw.Model)
| Class | Class, % | Method, % | Branch, % | Line, % | 
|---|---|---|---|---|
| TeamMapper | 100% (1/1) | 80% (4/5) | 100% (10/10) | 75% (12/16) | 
1 package it.polimi.ingsw.Model; 2 3 import it.polimi.ingsw.Model.Enums.TeamID; 4 import it.polimi.ingsw.Model.Enums.TowerColour; 5 6 import java.io.Serial; 7 import java.io.Serializable; 8 import java.util.HashMap; 9 import java.util.List; 10 import java.util.Map; 11 12 /** 13 * Maps the players in the model to their respective teams and {@link TowerStorage} 14 */ 15 public class TeamMapper implements Serializable { 16 @Serial 17 private static final long serialVersionUID = 136L; // convention: 1 for model, (01 -> 99) for objects 18 final Map<PlayerBoard, TeamID> playerTeamMap; 19 final Map<TeamID, TowerStorage> towerStorageMap; 20 21 /** 22 * Creates a new mapper. If the players are not 4, every player gets put into its own special team. If 4 players 23 * are inputted, the first pair of players will be put in the first team, and the second pair into the second team. 24 * 25 * @param players a {@link List} of {@link PlayerBoard}s to put into teams. 26 */ 27 public TeamMapper(List<PlayerBoard> players) { 28 this.playerTeamMap = new HashMap<>(); 29 int nop = players.size(); 30 for (int i = 0; i < nop; i++) { 31 this.playerTeamMap.put(players.get(i), TeamID.fromInteger(i % (nop == 4 ? 2 : nop))); 32 } // note: for 4 players the first team is always made up by the even nicknames 33 this.towerStorageMap = new HashMap<>(); // creates tower storage associations based on number of players 34 for (int i = 0; i < (nop == 4 ? 2 : nop); i++) { 35 TeamID tID = TeamID.fromInteger(i); 36 this.towerStorageMap.put(tID, new TowerStorage(TowerColour.fromTeamId(tID), nop == 3 ? 6 : 8)); 37 } 38 } 39 40 /** 41 * Get a team's players 42 * 43 * @param tID the ID of the Team to search players of 44 * @return an Unmutable {@link List} containing references to the team's {@link PlayerBoard}s 45 */ 46 public List<PlayerBoard> getMutablePlayers(TeamID tID) { 47 return playerTeamMap.entrySet().stream() 48 .filter(e -> e.getValue().equals(tID)) 49 .map(Map.Entry::getKey) 50 .toList(); 51 } 52 53 /** 54 * Get a team's tower storage 55 * 56 * @param pb the player to find the {@link TowerStorage} of 57 * @return a reference to {@link TowerStorage}, or null if the {@link PlayerBoard} matches no team in the game 58 */ 59 public TowerStorage getMutableTowerStorage(PlayerBoard pb) { 60 return this.getMutableTowerStorage(this.getTeamID(pb)); 61 } 62 63 /** 64 * Get a team's tower storage 65 * 66 * @param tID the ID of the Team to search the tower storage of 67 * @return a reference to {@link TowerStorage}, or null if the TeamID is invalid 68 */ 69 public TowerStorage getMutableTowerStorage(TeamID tID) { 70 return towerStorageMap.get(tID); 71 } 72 73 /** 74 * Get the team of a player 75 * 76 * @param pb the player to find the {@link TeamID} of 77 * @return the {@link TeamID} of the player in input or null if the {@link PlayerBoard} matches no team in the game 78 */ 79 public TeamID getTeamID(PlayerBoard pb) { 80 return playerTeamMap.get(pb); 81 } 82 }