package org.mafagafogigante.dungeon.wiki;
import org.mafagafogigante.dungeon.game.Name;
import org.mafagafogigante.dungeon.game.NameFactory;
import org.mafagafogigante.dungeon.util.Selectable;
import org.mafagafogigante.dungeon.util.Utils;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import java.util.TreeSet;
/**
* Article class that represents a wiki article.
*/
final class Article implements Selectable {
private final Name title;
private final String content;
private final Set<String> seeAlso = new TreeSet<>();
public Article(@NotNull String title, @NotNull String content) {
this.title = NameFactory.newInstance(title);
this.content = content;
}
boolean hasReference(String reference) {
return seeAlso.contains(reference);
}
/**
* Adds a reference to the See Also section of this article.
*
* @param reference the reference, must not have already been added
*/
void addReference(@NotNull final String reference) {
if (hasReference(reference)) {
throw new IllegalStateException("article " + getName() + " already has a reference to " + reference);
}
seeAlso.add(reference);
}
/**
* Returns the title of this Article.
*/
@Override
public Name getName() {
return title;
}
public String getContent() {
return content;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(title);
stringBuilder.append("\n\n");
stringBuilder.append(content);
if (!seeAlso.isEmpty()) {
stringBuilder.append("\n\n");
stringBuilder.append("See also: ");
stringBuilder.append(Utils.enumerate(seeAlso));
stringBuilder.append(";");
}
return stringBuilder.toString();
}
}