Coverage Summary for Class: Island (it.polimi.ingsw.Model)

Class Class, % Method, % Branch, % Line, %
Island 100% (1/1) 100% (6/6) 75% (3/4) 68,8% (11/16)


1 package it.polimi.ingsw.Model; 2  3 import it.polimi.ingsw.Exceptions.Input.InvalidElementException; 4 import it.polimi.ingsw.Logger; 5 import it.polimi.ingsw.Misc.OptionalValue; 6 import it.polimi.ingsw.Model.Enums.PawnColour; 7 import it.polimi.ingsw.Model.Enums.TowerColour; 8  9 import java.io.Serial; 10 import java.io.Serializable; 11 import java.util.ArrayList; 12 import java.util.List; 13  14 /** 15  * Islands are containers of {@link PawnColour}s and {@link Tower}.The islands can be grouped through {@link IslandGroup} 16  */ 17 public class Island implements Serializable { 18  @Serial 19  private static final long serialVersionUID = 121L; // convention: 1 for model, (01 -> 99) for objects 20  21  private final int id; 22  private final ArrayList<PawnColour> students; 23  private Tower tower; 24  25  /** 26  * Construct an Island, assinging an ID to it. 27  * 28  * @param id the id of the constructed Island. 29  */ 30  public Island(int id) { 31  this.id = id; 32  this.students = new ArrayList<>(); 33  this.tower = null; 34  } 35  36  /** 37  * @return the ID of the Island 38  */ 39  public int getId() { 40  return id; 41  } 42  43  /** 44  * @return the {@link PawnColour}s contained in the Island 45  */ 46  public List<PawnColour> getStudents() { 47  return new ArrayList<>(students); 48  } 49  50  /** 51  * If a tower is present, return a non-empty {@link OptionalValue} 52  * 53  * @return the colour of the contained tower wrapped in a {@link OptionalValue} 54  */ 55  public OptionalValue<TowerColour> getTowerColour() { 56  if (this.tower == null) return OptionalValue.empty(); 57  else return OptionalValue.of(this.tower.getColour()); 58  } 59  60  /** 61  * a student can be added to the Island through this method 62  * 63  * @param p the {@link PawnColour} to add to the island 64  */ 65  public void addStudent(PawnColour p) { 66  students.add(p); 67  } 68  69  /** 70  * a {@link Tower} may need to be swapped or added during the Island's lifespan, this method can be used for that 71  * 72  * @param t the new {@link Tower} to be put on the island. the old tower (if any was present) will be returned to its 73  * rightful storage automatically. The input can be null, this removes the tower from the island 74  */ 75  public void swapTower(Tower t) { 76  if (this.tower != null) { 77  try { 78  this.tower.linkBackToStorage(); 79  } catch (InvalidElementException e) { 80  Logger.severe("Tower could not be pushed back to its original Storage. Critical, unrecoverable error"); 81  throw new RuntimeException(e); 82  } 83  } 84  this.tower = t; 85  } 86  87 }