package org.mafagafogigante.dungeon.achievements;
import org.mafagafogigante.dungeon.game.Id;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* A class that stores Achievements.
*/
public final class AchievementStore {
private final Set<Id> registeredIds = new HashSet<>();
private final List<Achievement> achievements = new ArrayList<>();
private boolean locked = false;
AchievementStore() {
}
/**
* Returns an unmodifiable view of the achievements contained in this AchievementStore.
*/
public List<Achievement> getAchievements() {
return Collections.unmodifiableList(achievements);
}
/**
* Adds a new Achievement to this AchievementStore.
*
* <p>Throws an IllegalStateException if this AchievementStore is locked <p>Throws an IllegalArgumentException if this
* AchievementStore already has an Achievement with the same Id
*/
public void addAchievement(Achievement achievement) {
if (locked) {
throw new IllegalStateException("this AchievementStore is locked");
}
if (registeredIds.contains(achievement.getId())) {
throw new IllegalArgumentException("there is already an Achievement with the id " + achievement.getId());
}
registeredIds.add(achievement.getId());
achievements.add(achievement);
}
/**
* Locks this AchievementStore, disallowing it to receive new Achievements.
*/
public void lock() {
locked = true;
}
}