Coverage Summary for Class: TowerStorage (it.polimi.ingsw.Model)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
TowerStorage |
100%
(1/1)
|
100%
(5/5)
|
85,7%
(12/14)
|
100%
(17/17)
|
1 package it.polimi.ingsw.Model;
2
3
4 import it.polimi.ingsw.Exceptions.Input.DuplicateElementException;
5 import it.polimi.ingsw.Exceptions.Input.InvalidElementException;
6 import it.polimi.ingsw.Model.Enums.TowerColour;
7
8 import java.io.Serial;
9 import java.io.Serializable;
10 import java.util.Stack;
11
12 /**
13 * A container for a set of {@link Tower}s of the same {@link TowerColour}
14 */
15 public class TowerStorage implements Serializable {
16 @Serial
17 private static final long serialVersionUID = 133L; // convention: 1 for model, (01 -> 99) for objects
18
19 private final TowerColour colour;
20 private final Stack<Tower> storage;
21
22 /**
23 * Creates the storage and fills it up with towers
24 *
25 * @param colour the colour of the towers in storage
26 * @param amount how many towers will be added to the storage
27 */
28 public TowerStorage(TowerColour colour, int amount) {
29 this.colour = colour;
30 this.storage = new Stack<>();
31 for (int i = 0; i < amount; i++) {
32 this.storage.push(new Tower(colour, this));
33 }
34 }
35
36 /**
37 * Get the colour of the stored {@link Tower}s
38 *
39 * @return the {@link TowerColour} this storage handles
40 */
41 public TowerColour getColour() {
42 return colour;
43 }
44
45 /**
46 * Extract a tower from storage.
47 *
48 * @return the extracted {@link Tower} or null if the storage is empty
49 */
50 public Tower extractTower() {
51 if (getTowerCount() == 0) return null;
52 return this.storage.pop();
53 }
54
55 /**
56 * Get the amount of towers left in storage
57 *
58 * @return the amount of {@link Tower}s left in storage
59 */
60 public int getTowerCount() {
61 return this.storage.size();
62 }
63
64 /**
65 * Put a {@link Tower} into storage
66 *
67 * @param t the Tower to add into storage
68 * @throws DuplicateElementException if the same {@link Tower} was found already present in storage
69 * @throws InvalidElementException {@link Tower} if the {@link TowerColour} of the Tower is not the same as the {@link TowerColour} of the
70 * storage
71 */
72 public void pushTower(Tower t) throws DuplicateElementException, InvalidElementException {
73 boolean checkIfPresent = storage.stream()
74 .anyMatch(i -> t == i);
75 if (!checkIfPresent && t.getColour() == this.colour) {
76 this.storage.push(t);
77 } else {
78 if (checkIfPresent) {
79 throw new DuplicateElementException("Tower");
80 }
81 if (t.getColour() != this.colour) {
82 throw new InvalidElementException("Tower");
83 }
84 }
85 }
86 }