Coverage Summary for Class: IslandUI (it.polimi.ingsw.Client.CLI)

Class Method, % Branch, % Line, %
IslandUI 0% (0/3) 0% (0/17) 0% (0/37)
IslandUI$1 0% (0/1) 0% (0/1)
Total 0% (0/4) 0% (0/17) 0% (0/38)


1 package it.polimi.ingsw.Client.CLI; 2  3 import it.polimi.ingsw.Misc.Symbols; 4 import it.polimi.ingsw.Misc.Utils; 5 import it.polimi.ingsw.Model.Enums.PawnColour; 6 import it.polimi.ingsw.Model.IslandGroup; 7 import it.polimi.ingsw.Model.Model; 8  9 import java.util.List; 10  11 /** 12  * IslandUI allows to print a placeholder containing an {@link IslandGroup} representation or an empty row 13  * which could be needed if there was previously an IslandGroup on the console which does not exist anymore 14  * in the model 15  */ 16 public class IslandUI { 17  18  /** 19  * The {@link IslandGroup} will be represented with its ID value and the students and towers on it. 20  * <br> 21  * The students will be ordered by frequency on the island to better highlight the influence. 22  * <br> 23  * Mother Nature is represented by an asterisk 24  * <br> 25  * The number of tower is shown via a number 26  * 27  * @param i the subject to be represented 28  * @param ctx reference to the model used to identify the presence of the mother nature piece on the island group 29  * @return the representation of an island group. 30  */ 31  public static String draw(IslandGroup i, Model ctx) { 32  // Adds an identifier if the island contains MotherNature 33  String mn = ctx.getMutableIslandField().getMutableMotherNaturePosition().equals(i) ? "*" : ""; 34  35  StringBuilder students = new StringBuilder(); 36  // Prints each student on the island 37  List<PawnColour> sortedStudents = Utils.sortByFrequency(i.getStudents()); 38  for (PawnColour p : sortedStudents) { 39  students.append(Symbols.colorizeStudent(p, Symbols.PAWN + " ")); 40  } 41  42  // Adds padding if the current island doesn't hold the most students 43  int maxStudents = 0; 44  for (IslandGroup ig : ctx.getMutableIslandField().getMutableGroups()) { 45  maxStudents = Math.max(maxStudents, ig.getStudents().size()); 46  } 47  if (i.getStudents().size() < maxStudents) { 48  students.append(" ".repeat(maxStudents - i.getStudents().size())); // padding 49  } 50  51  // Prints the tower representation accounting for team and quantity 52  String tower = ""; 53  if (i.getTowerColour().isPresent()) { 54  switch (i.getTowerColour().get()) { 55  case BLACK -> tower = tower + "\t" + Symbols.colour(Symbols.TOWER + " ", Symbols.BLACK) 56  + i.getTowerCount(); 57  case GRAY -> tower = tower + "\t" + Symbols.colour(Symbols.TOWER + " ", Symbols.GRAY) 58  + i.getTowerCount(); 59  case WHITE -> tower = tower + "\t" + Symbols.colour(Symbols.TOWER + " ", Symbols.WHITE) 60  + i.getTowerCount(); 61  62  } 63  } else tower = "\t" + " ".repeat(4); 64  65  String islandTitle = "Island " + i.getId(); // island's title and id 66  if (i.getMutableNoEntryTiles().size() > 0) { 67  // The title will be crossed out if the island's influence cannot be changed 68  islandTitle = Symbols.OVERLAY + islandTitle + Symbols.RESET + Symbols.BACKGROUND; 69  } 70  return mn + islandTitle + ":\t" + students + tower; 71  } 72  73  /** 74  * It basically provides the same result as {@link IslandUI#draw(IslandGroup, Model)} but it replaces 75  * all characters with whitespaces (except tabulations) 76  * 77  * @param ctx reference to the model used to identify the island group containing the most students 78  * @return an all whitespace's filled String, long enough to fill the IslandUIs' composition 79  */ 80  public static String drawEmptyRow(Model ctx) { 81  String mn = ""; 82  83  String islandTitle = " ".repeat(10); 84  85  String students = ""; 86  87  int maxStudents = 0; 88  for (IslandGroup ig : ctx.getMutableIslandField().getMutableGroups()) { 89  maxStudents = Math.max(maxStudents, ig.getStudents().size()); 90  } 91  students = students + " ".repeat(maxStudents); 92  93  String tower = "\t" + " ".repeat(4); 94  95  return mn + islandTitle + " \t" + students + tower; 96  } 97 } 98  99