package org.mafagafogigante.dungeon.util.library; import org.mafagafogigante.dungeon.io.JsonObjectFactory; import org.mafagafogigante.dungeon.logging.DungeonLogger; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; import java.util.ArrayList; /** * A Library of Poems. */ public final class PoetryLibrary { private final ArrayList<Poem> poems = new ArrayList<>(); private final AutomaticShuffledRange automaticShuffledRange; PoetryLibrary() { loadPoems(); automaticShuffledRange = new AutomaticShuffledRange(poems.size()); } private void loadPoems() { JsonObject jsonObject = JsonObjectFactory.makeJsonObject("poems.json"); for (JsonValue poem : jsonObject.get("poems").asArray()) { JsonObject poemObject = poem.asObject(); String title = poemObject.get("title").asString(); String author = poemObject.get("author").asString(); String content = poemObject.get("content").asString(); poems.add(new Poem(title, author, content)); } poems.trimToSize(); DungeonLogger.info("Loaded " + poems.size() + " poems."); } /** * Returns how many poems the library has. * * <p>This should be the first method called in this Library, as it triggers its initialization if it has not happened * yet. */ public int getPoemCount() { return poems.size(); } /** * Returns the poem at the specified index. */ public Poem getPoem(int index) { return poems.get(index); } /** * Returns the next poem according to the underlying {@code AutomaticShuffledRange}. */ public Poem getNextPoem() { return poems.get(automaticShuffledRange.getNext()); } }